基于MATLAB的求解线性方程组(附完整代码和例题) | 您所在的位置:网站首页 › 利用平方根解方程 › 基于MATLAB的求解线性方程组(附完整代码和例题) |
目录 前言 一. 直接求解:矩阵除法 例题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中,可以直接利用“\”或者“/”来解决问题。这两种方法的内部包含非常多的自适应算法,比如对超定方程使用最小二乘法;对欠定方程给出误差范数最小的一个解;对三对角阵方程组使用追赶法。 一. 直接求解:矩阵除法对线性方程求解,MATLAB调用格式如下: x=A\B调用此函数时,矩阵A、B必须具有相同的行数。如果矩阵A没有正确缩放或者接近奇异矩阵,运行代码时,MATLAB就会显示警告信息。 对矩阵A可以分成如下三种情况: 如果A是标量,那么A\B就等同于A.\B如果A是方阵,B是n行矩阵,那么A\B就是方程A*X=B的解如果A是矩阵,而且,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 例题2A为4阶的幻方矩阵,求解线性方程组Ax=b。b的表达式如下: 备注:幻方矩阵的定义:如果一个数组具有相同行列且每行,每列和对角线上的和都一样,则成这些数组则成为魔方矩阵,又叫幻方矩阵。 解: 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矩阵如下: , 解: 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如下: 线性方程组有解的判断定理将分成三种情况: 2.1 m=n且rank(A)=rank(C)=n此时,方程组有唯一的解 例题4 求解如下方程组: 解: 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 实验室设备网 版权所有 |