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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
python代码制作configure文件示例
Jul 28 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
python中argparse模块用法实例详解
Jun 03 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 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 PDO中文乱码解决办法
2009/07/20 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
php文件系统处理方法小结
2016/05/23 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python中optparse模块使用浅析
2015/01/01 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
python实现AES加密与解密
2019/03/28 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
python对文件的操作方法汇总
2020/02/28 Python
python如何保存文本文件
2020/06/07 Python
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
高三语文教学反思
2014/01/15 职场文书
小学数学教研活动总结
2014/07/01 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
大学推普周活动总结
2015/05/07 职场文书
小学体育组工作总结
2015/08/13 职场文书
小学教代会开幕词
2016/03/04 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书