1. 程式人生 > >Jacobi迭代法 Gauss-Seidel迭代法

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