求解matlab程序
发布网友
发布时间:2022-05-25 17:13
我来回答
共1个回答
热心网友
时间:2023-11-23 23:54
function [x, k, index]=Jacobi(A, b, ep, it_max)
% 求解线性方程组的Jacobi迭代法,其中
% A --- 方程组的系数矩阵
% b --- 方程组的右端项
% ep --- 精度要求。省缺为1e-5
% it_max --- 最大迭代次数,省缺为100
% x --- 方程组的解
% k --- 迭代次数
% index --- index=1表示迭代收敛到指定要求;
% index=0表示迭代失败
if nargin <4 it_max=100; end %输入参数少于4时,默认最大迭代次数为100
if nargin <3 ep=1e-5; end %输入参数少于3时,默认精度要求为1e-5
n=length(A); %矢量或矩阵A的列长度,即方程的个数
k=0; %初值为0
x=zeros(n,1); y=zeros(n,1); index=1;%初值设置
while 1 %while-end 循环开始
for i=1:n %i循环次数
y(i)=b(i); %给y赋值
for j=1:n %j循环次数
if j~=i %条件判断,j≠i时,
y(i)=y(i)-A(i,j)*x(j); %y(i)的值修改
end
end
if abs(A(i,i))<1e-10 || k==it_max %A的主对角线元素的绝对值小于1e-10或k=最大迭代次数时,
index=0; return; %表明迭代失败
end
y(i)=y(i)/A(i,i); %判断,j=i时,y(i)的值修改
end
if norm(y-x,inf)<ep %判断,y-x的无穷范数小于精度要求,
break; %返回下一步,继续计算
end
x=y; k=k+1; %x得到y值,计算总迭代次数k
end %while-end 循环结束