欢迎光临散文网 会员登陆 & 注册

消元法解线性方程组-北太天元学习14

2023-07-23 16:32 作者:卢朓  | 我要投稿

用矩阵来求解线性方程组--北太天元学习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;



消元法解线性方程组-北太天元学习14的评论 (共 条)

分享到微博请遵守国家法律