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中isnumeric()方法的使用简介
May 19 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
几种实用的pythonic语法实例代码
Feb 24 Python
python读取中文txt文本的方法
Apr 12 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
python 用struct模块解决黏包问题
Nov 07 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 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中的加密功能
2006/10/09 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
JSONP 跨域共享信息
2012/08/16 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
六月份红领巾广播稿
2014/02/03 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
先进典型发言材料
2014/12/30 职场文书
小学生学习保证书
2015/02/26 职场文书
焦裕禄观后感
2015/06/03 职场文书
后天观后感
2015/06/08 职场文书
李强感恩观后感
2015/06/17 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python