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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python中使用HTMLParser解析html实例
Feb 08 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
python算法表示概念扫盲教程
Apr 13 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
python对csv文件追加写入列的方法
Aug 01 Python
安装python及pycharm的教程图解
Oct 10 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 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
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
jquery 插件开发备注
2010/08/27 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
深入理解Node module模块
2018/03/26 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
学年自我鉴定范文
2013/10/01 职场文书
儿科护士自我鉴定
2013/10/14 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
大班亲子运动会方案
2014/06/10 职场文书
国贸专业求职信
2014/06/28 职场文书
2014年内勤工作总结
2014/11/24 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
运动会广播稿300字
2015/08/19 职场文书
2019年教师入党申请书
2019/06/27 职场文书