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 15 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
pandas Dataframe行列读取的实例
Jun 08 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
python 构造三维全零数组的方法
Nov 12 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
JS获取父节点方法
2009/08/20 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
javascript 回调函数详解
2014/11/11 Javascript
javascript闭包的理解
2015/04/01 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python改变日志(logging)存放位置的示例
2014/03/27 Python
python中readline判断文件读取结束的方法
2014/11/08 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
python算的上脚本语言吗
2020/06/22 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
医药代表个人求职信范本
2013/12/19 职场文书
初一家长会邀请函
2014/01/31 职场文书
违纪检讨书2000字
2014/02/08 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
JavaScript中reduce()的用法
2022/05/11 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript