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 28 Python
使用PDB简单调试Python程序简明指南
Apr 25 Python
深入解析Python中的__builtins__内建对象
Jun 21 Python
Python复数属性和方法运算操作示例
Jul 21 Python
使用Python进行目录的对比方法
Nov 01 Python
详解numpy的argmax的具体使用
May 27 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
python爬虫实现获取下一页代码
Mar 13 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
Python根据字符串调用函数过程解析
Nov 05 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
mysql 全文搜索 技巧
2007/04/27 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
javascript与webservice的通信实现代码
2010/12/25 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
Python计算已经过去多少个周末的方法
2015/07/25 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
python3 求约数的实例
2019/12/05 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
企业法人授权委托书
2014/09/25 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
入党申请书格式
2019/06/20 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
教你用python控制安卓手机
2021/05/13 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python