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绘制人人网好友关系图示例
Apr 01 Python
Python切片用法实例教程
Sep 08 Python
Python如何判断数独是否合法
Sep 08 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
PyQt5实现拖放功能
Apr 25 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
python flask框架实现重定向功能示例
Jul 02 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
Python 避免字典和元组的多重嵌套问题
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
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
实用自动化运维Python脚本分享
2018/06/04 Python
详解python中的json和字典dict
2018/06/22 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
pandas 对group进行聚合的例子
2019/12/27 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
生产部管理制度
2014/01/31 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
天堂的孩子观后感
2015/06/11 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android