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实现查询IP地址所在地
Mar 29 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
Python线程详解
Jun 24 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 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
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
Python列表与元组的异同详解
2019/07/02 Python
python动态进度条的实现代码
2019/07/03 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
Django xadmin安装及使用详解
2020/10/26 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
高山背包:High Sierra
2017/11/23 全球购物
中学生操行评语大全
2014/04/24 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
体育运动会广播稿
2014/10/05 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
go类型转换及与C的类型转换方式
2021/05/05 Golang