Gauss-Seidel迭代算法的Python实现详解


Posted in Python onJune 29, 2019
import numpy as np
import time

1.1 Gauss-Seidel迭代算法

def GaussSeidel_tensor_V2(A,b,Delta,m,n,M):
start=time.perf_counter()
find=0
X=np.ones(n)
d=np.ones(n)
m1=m-1
m2=2-m
for i in range(M):
print('X',X)
x=np.copy(X)
#迭代更新
for j in range(n):
a=np.copy(A)
for k in range(m-2):
a=np.dot(a,x)
for k in range(n):
d[k]=a[k,k]
a[k,k]=m2*a[k,k] 
x[j]=(b[j]-np.dot(a[j],x))/(m1*d[j])
#判断是否满足精度要求
if np.max(np.fabs(X-x))<Delta:
find=1
break 
X=np.copy(x)
end=time.perf_counter()
print('时间:',end-start)
print('迭代',i)
return X,find,i,end-start

1.2张量A的生成函数和向量b的生成函数:

def Creat_A(m,n):#生成张量A
size=np.full(m, n)
X=np.ones(n)
while 1:
#随机生成给定形状的张量A
A=np.random.randint(-49,50,size=size)
#判断Dx**(m-2)是否非奇异,如果是,则满足要求,跳出循环
D=np.copy(A)
for i1 in range(n):
for i2 in range(n):
if i1!=i2:
D[i1,i2]=0
for i in range(m-2):
D=np.dot(D,X)
det=np.linalg.det(D)
if det!=0:
break
#将A的对角面张量扩大十倍,使对角面占优
for i1 in range(n):
for i2 in range(n):
if i1==i2:
A[i1,i2]=A[i1,i2]*10
print('A:')
print(A)
return A
#由A和给定的X根据Ax**(m-1)=b生成向量b
def Creat_b(A,X,m):
a=np.copy(A)
for i in range(m-1):
a=np.dot(a,X)
print('b:')
print(a)
return a

1.3 对称张量S的生成函数:

def Creat_S(m,n):#生成对称张量B
size=np.full(m, n)
S=np.zeros(size)
print('S',S)
for i in range(4):
#生成n为向量a
a=np.random.random(n)*np.random.randint(-5,6)
b=np.copy(a)
#对a进行m-1次外积,得到秩1对称张量b
for j in range(m-1):
b=outer(b,a)
#将不同的b叠加得到低秩对称张量S
S=S+b
print('S:')
print(S)
return S
def outer(a,b):
c=[]
for i in b:
c.append(i*a)
return np.array(c)
return a

1.4 实验二

def test_2():
Delta=0.01#精度
m=3#A的阶数
n=3#A的维数
M=200#最大迭代步数
X_real=np.array( [2,3,4])
A=Creat_A(m,n) 
b=Creat_b(A,X_real,m)
GaussSeidel_tensor_V2(A,b,Delta,m,n)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
零基础写python爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python中global与nonlocal比较
Nov 21 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
解决python报错MemoryError的问题
Jun 26 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
python爬虫实现中英翻译词典
Jun 25 Python
Python学习笔记之For循环用法详解
Aug 14 Python
python机器学习实现决策树
Nov 11 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
python opencv旋转图片的使用方法
Jun 04 Python
python异步实现定时任务和周期任务的方法
Jun 29 #Python
python循环定时中断执行某一段程序的实例
Jun 29 #Python
python顺序执行多个py文件的方法
Jun 29 #Python
如何使用python把ppt转换成pdf
Jun 29 #Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 #Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 #Python
python全栈要学什么 python全栈学习路线
Jun 28 #Python
You might like
PHP 处理图片的类实现代码
2009/10/23 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jquery禁用右键示例
2014/04/28 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
详解JS数值Number类型
2018/02/07 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python中super的用法实例
2015/05/28 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
Python数据正态性检验实现过程
2020/04/18 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
应届本科生推荐信范文
2013/12/25 职场文书
新学期决心书
2014/03/11 职场文书
软件售后服务承诺书
2014/05/21 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
竞聘书的秘诀
2019/04/02 职场文书
Golang 字符串的常见操作
2022/04/19 Golang