可设定计算中的保留小数位
输入方式:
3X(1)+2X(2)=4
2X(1)+5X(2)=8
则输入矩阵
[3,2,4;2,5,8]
clear all
input=[1,3,4,3;
4,1,3,1;
4,4,6,11];%输入矩阵
oringinData=input;
%input输入矩阵,包括系数和参数,最后一列是等号另一边
%oringinData保留的初始矩阵
%output 输出答案,对应X的各个值
%xnum,ynum 输入矩阵的尺寸
%Lneed 消元中,主式需要乘的变量
%keepnum 保留小数位数
%contrastFrom(各个多项式的误差)
error1='the condition are not meet for using this algorithm'
%format short%设置精度 short为精确到小数点后3位 数值型 roundn(A,3)保留3位小数
keepnum=-3;%设置保留n位小数,记得加负号表示小数位
[ynum,xnum]=size(input);%获取输入矩阵大小
if ynum==xnum-1; %满足高斯消去法的要求
for i=1:ynum-1
for j=i+1:ynum
if input(i,i)==0
disp(error1);
break
end
Lneed(j,i)=input(j,i)/input(i,i);
Lneed(j,i)=roundn(Lneed(j,i),keepnum);%四舍五入,下同
end%做完系数的工作
for j=i+1:ynum
input(j,:)=input(j,:)-input(i,:).*Lneed(j,i);
end%消元
end
%回代
for i=1:ynum
output(ynum+1-i,1)=roundn(input(ynum+1-i,xnum),keepnum)/roundn(input(ynum+1-i,xnum-i),keepnum);%output为输出结果
output(ynum+1-i,1)=roundn(output(ynum+1-i,1),keepnum)%这里计算出结果
for j=i+1:ynum
%回代结果到多项式中,将其他值消除
input(ynum+1-j,xnum)=roundn(input(ynum+1-j,xnum),keepnum)-roundn(input(ynum+1-j,xnum-i),keepnum)*output(ynum+1-i,1);
input(ynum+1-j,xnum)=roundn(input(ynum+1-j,xnum),keepnum);
input(ynum+1-j,xnum-i)=0;
end
end
%验算
contrast=0;
for i=1:ynum
for j=1:ynum
contrast=contrast+oringinData(i,j)*output(j,1);
end
contrast=oringinData(i,end)-contrast;
contrastForm(i,1)=contrast;
contrast=0;
end
else
disp(error1);
end