消元法解线性方程组-北太天元学习14
用矩阵来求解线性方程组--北太天元学习14
线性方程组出现在数学建模的几乎所有领域。矩阵为求解和分析这些线性方程组提供了一种结构化的方式。本节我们简单介绍矩阵的定义、性质和在北太天元中如何使用矩阵。
m×n矩阵是一个由m行n列的数字组成的矩形阵列,可以用
a_{1,1} a_{1,2} ... a_{1,n}
a_{2,1} a_{2,2} ... a_{2,n}
...
a_{m,1} a_{m,2} ... a_{m,n}
表示,注意用一个小括号或者中括号括起来,我这里不方便打这个括号。
上面的每个a_{i,j}都是实数,我们就说A是一个实矩阵。
符号a_{i,j}是指矩阵第i行第j列的元素.
例如2×3矩阵A=
1 2 3
4 7 6
回想北太天元学习2,要输入这个矩阵,我们可以使用命令:
A=[1 2 3; 4, 7 6]
其中; 用来隔开行。
命令A(i,j) 返回矩阵的(i,j)元,也就是第i行和第j列的交叉处的元素a_{i,j}.
输入A(1,:) 返回的第1行, 第行,输入A(:,2)返回A的第2列。
矩阵的转置是通过将其行与列交换而获得的新矩阵, 在北太天元中可以用 .' 运算符i
例如上面的2x3矩阵A的转置是
A.'
是一个3x2的矩阵
1 4
2 7
3 6
向量是一个只有一列或一行的矩阵。
行向量w=[2 7 8]可以使用下面的命令输入
>> w=[2 7 8]
要返回行向量的第二个元素,请使用命令w(1,2), 或简单地使用w(2)。
零向量是由所有零组成的向量,
向量的范数可以有多种定义,其中有一个定义和长度相当,
v = [v_1,v_2, ... v_n]
的2-范数用北太天元的内置命令 norm(v,2) 或者 norm(v) 来返回,它的定义为
norm(v,2) = sqrt( |v_1|^2 + ... + |v_n|^2 );
这里的 |v_i| 表示 v_i 的绝对值或者模(针对v_i是实数或者复数的情况).
我们也可以将矩阵乘以一个标量, 例如
A = [ 1 2 3 ;
4 7 6 ];
2*A 返回
[ 2 4 6;
8 10 12 ]
这个运算叫做矩阵的标量乘法。
线性方程组
假设我们要求解以下三元线性方程组:
−3x_1 −x_2 + 2x_3=−3(i)
7x_1 + 4x_2 + 3x_3=−2(ii)
x_1 + x_2 + x_3=−1(iii)
我们初中就学习了可以使用加减消元法求解,实际上这就是我国数学家刘徽大约与公元
263年就提出的方法,后来被称为高斯消去法。
消去法由下面几个操作组成:
1 将一个方程乘以一个非零常数;
2 在一个方程上加上另一个方程的倍数;
3 交换两个方程。
一个方程的系数和一个矩阵的一行对应起来,可以把右端项放在矩阵的最后一列。
这样,消去法的几个步骤就对应了矩阵的几个操作:
1 将矩阵一行乘以一个非零常数;
2 在矩阵的一行加上另一个行的倍数;
3 交换矩阵的两行。
这三个操作称为矩阵的初等行变换。
例如,我们对刚才举的三元线性方程组的系数和右端项组成的矩阵如下
-2 -1 4 -2
7 4 2 -2
1 1 2 -1
这个矩阵称为线性方程组的增广矩阵。
请记住,增广矩阵中的每一行都对应于一个线性方程。
我们可以做三个基本的行变换,矩阵所对应的线性方程组也随之改变,但是它们不会改变
所对应的线性方程组的解:
1.将一行中的所有元素乘以一个非零常数。我们可以这样做,
这相当于我们在一个方程的两边同时乘以一个非零常数,而这个操作不改变这个方程的解的。
2.交换矩阵的两行。两行做了交换,相当于交换了两个方程,而出现的顺序
对线性方程组的解没有任何影响。
3.用矩阵第i行本身和矩阵第j行的倍数之和替换第i行。这个操作对应到方程上相当于,
我们把j个方程两边同时乘以一个常数,然后加到第i个方程上,这样得到线性方程组和原来
的方程组显然是同解的。
我们的目标是使用上面的行变换,直到我们可以轻松地找到线性方程组的解。
我在草稿纸上随手写了一个线性方程组,就以那个为例吧, 我会用截图的方式
给出那个线性方程组:

上面线性方程组对应的增广矩阵是

A= [ 1 3 5 6 ; 7 2 0 4 ; 5 8 6 2 ] ;
B = A; % 备份一下这个矩阵, 下面的行变换就直接在矩阵A上做了,会改变矩阵A
A(2,:) = A(2,:) - A(1,:)*A(2,1)/A(1,1); %A(2,1)化为0
A(3,:) = A(3,:) - A(1,:)*A(3,1)/A(1,1); %A(3,1)化为0
%此时A的第二行和第三行矩阵对应的方程已经不包含未知数x1, 就是消去了x1元.
%
A(3,:) = A(3,:) - A(2,:)*A(3,2)/A(2,2); %A(3,2)化为0
%第三行两边乘以非零常数
A(3,:) = A(3,:) *( 1/A(3,3) ); %A(3,3)化为1
%
A(2,:) = A(2,:) - A(3,:)*A(2,3)/A(3,3);
%第二行两边乘以非零常数
A(2,:) = A(2,:) *( 1/A(2,2) ); %A(2,2)化为1
A(1,:) = A(1,:) - A(3,:)*A(1,3)/A(3,3);
%
A(1,:) = A(1,:) - A(2,:)*A(1,2)/A(2,2);
我们可以用for 循环来简化上面的脚本
A= [ 1 3 5 6 ; 7 2 0 4 ; 5 8 6 2 ] ;
B = A; % 备份一下这个矩阵, 下面的行变换就直接在矩阵A上做了,会改变矩阵A
n = 3;
for j = 1:n-1
for i = (j+1):n
A(i,:) = A(i,:) - A(j,:)*A(i,j)/A(j,j);
end
end
for j=n:-1:2
A(j,:) = A(j,:) * (1/A(j,j));
for i=j-1:-1:1
A(i,:) = A(i,:) - A(j,:) * (A(i,j)/A(j,j));
end
end
线性方程组还能写成系数矩阵C乘以一个列向量x等于右端项b
的形式:
C x = b
此时很容易让我们学习的一元一次线性方程ax=b的求解类比,
于是,你可能会想到是不是可以在北太天元里用
x = C\b
来求解线性方程组, 这样可以吗? 是可以的,

例如
% A 还是线性方程组的增广矩阵
A= [ 1 3 5 6 ; 7 2 0 4 ; 5 8 6 2 ] ;
% A的前三行和前三列组成的子矩阵是线性方程组的系数矩阵。
C = A(1:3,1:3) ; % 取子矩阵
%右端项
b = A(:,end) ; %取矩阵A 的最后一列
%左除得到线性方程组的解
x = C\b
知识点小结:
消元法
线性方程组 和 矩阵对应
系数矩阵
增广矩阵
初等行变换
北太天元 A(i,j), A(i,:), A(:,j)
Cx = b 通过左除求解 x = C\b;