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的Django框架测试驱动开发的教程
Apr 22 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
python实现K最近邻算法
Jan 29 Python
Python for循环中的陷阱详解
Jul 13 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
Python3.5集合及其常见运算实例详解
May 01 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
基于python的列表list和集合set操作
Nov 24 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
深入理解Python 多线程
Jun 16 Python
python openpyxl模块的使用详解
Feb 25 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中IP地址与整型数字互相转换详解
2014/08/20 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python正则捕获操作示例
2017/08/19 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
建筑项目策划书
2014/01/13 职场文书
党员活动日总结
2014/05/05 职场文书
工厂见习报告范文
2014/10/31 职场文书
幼儿园中班班级总结
2015/08/10 职场文书