相容方程组
相容方程组:
1调用
数solve来求解代数方程或代数方程组。其调用格式为: ,变量1,变量2,„„,变量M,,solve(‘方程,’,‘方程2’,„„‘方程N’)其中方程为以符号表达式表示的代数方程,如果是N个方程组成的方程组,则将所有的 N个方程全部供稿以求得方程组的解,即满足方程组的M个变量的值。
2通过矩阵除法来求解。n元线性方程组bAx
nBRARA是nbAinvx 除法求解:bAx\都可得到解向量x,但使用矩阵除法求解的精度与运算埋单都优于用逆阵方法求解,两种方法的比较将会后面的论述中给出;若A不是n阶方阵,,则用A的广义逆矩阵求解,MATLAB中,AApinvbApinvxx。?利用MATLAB提供的化矩阵为行阶梯形形式求解线性方程组。其函数为rref,调用格式为rref(矩阵)。将构成方程组的系数矩阵作为参数,可以求得其行阶梯形式。 矛盾方程组:
用最小二乘法求解,其实最小二乘法求解问题可以化为求解一个相容方程组的问题。对于方程的最小二乘解可以用除法运算求解,或用广义逆来求解,求出解x后,需要计
矩阵是一个二维数组,MATLAB数组无需预先定义维数,直接输入数组的元素,用中括号“[ ]”表示,一个数组,同行元素间用空格或逗号分隔,不同行间用分号或回车分隔。如
在MATLAB中采用命令pinv就可以求解矩阵的广义逆,并且得到的矩阵的广义逆
T,,,,AA,AA矩阵满足。
1调用函数solve求解线性方程组
当方程Ax=b
这两种情况都可用调用函数解出。下面通过一些例子来说明:
1 利用矩阵除法求线性方程组的特解(或一个解)
方程:AX=b,解法:X=A\b,(注意此处’\’不是’/’)
例 1-1 求方程组 的解。
方程组的非负最小二乘解
在某些条件下,所求的线性方程组的解出现负数是没有意义的。虽然方程组可以得到精确解,但却不能取负值解。在这种情况下,其非负最小二乘解比方程的精确解更有意义。在MATLAB中,求非负最小二乘解常用函数nnls,其调用格式为:
(1)X=nnls(A,b)返回方程Ax=b的最小二乘解,方程的求解过程被限制在x 的条件下;
(2)X=nnls(A,b,TOL)指定误差TOL来求解,TOL的默认值为TOL=max(size(A))*norm(A,1)*eps,矩阵的,1范数越大,求解的误差越大; (3)[X,W]=nnls(A,b) 当x(i)=0时,w(i)<0;当下x(i)>0时,w(i)0,同时返回一个双向量w。
【例9】求方程组的非负最小二乘解
A=[3.4336 -0.5238 0.6710
-0.5238 3.2833 -0.7302
0.6710 -0.7302 4.0261];
b=[-1.000 1.5000 2.5000];
[X,W]=nnls(A,b)
X=
0
0.6563
0.6998
W=
-3.6820
-0.0000
-0.0000
x1=A\b
x1=
-0.3569
0.5744
0.7846
A*X-b
ans=
1.1258 0.1437 -0.1616 A*x1-b ans=
1.0e-0.15
-0.2220 0.4441 0
x5x1
x5x6x0
x5x6x0
x5x6x0
5x6x1
45
345
234
123
12
解: A = ; = ;b=(1,0,0,0,1)’
0,0,0,1,5
0,0,1,5,6
0,1,5,6,0
1,5,6,0,0
5,6,0,0,0
A
0,0,0,1,5,1
0,0,1,5,6,0
0,1,5,6,0,0
1,5,6,0,0,0
5,6,0,0,0,1
由于>>rank(A)=5,rank( )=5 %求秩,此为 R(A)=R( )>=n 的情形,
A
A有 唯 一 解 。 >>X= A\b % 求 解 X =(2.2662, -1.7218,
1.0571,-0.5940, 0.3188)’ 或用函数 rref 求解,>>sv=rref(A:b);所得
sv 的最后一列即为所要求的解。
%M函数zero1.m
syms x1 x2 x3 x4
eq1=sym('x1-2*x2+3*x3-4*x4=4') eq2=sym('x2-x3+x4=-3')
eq3=sym('x1+3*x2+x4=1')
eq4=sym('-7*x2+3*x3+x4=-3') [x1 x2 x3 x4]=solve(eq1,eq2,eq3,eq4)
在MATLAB指令窗口执行相应指令,并得出运行结果如下:
>> zero1
eq1 =
x1-2*x2+3*x3-4*x4=4
eq2 =
x2-x3+x4=-3
eq3 =
x1+3*x2+x4=1
eq4 =
-7*x2+3*x3+x4=-3
x1 =
-8
x2 =
3
x3 =
6
x4 =
0
即得原方程组的解为:0,6,3,84321
,M函数zero2.m
syms x1 x2 x3 x4 x5
eq1=sym('x1+3*x2+5*x3-4*x4=1') eq2=sym('x1+3*x2+2*x3-2*x4+x5=-1') eq3=sym('x1-2*x2+x3-x4-x5=3') eq4=sym('x1-4*x2+x3
+x4-x5=3') eq5=sym('x1+2*x2+x3-x4+x5=-1')
[x1 x2 x3 x4 x5]=solve(eq1,eq2,eq3,eq4,eq5)
在MATLAB指令窗口执行相应指令,并得出运行结果如下: >> zero2 eq1 =
x1+3*x2+5*x3-4*x4=1 eq2 = x1+3*x2+2*x3-2*x4+x5=-1 eq3 = x1-2*x2+x3-x4-x5=3
eq4 =
x1-4*x2+x3+x4-x5=3 eq5 = x1+2*x2+x3-x4+x5=-1 x1 = 1+x4 x2 = x4 x3 = 0 x4 = x4 x5 = -2-2*x4