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运行效率
Jun 09 Python
python开发之thread线程基础实例入门
Nov 11 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
对python文件读写的缓冲行为详解
Feb 13 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
python实现控制台输出颜色
Mar 02 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 Python
Python 数据可视化之Seaborn详解
Nov 02 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
SONY SRF-40W电路分析
2021/03/02 无线电
PHP安全配置
2006/12/06 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
FCK调用方法..
2006/12/21 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[01:13]这,就是刀塔
2014/07/16 DOTA
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
python 检查文件mime类型的方法
2018/12/08 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
用python发送微信消息
2020/12/21 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
新闻发布会主持词
2014/03/28 职场文书
公司委托书格式范文
2014/10/09 职场文书
小时代观后感
2015/06/10 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
Java死锁的排查
2022/05/11 Java/Android