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 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
python正则表达式的使用
Jun 12 Python
python操作redis方法总结
Jun 06 Python
Selenium的使用详解
Oct 19 Python
Python Cookie 读取和保存方法
Dec 28 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python filter过滤器原理及实例应用
Aug 18 Python
python归并排序算法过程实例讲解
Nov 04 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 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/06/09 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
Python中装饰器的一个妙用
2015/02/08 Python
Python中进程和线程的区别详解
2017/10/29 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
pymysql模块使用简介与示例
2020/11/17 Python
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
校领导推荐信
2013/11/01 职场文书
客服专员岗位职责范本
2013/11/29 职场文书
3分钟演讲稿
2014/04/30 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
绿色环保倡议书
2015/04/28 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers