雅可比迭代求线性方程组
概念原理
matlab实现
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
nargin函数
代码中用到的nargin函数是matlab中可以返回输入变量个数的函数。nargin通过调用当前正在执行的函数返回输入参数的数量,只在函数体内使用nargin语法功能。nargin(fx)在函数fx的定义声明中返回输入参数的个数。如果函数包括varargin其定义,那么nargin返回的输入个数为负。例如函数foo输入有 a,b,和varargin三个参数,那么nargin('foo”)返回值为-3。
例一
有如下M文件:
function c = test(a,b)
switch nargin
case 2
c = a + b;
case 1
c = a + a;
otherwise
c = 0;
end
end
实现结果为:
根据M文件我们可以很清楚的知道函数需要输入两个变量,我们利用nargin函数所获取的变量个数也相符。