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 20 Python
Python实现telnet服务器的方法
Jul 10 Python
python实现简易云音乐播放器
Jan 04 Python
tensorflow实现加载mnist数据集
Sep 08 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python opencv 图像拼接的实现方法
Jun 27 Python
Python动态语言与鸭子类型详解
Jul 01 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python进程间的通信之语法学习
Apr 11 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缓存技术的使用说明
2011/08/06 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
处理单名多值表单的详解
2013/06/08 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
php实现URL加密解密的方法
2016/11/17 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
深入浅析Python中的迭代器
2019/06/04 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Python调用C语言程序方法解析
2020/07/07 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
小学生自我鉴定
2013/10/12 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
车辆工程专业求职信
2014/04/28 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
2014年工程部工作总结
2014/11/25 职场文书
python游戏开发Pygame框架
2022/04/22 Python
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers