雅可比迭代法求解线性方程组的MATLAB实现
2012-07-15 22:50
561 查看
function [X_reality,n_reality] = Jacobi(A,b,X_start,n_limit,tolerance)
%%
% A为迭代的系数矩阵
% b为方程组右边的常数项(列向量)
% X_start为迭代的初始向量
% n_limit为最大允许迭代的次数
% tolerance为精度上限值
%%
% X_reality为最后结果
% n_reality为最后迭代次数
%%
disp('雅克比迭代法求解线性方程组');
[n,n] = size(A); % A的行数和列数均为n
D = diag(diag(A)); % D的对角线元素根A的对角线元素相同,其余为0
B = inv(D) * (D - A); % B为雅克比迭代矩阵,也就是化简后的便于迭代的等价方程组的系数矩阵
f = inv(D) * b; % f为化简后的便于迭代的等价方程组的常数项向量
n_reality = 0;
%%
while 1
if(n_reality > n_limit)
disp('迭代次数超界');
break;
end
X_reality = B * X_start + f; % 雅可比迭代公式
n_reality = n_reality + 1;
if(norm(X_reality - X_start) <= tolerance) % 如果满足条件||X(k+1) - X(k)||的2范数小于等于tolerance
break; % 则退出函数
else
X_start = X_reality; % 循环迭代
end
end
end
%%
%%
% A为迭代的系数矩阵
% b为方程组右边的常数项(列向量)
% X_start为迭代的初始向量
% n_limit为最大允许迭代的次数
% tolerance为精度上限值
%%
% X_reality为最后结果
% n_reality为最后迭代次数
%%
disp('雅克比迭代法求解线性方程组');
[n,n] = size(A); % A的行数和列数均为n
D = diag(diag(A)); % D的对角线元素根A的对角线元素相同,其余为0
B = inv(D) * (D - A); % B为雅克比迭代矩阵,也就是化简后的便于迭代的等价方程组的系数矩阵
f = inv(D) * b; % f为化简后的便于迭代的等价方程组的常数项向量
n_reality = 0;
%%
while 1
if(n_reality > n_limit)
disp('迭代次数超界');
break;
end
X_reality = B * X_start + f; % 雅可比迭代公式
n_reality = n_reality + 1;
if(norm(X_reality - X_start) <= tolerance) % 如果满足条件||X(k+1) - X(k)||的2范数小于等于tolerance
break; % 则退出函数
else
X_start = X_reality; % 循环迭代
end
end
end
%%
相关文章推荐
- 数值计算-线性方程组求解(1)-LU分解-MATLAB实现
- 数值分析 jacobi迭代法求解线性方程组 MATLAB程序实现
- 高斯-赛德尔迭代法求解线性方程组的MATLAB实现
- 数值分析 Gauss-Seidel迭代法求解线性方程组 MATLAB程序实现
- 逐次超松弛迭代法求解线性方程组的MATLAB实现
- 数值计算-线性方程组求解(2)-追赶法解三对角矩阵-MATLAB实现
- 数值分析 追赶法求解三对角线性方程组 MATLAB实现
- Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛)
- 求解线性方程组----Matlab
- 线性方程组求解的几种常用方法-c++代码实现
- matlab实现蒙特卡洛方法求解线性规划问题
- 各种线性方程组求解算法的C++实现
- matlab 求解线性方程组之范数
- 基于matlab的Guass-Seidel(高斯--赛德尔) 迭代法求解线性方程组
- Matlab线性方程组求解
- SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu
- Matlab 编程实现数独的求解(一)
- MATLAB线性方程组的迭代求解法
- 数值计算线性方程组求解实现
- 雅可比迭代法解线性方程组(matlab程序)