1. 程式人生 > >基於matlab的jacobi(雅可比)迭代法求解線性方程組

基於matlab的jacobi(雅可比)迭代法求解線性方程組

說明推導見此部落格:https://blog.csdn.net/zengxyuyu/article/details/53054880

原始碼見下面:

main.m

clear
clc
A = [8 -3 2;4 11 -1;6 3 12];
b = [20;33;36];
[x, n] = jacobi(A,b,[0,0,0]',1.0e-7,30)

jacobi.m 

function [x,n] = jacobi(A,b,x0,eps,it_max)
%  求線性方程組的Jacobi迭代法,呼叫格式為

%  [x, k] = jacobi(A,b,x0,eps,it_max)

%  其中, A 為線性方程組的係數矩陣,b 為常數項,eps 為精度要求,預設為1e-6,

%  it_max 為最大迭代次數,預設為200

%  x 為線性方程組的解,k迭代次數
if nargin ==3
    eps = 1.0e-6;
    M = 200;
elseif nargin<3
    disp('輸入引數數目不足3個');
    return
elseif nargin ==5
    M = it_max;
end
D = diag(diag(A));%求A的對角矩陣
L = -tril(A,-1);%求A的下三角矩陣
U = -triu(A,1);%求A的上三角矩陣
B = D\(L+U);
f = D\b;
x = B*x0+f;
n = 1;%迭代次數
while norm(x-x0)>=eps
    x0 = x;
    x = B*x0+f
    n = n+1;
    if(n>=M)
        disp('Warning:迭代次數太多,可能不收斂!')
        return;
    end
end