Jacobi迭代法 Gauss-Seidel迭代法

按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)

function [x, k, index]=Jacobi(A, b, ep, it_max)

% 求解线性方程组的Jacobi迭代法,其中

%   A --- 方程组的系数矩阵

%   b --- 方程组的右端项

%   ep --- 精度要求。省缺为1e-5

%   it_max --- 最大迭代次数,省缺为100

%   x --- 方程组的解

%   k --- 迭代次数

%   index --- index=1表示迭代收敛到指定要求;

%               index=0表示迭代失败

if nargin <4 it_max=100; end

if nargin <3 ep=1e-5; end

n=length(A); k=0;

x=zeros(n,1); y=zeros(n,1); index=1;

while 1

    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==it_max

            index=0; return;

        end

        y(i)=y(i)/A(i,i);

    end

    if norm(y-x,inf)<ep

        break;

    end

    x=y; k=k+1;

end

用Jacobi迭代法求方程组

的解。

输入:

A=[4 3 0;3 3 -1;0 -1 4];

b=[24;30;-24];

[x, k, index]=Jacobi(A, b, 1e-5, 100)

输出:

x =

   -2.9998

   11.9987

   -3.0001

k =

   100

index =

     0

2. 熟悉迭代法,并编写程序

function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp)

%Gauss-Seidel迭代法求解线性方程组

%A-系数矩阵 b-右端向量 x0-初始迭代点 errorBound-近似精度 maxSp-最大迭代次数

%v-近似解 sN-迭代次数 vChain-迭代过程的所有值

step=0;

error=inf;

s=size(A);

D=zeros(s(1));

vChain=zeros(15,3);%最多能记录15次迭代次数

k=1;

fx0=x0;

for i=1:s(1)

    D(i,i)=A(i,i);

end;

L=-tril(A,-1);

U=-triu(A,1);

while error>=errorBound & step<maxSp

x0=inv(D)*(L+U)*x0+inv(D)*b;

vChain(k,:)=x0';

k=k+1;

    error=norm(x0-fx0);

    fx0=x0;

    step=step+1;

end

v=x0;

sN=step;   

用Gauss-Seidel迭代法求解上题的线性方程组,取 。

输入:

A=[4 3 0;3 3 -1;0 -1 4];

b=[24;30;-24];

x0=[0;0;0];

[v,sN,vChain]=gaussSeidel(A,b,x0,0.00001,11)

输出:

v =

    0.6169

   11.1962

   -4.2056

sN =

    11

vChain =

    6.0000   10.0000   -6.0000

   -1.5000    2.0000   -3.5000

    4.5000   10.3333   -5.5000

   -1.7500    3.6667   -3.4167

    3.2500   10.6111   -5.0833

   -1.9583    5.0556   -3.3472

    2.2083   10.8426   -4.7361

   -2.1319    6.2130   -3.2894

    1.3403   11.0355   -4.4468

   -2.2766    7.1775   -3.2411

    0.6169   11.1962   -4.2056

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值