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基于Tkinter的HelloWorld入门实例
Jun 17 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
Python高并发和多线程有什么关系
Nov 14 Python
Python基础之元组与文件知识总结
May 19 Python
python 定义函数 返回值只取其中一个的实现
May 21 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的安全策略
2006/10/09 PHP
php代码优化及php相关问题总结
2006/10/09 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php文件上传的简单实例
2013/10/19 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
农行实习自我鉴定
2013/09/22 职场文书
工程管理造价应届生求职信
2013/11/13 职场文书
初中生物教学反思
2014/01/10 职场文书
运动会入场解说词300字
2014/01/25 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
《画》教学反思
2014/04/14 职场文书
小学生期末评语大全
2014/04/21 职场文书
学习演讲稿范文
2014/05/10 职场文书
三下乡个人总结
2015/03/04 职场文书
企业安全生产检查制度
2015/08/06 职场文书