%雅可比迭代法 Jacobian iterative method~~~
%author(foddcus) FaFu 2022.3
%email:foddcus@163.com
%function Tresult=eliminationM(input);%模块化功能
%input输入矩阵,包括系数和参数
%inputC 用于分解LU矩阵的合成矩阵
%oringinData保留的初始矩阵
%output 输出答案,对应X的各个值
%Toutput:修正顺序后的答案,对应输入数据的X顺序
%jD:雅可比矩阵,后缀表示其中介值
%xnum,ynum 输入矩阵的尺寸
%keepnum 保留小数位数
%contrastFrom(各个多项式的误差)
clear all%启用模块化后需要注释该句
error1='the condition are not meet for using this algorithm' ;
input=[10,-1,2,72;
-1,10,-2,83;
-1,-1,5,42];%输入矩阵
oringinData=input;
keepnum=-10;%设置保留n位小数,记得加负号表示小数位
[ynum,xnum]=size(input);%获取输入矩阵大小
%%
for i=1:ynum%获取初始矩阵
jD_0(i,:)=input(i,:)/input(i,i);
if jD_0(i,i)>0 %判断正负号的关联判断
jD_1(i,1)=-1;
else
jD_1(i,1)=1;
end
if jD_0(i,i)==0
disp(erro1);
end
jD_2(i,:)=roundn(jD_0(i,:)*jD_1(i,1),keepnum);
end
num=1;
for i=1:ynum
for j=1:ynum
if i~=j
y=ceil(num/(ynum-1));
x=num-((i-1)*(ynum-1));
jD(y,x)=jD_2(i,j);
num=num+1;
else
num=num;
end
end
end
jD(:,ynum)=jD_0(:,xnum);%雅可比矩阵创建完成;
%%
indet=zeros(1,ynum);%设置所有的初始值为0
aimnum=10;
for k=1:aimnum
for i=1:ynum
indet_0=indet(k,:);
indet_0(:,i)=[];
indet(k+1,i)=roundn(sum(sum(jD(i,1:ynum-1).*indet_0))+jD(i,ynum),keepnum);
end
end
output=indet(aimnum+1,:);
%验算
contrast=0;
for i=1:ynum
for j=1:ynum
contrast=contrast+oringinData(i,j)*output(1,j);
end
contrast=oringinData(i,end)-contrast;
contrastForm(i,1)=contrast;
contrast=0;
end
可设定计算中的保留小数位
输入方式:
例
3X(1)+2X(2)=4
2X(1)+5X(2)=8
则输入矩阵
[3,2,4;2,5,8]