赞
踩
说明推导见此博客: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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。