基于MATLAB的求解线性方程组(附完整代码和例题) 您所在的位置:网站首页 六元一次方程怎么解 基于MATLAB的求解线性方程组(附完整代码和例题)

基于MATLAB的求解线性方程组(附完整代码和例题)

2023-09-19 16:47| 来源: 网络整理| 查看: 265

目录

前言

一. 直接求解:矩阵除法

例题1

 例题2

例题3

二. 直接求解:判断求解

2.1 m=n且rank(A)=rank(C)=n

2.2 rank(A)=rank(C)=r

例题5

2.3 

三. 矩阵求逆解线性方程组

例题 6

前言

线性方程组的直接解法方法很多,包括Gauss消去法、选主元消去法、平方根法和追赶法等等。但是在MATLAB中,可以直接利用“\”或者“/”来解决问题。这两种方法的内部包含非常多的自适应算法,比如对超定方程使用最小二乘法;对欠定方程给出误差范数最小的一个解;对三对角阵方程组使用追赶法。

一. 直接求解:矩阵除法

对线性方程A*X=B求解,MATLAB调用格式如下:

x=A\B

调用此函数时,矩阵A、B必须具有相同的行数。如果矩阵A没有正确缩放或者接近奇异矩阵,运行代码时,MATLAB就会显示警告信息。

对矩阵A可以分成如下三种情况:

如果A是标量,那么A\B就等同于A.\B如果A是n\times n方阵,B是n行矩阵,那么A\B就是方程A*X=B的解如果A是m\times n矩阵,而且m\neq n,B是m行矩阵,那么A\B返回方程组A*X=B的最小二乘解 例题1

解如下方程:

解:

MATLAB代码如下:

clc;clear; A=[0.4096 0.1234 0.3678 0.2943;0.2246 0.3872 0.4015 0.1129; 0.3645 0.1920 0.3781 0.0643;0.1784 0.4002 0.2786 0.3927]; b=[0.4043;0.1150;0.4240;-0.2557]; x=A\b; x' %将结果输出为行向量

 运行结果: ans =

   0.332683779325239  -1.412140862756104   1.602847655449206  -0.500293786006566

 例题2

A为4阶的幻方矩阵,求解线性方程组Ax=b。b的表达式如下:

b=\begin{bmatrix}34\\34\\34\\34 \end{}

备注:幻方矩阵的定义:如果一个数组具有相同行列且每行,每列和对角线上的和都一样,则成这些数组则成为魔方矩阵,又叫幻方矩阵。

解:

MATLAB代码如下:

clc;clear; A=magic(4); %生成四阶的幻方矩阵 b=[34;34;34;34]; x=A\b; x'

运行结果:

ans =

   0.980392156862745   0.941176470588235   1.058823529411765   1.019607843137255分析:

4阶的幻方矩阵是奇异矩阵,奇异矩阵也能求解,但是MATLAB会生成警告,警告信息如下:

警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND =  4.625929e-18。 

例题3

对线性方程组Ax=b进行求解,并分析是否有误差。A,b矩阵如下:

A=\begin{bmatrix}1&2&0\\0&4&3 \end{}b=\begin{bmatrix}8\\18 \end{}

解:

MATLAB代码如下:

clc;clear; A=[1 2 0;0 4 3]; b=[8;18]; x=A\b E=norm(b-A*x) %求范数误差

运行结果:

x =

                   0    3.999999999999997    0.666666666666670

E =

     7.160723346098895e-15

分析:此方程属于欠定方程,MATLAB采用最小二乘法进行求解,所以会出现误差

另外最后举一个利用稀疏矩阵对简单线性方程组Ax=B进行求解。

MATLAB代码:

clc;clear; A=sparse([0 2 0 1 0;4 -1 -1 0 0;0 0 0 3 -6;-2 0 0 0 2;0 0 4 2 0]);%稀疏矩阵 B=sparse([8;-1;-18;8;20]); %稀疏矩阵 x=A\B E1=norm(B-A*x) %范数误差

运行结果:

x =

   (1,1)      1.000000000000000    (2,1)      2.000000000000000    (3,1)      3.000000000000000    (4,1)      4.000000000000001    (5,1)      5.000000000000001

E1 =

     4.189529226675416e-15

二. 直接求解:判断求解

给定矩阵A,B如下:

形成解的判定矩阵C如下:

C=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}&b_{11}&b_{12}&\cdots&b_{1p}\\ a_{21}&a_{22}&\cdots&a_{2n}&b_{21}&b_{22}&\cdots&b_{2p}\\ \vdots&\vdots&\ddots&\vdots&\vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mn}&b_{m1}&b_{m2}&\cdots&b_{mp} \end{}

线性方程组有解的判断定理将分成三种情况:

2.1 m=n且rank(A)=rank(C)=n

此时,方程组有唯一的解 x=A^{-1}B

例题4

求解如下方程组:

\begin{bmatrix}1&2&3&4\\ 4&3&2&1\\ 1&3&2&4\\ 4&1&3&2 \end{}X=\begin{bmatrix}5&1\\4&2\\3&3\\2&4 \end{}

解:

MATLAB代码如下:

clc;clear; A=[1 2 3 4;4 3 2 1;1 3 2 4;4 1 3 2]; B=[5 1;4 2;3 3;2 4]; C=[A B]; %判定前提条件 rank_A=rank(A) rank_C=rank(C) %求解 x1=inv(A)*B %计算范数误差 E1=norm(A*x1-B) %计算精确解 x2=inv(sym(A))*B %计算范数误差 E2=norm(A*x2-B)

运行结果:

rank_A =4 rank_C = 4

x1 =

  -1.800000000000000   2.399999999999999    1.866666666666666  -1.266666666666667    3.866666666666667  -3.266666666666667   -2.133333333333333   2.733333333333333

E1 =7.291088482824584e-15

  x2 = [   -9/5,   12/5] [  28/15, -19/15] [  58/15, -49/15] [ -32/15,  41/15]   E2 =0

2.2 rank(A)=rank(C)=r


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有