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 相关文章推荐
Python 字符串中的字符倒转
Sep 06 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
Python 中 Meta Classes详解
Feb 13 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python pandas 如何替换某列的一个值
Jun 09 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
在ipython notebook中使用argparse方式
Apr 20 Python
如何在python中处理配置文件代码实例
Sep 27 Python
Python作用域和名称空间的详细介绍
Apr 13 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中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python创建xml文件示例
2017/03/22 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
用python计算文件的MD5值
2020/12/23 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
创业计划书的主要内容有哪些
2014/01/29 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
表彰大会策划方案
2014/05/13 职场文书
护士节策划方案
2014/05/19 职场文书
大学计划书范文800字
2014/08/14 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
水电工岗位职责
2015/02/14 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Python 制作自动化翻译工具
2021/04/25 Python
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
vue实现在data里引入相对路径
2022/06/05 Vue.js