Jacobi迭代算法的Python实现详解


Posted in Python onJune 29, 2019
import numpy as np
import time

1.1 Jacobi迭代算法

def Jacobi_tensor_V2(A,b,Delta,m,n,M):
start=time.perf_counter()#开始计时
find=0#用于标记是否在规定步数内收敛
X=np.ones(n)#迭代起始点
x=np.ones(n)#用于存储迭代的中间结果
d=np.ones(n)#用于存储Ax**(m-2)的对角线部分
m1=m-1
m2=2-m
for i in range(M):
print('X',X)
a=np.copy(A)
#得Ax**(m-2)
for j in range(m-2):
a=np.dot(a,X)
#得d 和 (2-m)Dx**(m-2)+(L'+U')x**(m-2)
for j in range(n):
d[j]=a[j,j]
a[j,j]=m2*a[j,j]
#迭代更新
for j in range(n):
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_1():
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)
Jacobi_tensor_V2(A,b,Delta,m,n)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
AI人工智能 Python实现人机对话
Nov 13 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 Python
python使用turtle绘制国际象棋棋盘
May 23 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
pytorch常用数据类型所占字节数对照表一览
May 17 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 #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
You might like
php实现简单洗牌算法
2013/06/18 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
python实现的jpg格式图片修复代码
2015/04/21 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
django实现类似触发器的功能
2019/11/15 Python
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
中药专业自荐信范文
2014/03/18 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
文员岗位职责范本
2015/04/16 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
丧事主持词
2015/07/02 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫