计算物理学(数值分析)上机实验答案8、解线性方程组的迭代法

该博客主要介绍了计算物理学中解线性方程组的迭代法,包括雅可比迭代、高斯-塞德尔迭代以及超松弛迭代法。通过MATLAB程序实例,解释了不同迭代法的使用、收敛性及速度,并给出了实验任务,以帮助读者熟悉这些方法。
摘要由CSDN通过智能技术生成

实验八、解线性方程组的迭代法

​ 解线性方程组的迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,即是从一个初始向量 x(0) 出发,按照一定的迭代格式产生一个向量序列{ x (k ) },使其收敛到方程组 Ax = b 的解。迭代法的优点是所需计算机存储单元少,程序设计简单,原始系数矩阵在计算过程中始终不变等。但迭代法存在收敛性及收敛速度问题。迭代法是解大型稀疏矩阵方程组的重要方法。

一、实验目的

1、熟悉迭代法的有关理论和方法;

2、会编制雅可比迭代法、高斯-塞德尔迭代法的程序;

3、注意所用方法的收敛性及其收敛速度问题。

二、算法实例

1.用雅可比迭代解线性方程组 AX = b 的 MATLAB 主程序

function X=jacdd(A,b,X0,P,wucha,max1)
[n,m]=size(A);
for j=1:m
    a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j)));
end
for i=1:n
    if a(i)>=0
        disp('请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛')
        continue
    end
end
if a(i)<0
    disp('请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 ')
end
for k=1:max1
    k
    for j=1:m
        X(j)=(b(j)-A(j,[1:j-1,j+1:m])*X0([1: j-1,j+1:m]))/A(j,j);
    end
    X,djwcX=norm(X'-X0,P); xdwcX=djwcX/(norm(X',P)+eps); X0=X';X1=A\b;
    if (djwcX<wucha)&&(xdwcX<wucha)
        disp('请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:')
        break
    end
end
if (djwcX>wucha)&&(xdwcX>wucha)
    disp('请注意:雅可比迭代次数已经超过最大迭代次数max1 ')
end
a,jX=X1'

2.用高斯-塞德尔迭代定义解线性方程组 AX = b 的 MATLAB 主程序 1

function X=gsdddy(A,b,X0,P,wucha,max1)
D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);
dD=det(D);
if dD==0
 disp('请注意:因为对角矩阵D奇异,所以此方程组无解.')
   else
 disp('请注意:因为对角矩阵D非奇异,所以此方程组有解.')
    iD=inv(D-L); B2=iD*U;f2=iD*b;jX=A\b; X=X0;
   %     [n,m]=size(A);
 for k=1:max1
        X1= B2*X+f2; djwcX=norm(X1-X,P);
        xdwcX=djwcX/(norm(X,P)+eps);
        if ~(djwcX<wucha)||(xdwcX<wucha)
            k;X1';k=k+1;X=X1;
        end
    end
    if (djwcX<wucha)||(xdwcX<wucha)
        disp('请注意:高斯-塞德尔迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下: ')
    else
        disp('请注意:高斯-塞德尔迭代的结果没有达到给定的精度,并且迭代次数已经超过最大迭代次数max1,方程组的精确解jX和迭代向量X如下: ')
        X=X';jX=jX';
    end
   end
X=X';D,U,L,jX=jX'
end
例 8.1

​ 用高斯-塞德尔迭代定义的MATLAB主程序解下列线性方程组,取初始值 ( x 1 ( 0 ) , x 2 ( 0 ) , x 3 ( 0 ) ) = ( 0 , 0 , 0 ) ( x _ { 1 } ^ { ( 0 ) } , x _ { 2 } ^ { ( 0 ) } , x _ { 3 } ^ { ( 0 ) } ) = ( 0,0,0 ) (x1(0),x2(0),x3(0))=(0,0,0)要求当 ∥ x ( k + 1 ) − x ( k ) ∥ ∞ < 1 0 − 3 \| x ^ { ( k + 1 ) } - x ^ { ( k ) } \| _ { \infty } < 10 ^ { - 3 } x(k+1)x(k)<103时,迭代终止。
 (1)  { 10 x 1 − x 2 − 2 x 3 = 7.2 , − x 1 + 10 x 2 − 2 x 3 = 8.3 − x 1 − x 2 + 0.5 x 3 = 4.2  (2)  { 3 x 1 + 4 x 2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值