赞
踩
(一)目的
通过设计、编制、调试2~3个求n阶线性方程组数值解的程序,加深对其数值计算方法及有关的基础理论知识的理解。
(二)要求
用编程语言实现用高斯(Gauss)消元法求n阶线性方程组的解、用列主元高斯(Gauss)消元法求n阶线性方程组的解、用库郎(Courant)列主直接分解法求n阶线性方程组的解的程序。
二、示例
1、问题
用高斯(Gauss)消元法求n阶线性方程组的解。
2、算法描述
(略)
3、程序中变量说明
(略)
4、源程序清单及运行结果
(略)
5、按以上4点要求编写上机实验报告。
Jacobi迭代法基本原理:
python实现:
- import numpy as np
-
- def Jacobi(a,b,k):#k迭代次数
- m,n=a.shape
- if(m!=n):
- print("NO answer")
- times=0
- X=np.zeros(n)#初次迭代X[0,0,0]
- x=np.zeros(n)#迭代后更新x
- while times<k:
- for i in range(n):
- sum=0
- for j in range(n):
- if(i!=j):
- sum=sum+a[i][j]*X[j]
- x[i]=(b[i]-sum)/a[i][i]
- print(X)
- times=times+1
- X=x.copy() #迭代X
- a=np.array([[2.0,-1.0,0.0],[-1.0,3.0,-1.0],[0.0,-1.0,2.0]])
- b = np.array([1.0,8.0,-5.0])
- Jacobi(a,b,20)
- #[2.0,3.0,-1.0](结果)
-
-
结果如下:
Jacobi迭代法输出结果:
E:\shuzhifenxishiyan\Jacobi\venv\Scripts\python.exe E:/shuzhifenxishiyan/Jacobi/main.py
[0. 0. 0.]
[ 0.5 2.66666667 -2.5 ]
[ 1.83333333 2. -1.16666667]
[ 1.5 2.88888889 -1.5 ]
[ 1.94444444 2.66666667 -1.05555556]
[ 1.83333333 2.96296296 -1.16666667]
[ 1.98148148 2.88888889 -1.01851852]
[ 1.94444444 2.98765432 -1.05555556]
[ 1.99382716 2.96296296 -1.00617284]
[ 1.98148148 2.99588477 -1.01851852]
[ 1.99794239 2.98765432 -1.00205761]
[ 1.99382716 2.99862826 -1.00617284]
[ 1.99931413 2.99588477 -1.00068587]
[ 1.99794239 2.99954275 -1.00205761]
[ 1.99977138 2.99862826 -1.00022862]
[ 1.99931413 2.99984758 -1.00068587]
[ 1.99992379 2.99954275 -1.00007621]
[ 1.99977138 2.99994919 -1.00022862]
[ 1.9999746 2.99984758 -1.0000254 ]
[ 1.99992379 2.99998306 -1.00007621]
Process finished with exit code 0
迭代20次后结果非常接近精确解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。