目录

​1、概述​

​2、知识结构​

​3、代码(以三阶为例) ​

​4、代码(成百上千阶方法):​


1、概述

       许多实际问题的数学模型最终都要归结为求解线性方程组。例如:石油工业的油气资源探查、航天工业中飞机导弹的设计、天气预报和核武器的设计等,都需要求解线性方程组。这些方程组,大多规模很大,未知元达到几十万个,而且有的方程组对求解时间也有严格的限制,例如数值1天气预报,为了赶上每天发布预报的需要,只有短短几个小时的计算时间。如何快速求解线性方程组是科学与工程计算的核心问题之一。

2、知识结构

数值分析---Jacobi迭代法_线性代数

3、代码(以三阶为例) 

import numpy as np

A = np.array([[10.0, -1, -2], [-1, 10, -2], [-1, -1, 5]])
B = np.array([7.2, 8.3, 4.2])
x0 = np.array([1.0, 1, 1])
x = np.array([0.0, 0, 0])
times=0
while True:
for i in range(3):
temp = 0
for j in range(3):
if i != j:
temp += x0[j] * A[i][j]
x[i] = (B[i] - temp) / A[i][i]
#误差分析部分:
calTemp = max(abs(x - x0))
times += 1
if calTemp < 1e-6:
break
else:
x0 = x.copy() #如果误差过大,让x0=x,进行下一次循环
print("迭代次数为:{0},迭代值为:{1}".format(times,x))
#结果

迭代次数为:1,迭代值为:[1.02 1.13 1.24]
迭代次数为:2,迭代值为:[1.081 1.18 1.27 ]
迭代次数为:3,迭代值为:[1.092 1.1921 1.2922]
迭代次数为:4,迭代值为:[1.09765 1.19764 1.29682]
迭代次数为:5,迭代值为:[1.099128 1.199129 1.299058]
迭代次数为:6,迭代值为:[1.0997245 1.1997244 1.2996514]
迭代次数为:7,迭代值为:[1.09990272 1.19990273 1.29988978]
迭代次数为:8,迭代值为:[1.09996823 1.19996823 1.29996109]
迭代次数为:9,迭代值为:[1.09998904 1.19998904 1.29998729]
迭代次数为:10,迭代值为:[1.09999636 1.19999636 1.29999562]
迭代次数为:11,迭代值为:[1.09999876 1.19999876 1.29999854]

Process finished with exit code 0

4、代码(成百上千阶方法):

import numpy as np

#雅可比迭代法
def Jacobi(n,A,B,x0,x,eps,k):
times = 0 #迭代次数
while times<k:
for i in range(n):
temp = 0
for j in range(n):
if i != j:
temp += x0[j] * A[i][j]
x[i] = ((B[i] - temp) / A[i][i])
error = max(abs(x - x0))
times += 1
if error < eps:
print("精确度等于{0}时,雅可比迭代法需要迭代{1}次收敛".format(eps,times))
return (x, times)
else:
x0 = x.copy()
print("在最大迭代次数内不收敛","最大迭代次数后的结果为:",x)
return None
def main():
n=3
A = np.array([[10.0, -1, -2], [-1, 10, -2], [-1, -1, 5]])
B = np.array([7.2, 8.3, 4.2])
x0 = np.array([1.0, 1, 1])
x = np.array([0.0, 0, 0])
eps=10**(-7)
k=100 #最大迭代次数
Ja=Jacobi(n,A,B,x0,x,eps,k)
print(Ja)


if __name__ =='__main__':
main()
#结果


精确度等于1e-07时,雅可比迭代法需要迭代15次收敛
(array([1.09999998, 1.19999998, 1.29999998]), 15)