基於matlab的jacobi(雅可比)迭代法求解線性方程組
阿新 • • 發佈:2018-11-05
說明推導見此部落格: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