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使用PyV8执行javascript代码示例分享
Dec 04 Python
python使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
python实现文本文件合并
Dec 29 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
python如何修改装饰器中参数
Mar 20 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
python爬虫使用正则爬取网站的实现
Aug 03 Python
python飞机大战游戏实例讲解
Dec 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实现对两个数组进行减法操作的方法
2015/04/17 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
javascript window对象属性整理
2009/10/24 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
vue仿ios列表左划删除
2019/09/26 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
个人求职信范文分享
2013/12/13 职场文书
校本教研活动总结
2014/07/01 职场文书
铣工实训报告
2014/11/05 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
公司禁烟通知
2015/04/23 职场文书
最美乡村教师观后感
2015/06/11 职场文书
停发工资证明范本
2015/06/12 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL