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中实现结构相似的函数调用方法
Mar 10 Python
python抓取最新博客内容并生成Rss
May 17 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python实现DDos攻击实例详解
Feb 02 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
浅谈python 类方法/静态方法
Sep 18 Python
Python requests库参数提交的注意事项总结
Mar 29 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
配置支持SSI
2006/11/25 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php时区转换转换函数
2014/01/07 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
python实现飞机大战
2018/09/11 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
python关于倒排列的知识点总结
2020/10/13 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
区优秀教师事迹材料
2014/02/10 职场文书
活动宣传策划方案
2014/05/23 职场文书
服务行业演讲稿
2014/09/02 职场文书
防灾减灾标语
2014/10/07 职场文书
实习计划书范文
2015/01/16 职场文书
个人优缺点总结
2015/02/28 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android