matlab 实现高斯消元法 解多元方程

可设定计算中的保留小数位

输入方式:

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值