我是靠谱客的博主 自觉芝麻,最近开发中收集的这篇文章主要介绍用Matlab写脚本求解线性方程组,让大家拥有一个线性方程组计算器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用Matlab写脚本求解线性方程组,让大家拥有一个线性方程组计算器

有句话说的好:一个合格的程序员,不会写出“摧毁地球”的方法。他会写一个方法叫“摧毁行星”,然后把地球作为参数传进去。

所以我们来求解线性方程组也不能L仅仅满足把它求出来就行了,我们还要让用户即使不会编程也能轻松利用我们的程序求解线性方程组。

比如这样:
在这里插入图片描述

在这里插入图片描述

下面我们来详细看看怎么实现吧!

齐次线性方程组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传PD9vK(img-anmXWBOG-1637468700828)(D:Typoraimagesimage-20211121121425499.png)(D:Typoraimagesimage-20211121121425499.png)]

接下来就看看我们的代码吧~

% 把系数矩阵给写了
A=[1 1 -1 -1;
   2 2  0  1;
   1 1  1  2]
% A=[1,1;2,3;3,4]
% A=[1 2 1 -1;3 6 -1 -3]
% 把系数矩阵的秩求出来
Rank_A=rank(A)
[m,n]=size(A)
if(Rank_A<n)
%   秩小于未知量的个数,方程组有无穷解
%   计算基础解系
   disp("方程组的基础解系为:")
   z=null(A,'r')
elseif(Rank_A==n)
    disp("方程组只有零解")
    z=repmat(0,n,1)
end

这是结果,还是很直观的呢[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFvsPEKj-1637468700834)(D:Typoraimagesimage-20211121121821529.png)]

非齐次线性方程组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3J7KcBv-1637468700838)(D:Typoraimagesimage-20211121121618840.png)]

看看我们的代码吧

% 系数矩阵和增广矩阵
A=[1  2  3;
   2 -1 -1;
   1 -2 -2]
b=[2;1;-1];
Ab=[A,b]
[m,n]=size(A)
Rank_A=rank(A)
Rank_Ab=rank(Ab)
if(Rank_A==Rank_Ab)
    if(Rank_A==n)
        disp("方程组有唯一解")
        x=Ab
    elseif(Rank_A<n)
        disp("方程组有无穷多解")
%         求基础解系
        disp("基础解系为:")
        z=null(A,'r')
%         求一个特解 
        disp("一个特解为:")
        X=pinv(A)*b
    end
else
    disp("此方程组无解")
end
%演算一下下,如果为0,就是对的
AX_b=A*X-b

这个结果也很直观[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n901G3kb-1637468700842)(D:Typoraimagesimage-20211121121931693.png)]

接下来就要让不会变成的小白也拥有一个求解线性方程组的程序了~

上代码

clear;clc
flag=input("亲想算齐次的还是非齐次的呀( ̄︶ ̄)↗ (齐次扣'1',非齐次扣'2'),请输入:");
if(flag==1)
    A=input("请亲输入系数矩阵:");
    Rank_A=rank(A);
    [m,n]=size(A);
   if(Rank_A<n)
%   秩小于未知量的个数,方程组有无穷解
%   计算基础解系
       disp("方程组的基础解系为:")
       z=null(A,'r')
    elseif(Rank_A==n)
       disp("方程组只有零解")
       z=repmat(0,n,1)
   end
elseif(flag==2)
    A=input("请亲输入系数矩阵:");
    b=input("请亲输入常数项列向量:");
    Ab=[A,b];
    [m,n]=size(A);
    Rank_A=rank(A);
    Rank_Ab=rank(Ab);
    if(Rank_A==Rank_Ab)
        if(Rank_A==n)
            disp("方程组有唯一解")
            x=Ab
        elseif(Rank_A<n)
            disp("方程组有无穷多解")
%             求基础解系
            disp("基础解系为:")
            z=null(A,'r')
%             求一个特解 
            disp("一个特解为:")
            X=pinv(A)*b
        end
    else
        disp("此方程组无解")
    end
else
    disp("亲,你怎么输错了!╰(‵□′)╯")
end

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yyhRBC7X-1637468700845)(D:Typoraimagesimage-20211121122128948.png)]

谢谢大家的观看~

最后

以上就是自觉芝麻为你收集整理的用Matlab写脚本求解线性方程组,让大家拥有一个线性方程组计算器的全部内容,希望文章能够帮你解决用Matlab写脚本求解线性方程组,让大家拥有一个线性方程组计算器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部