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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
python中的字典详细介绍
Sep 18 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
scrapy爬虫完整实例
Jan 25 Python
Python发送http请求解析返回json的实例
Mar 26 Python
python2 与 python3 实现共存的方法
Jul 12 Python
Python中整数的缓存机制讲解
Feb 16 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
Python 必须了解的5种高级特征
Sep 10 Python
python入门教程之基本算术运算符
Nov 13 Python
安装不同版本的tensorflow与models方法实现
Feb 20 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 mongodb扩展时 需要注意的事项
2013/06/18 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
Javascript中的call()方法介绍
2015/03/15 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python元组操作实例解析
2014/09/23 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python常见数字运算操作实例小结
2019/03/22 Python
详解python pandas 分组统计的方法
2019/07/30 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
柏林通行证:Berlin Pass
2018/04/11 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
学术诚信承诺书
2014/05/26 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
感恩教育观后感
2015/06/17 职场文书
毕业典礼主持词
2015/06/29 职场文书
学生病假条范文
2015/08/17 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
pandas取dataframe特定行列的实现方法
2021/05/24 Python
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL