实验目的及要求: 1、了解各迭代法的基本原理和特点; 2、判断雅克比迭代、高斯-塞德尔迭代对任意初始向量的收敛性; 3、完成雅克比迭代、高斯-塞德尔迭代算法的程序实现。 | ||||||||||||
实验内容: 1、编写雅可比迭代法与高斯-赛德尔迭代法通用子程序,求解下列线性方程组
| ||||||||||||
实验步骤与程序: Jacobi迭代法理论: Jacobi迭代法流程图:
Jacobi迭代法的MATLAB主程序 被调用的Jacobi.m文件 function [x,k,index]=Jacobi(A,b,ep,N) n=length(A);k=1;index=1; x=zeros(n,1);y=zeros(n,1); while k<N for i=1:n y(i)=b(i); for j=1:n if j~=i y(i)=y(i)-A(i,j)*x(j); end end if abs(A(i,i))<1e-10 || k==N index=0; return end y(i)=y(i)/A(i,i); end if norm(y-x,inf)<ep break end k=k+1; x=y; end 运行的Jacobi_1.m文件 A=[9,-1,-1;-1,8,0;-1,0,9]; b=[7;7;8]; ep=1e-4; N=100; [x,k,index]=Jacobi(A,b,ep,N) G-S迭代法理论:
G-S迭代法的流程图: G-S迭代法的MATLAB主程序 被调用的Gao_Si_sai_de_er.m文件 function [x,k,index]= Gao_Si_sai_de_er(A,b,ep,N) n=length(A);k=1; x=zeros(n,1);y=zeros(n,1);index=1; while k<N y=x; for i=1:n z=b(i); for j=1:n if j~=i z=z-A(i,j)*x(j); end end if abs(A(i,i))<1e-10 || k==N index=0; return end z=z/A(i,i); x(i)=z; end if norm(y-x,inf)<ep break end k=k+1; end 运行的Gao_Si_sai_de_er_1.m文件
A=[9,-1,-1;-1,8,0;-1,0,9]; b=[7;7;8]; ep=1e-4; N=100; [x,k,index]=Gao_Si_sai_de_er(A,b,ep,N) | ||||||||||||
运行结果:
| ||||||||||||
结果分析与讨论:文章来源:https://www.toymoban.com/news/detail-763262.html
雅克比迭代和高斯-赛德尔迭代都是迭代法求解线性方程组的算法,它们的基本思想都是通过迭代来逼近方程组的精确解。具体来说,两种算法都是将系数矩阵分解为三个部分,并针对每个未知数分别解出一个迭代更新公式。文章来源地址https://www.toymoban.com/news/detail-763262.html
|
到了这里,关于数学建模算法(基于matlab和python)之 线性方程组的迭代法(雅可比迭代、高斯-赛德尔迭代)(7/10)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!