实验13向量行列式矩阵与线性方程组实验2.docx
《实验13向量行列式矩阵与线性方程组实验2.docx》由会员分享,可在线阅读,更多相关《实验13向量行列式矩阵与线性方程组实验2.docx(15页珍藏版)》请在冰豆网上搜索。
![实验13向量行列式矩阵与线性方程组实验2.docx](https://file1.bdocx.com/fileroot1/2023-1/24/0de2bdca-e4bd-4c3e-b7d7-803c82e64a51/0de2bdca-e4bd-4c3e-b7d7-803c82e64a511.gif)
实验13向量行列式矩阵与线性方程组实验2
实验13向量行列式矩阵与线性方程组实验
[学习目标]
1.会用Mathematica进行向量的计算;
2.能用Mathematica进行行列式的计算;
3.会利用Mathematica进行矩阵的运算与初等变换;
4.能利用Mathematica解线性方程组。
线性代数的数值计算程序并不稀奇,早有大量的算法和软件。
然而这里是进行准确的符号运算,学习了本节以后,就可以摆脱繁琐的矩阵运算了。
本节介绍用Mathematica实现线性代数运算的各种专用函数,它们基本上满足了线性代数计算的需求。
读者将会看到,以下的一些计算功能是十分出色的。
但从我国的教材来看,还有个别计算功能没有涉及,留有继续开发的余地。
一、矩阵的输入与输出
在Mathematica中向量和矩阵就是一个表。
{a1,a2,…,an}表示一个向量。
{{a11,a12,…,a1n},{a21,a22,…,a2n},…,{am1,am2,…,amn}}表示一个m行n列的矩阵,其中每一个子表表示矩阵的一行。
1.直接输入矩阵
直接输入矩阵的方法有3种,如下所述。
(1)按表的形式输入矩阵
既然矩阵和向量都是表,表的一般操作对于矩阵和向量仍然适用。
但是,按表的格式键入矩阵和向量,会让人很不习惯。
因此,Mathematica也提供了矩阵和向量的常规形式的输入、输出方法。
(2)由模板输入矩阵
基本输入模板中有输入2阶方阵的模板,单击该模板输入一个空白的2阶方阵。
按“Ctrl+”使矩阵增加一列,按“Ctrl+Enter”使矩阵增加一行。
如果矩阵不大,此法较方便。
(3)由菜单输入矩阵
如果输入行、列数较多的矩阵,可以打开主菜单的Input项,其中CreateTable/Matrix/Palette可用于建立一个矩阵,单击该项出现一个的对话框。
选择Make:
Matrix,再输入行数和列数,单击OK按钮,于是一个空白矩阵被输入到工作区窗口。
空白矩阵的每个小方块代表一个元素的位置,光标所在的小方块与众不同,可以用Tab键将光标从一个方块跳到下一个方块,也可以用鼠标选中一个方块。
2.以矩阵形式输出矩阵
不管用何种方法输入矩阵,矩阵总是按表的形式输出。
这既违背常规,又难于阅读。
因此,Mathematica提供了以矩阵形式输出矩阵的函数:
MatrixForm[list]将表list按矩阵的形式输出。
例1观察下面矩阵的输出。
In[1]:
=a={{1,2,3},{4,5,6}}
Out[1]={{1,2,3},{4,5,6}}
In[2]:
=MatrixForm[a]
Out[2]//MatrixForm=
In[3]:
=a={{1,2,3},{4,5,6}}//MatrixForm
Out[3]//MatrixForm=
In[4]:
=
Out[4]={{1,2},{3,4},{5,6}}
In[5]:
=%//MatrixForm
Out[5]//MatrixForm=
说明:
由上例可以看出,不管输入的形式是否为矩阵,必须使用MatrixForm才能使输出为矩阵形式。
这不合习惯且费事,解决的方法是自制一个模板:
//MatrixForm,以便快速输入。
使用函数MatrixForm又会出现另一个问题,可以通过以下例子来说明。
例2观察下面矩阵的输出。
In[1]:
=a=
Out[1]={{1,2},{3,4}}
In[2]:
=b=
//MatrixForm
Out[2]//MatrixForm=
In[3]:
=Inverse[a]//MatrixForm
Out[3]//MatrixForm=
In[4]:
=Inverse[b]//MatrixForm
Out[4]//MatrixForm=
Inverse
说明:
以上In[3]和In[4]是求逆矩阵,Mathematica求出a的逆矩阵,对b却失败!
变量a形式上是表,但能被Mathematica作为矩阵处理。
而变量b虽然表示常规形式的矩阵,但不能对b进行各种矩阵计算,务必注意。
技巧:
使用括号能够改变表达式的含义,解决上述问题。
例3观察下面矩阵的输出
In[1]:
=
//MatrixForm
Out[1]//MatrixForm=
In[2]:
=Inverse[b]//MatrixForm
Out[2]//MatrixForm=
应该特别注意Mathematica不区分行向量与列向量,在运算时会自动处理。
可以通过函数ColumnForm[list]将一个向量显示成列向量。
3.用函数建立矩阵
也可以通过函数建立一些有规律的矩阵,除了在讲表时已经介绍过的函数Table外,还有以下专用函数:
Array[a,{m,n}]创建一个m行、n列的矩阵,元素为a[i,j]。
IdentityMatrix[n]创建一个n阶单位矩阵。
DiagonalMatrix[list]创建一个对角线上为表list的元素的方阵。
例4观察下面矩阵的输出。
In[1]:
=Array[a,{2,3}]//MatrixForm
Out[1]//MatrixForm=
In[2]:
=Array[a,{2,3},{0,0}]//MatrixForm
Out[2]//MatrixForm=
In[3]:
=IdentityMatrix[3]//MatrixForm
Out[3]//MatrixForm=
In[4]:
=DiagonalMatrix[{1,2,3}]//MatrixForm
Out[4]//MatrixForm=
说明:
函数Array加上第三个参数用于规定起始下标,起始下标可以取任何整数。
此外Array可以类似创建有任意层数的表,其调用格式如下:
Array[a,n]创建一个元素为a[i]的有n个元素的表(向量)。
Array[a,{n1,n2,n3}]创建一个元素为a[i1,i2,i3]的有n1×n2×n3个元素的3层表。
例5观察下面矩阵的输出。
In[1]:
=Array[a,5]
Out[1]={a[1],a[2],a[3],a[4],a[5]}
In[2]:
=Array[a,{2,2,2}]
Out[2]={{{a[1,1,1],a[1,1,2]},{a[1,2,1],a[1,2,2]}},
{{a[2,1,1],a[2,1,2]},{a[2,2,1],a[2,2,2]}}}
4.提取矩阵的元素
提取或引用矩阵的元素的方法与函数,都已经在表的操作中介绍过,只要注意矩阵是一个2层表而每行是一个子表。
还有三个矩阵专用的函数,如下所示:
M[[All,j]]提取矩阵M的第j列元素组成一个表。
Tr[M,List]提取矩阵M的主对角线元素组成一个表。
Dimensions[M]求矩阵M的行、列数。
例6观察下面矩阵运算。
In[1]:
=a=
;
b=
;
In[3]:
=b[[All,3]]//MatrixForm
Out[3]//MatrixForm=
In[4]:
=Tr[a,List]
Out[4]={1,4}
In[5]:
=Dimensions[a]
Out[5]={2,2}
In[6]:
=Dimensions[b]
Out[6]={2,3}
二、矩阵、向量的运算
1.加法与数乘
除两个矩阵相加外,还有一个数与矩阵相加,都使用加号。
一个数与矩阵相加就是矩阵的每个元素都加上该数,一个数与矩阵相乘就是矩阵的每个元素都乘上该数。
例7已知A=
,B=
,求
(1)A+B,
(2)2+A,(3)2A。
解:
In[1]:
=a=
;
b=
;
a+b//MatrixForm
Out[3]//MatrixForm=
In[4]:
=2+a//MatrixForm
Out[4]//MatrixForm=
In[5]:
=2a//MatrixForm
Out[5]//MatrixForm=
2.乘法
句号作为两个矩阵相乘或两个向量内积的运算符。
例8已知A=
,B=
,C=(1,2,3),D=(1,-1,1),求
(1)AB,
(2)CD,(3)AD。
解:
In[1]:
=a=
;
b=
;
a.b//MatrixForm
Out[3]//MatrixForm=
In[4]:
=c={1,2,3};
d={1,-1,1};
c.d//MatrixForm
Out[6]//MatrixForm=
2
In[7]:
=a.d//MatrixForm
Out[7]//MatrixForm=
说明:
上例中求a.d时,Mathematica会自动将d理解为列向量。
下面是求两个向量的向量积的函数,其调用格式如下:
Cross[a,b]求a×b。
例9已知向量a={2,1,-1},b={1,-1,2},求a×b。
解:
In[1]:
=a={2,1,-1};
b={1,-1,2};
Cross[a,b]
Out[3]={1,-5,-3}
In[4]:
=a×b
Out[4]={1,-5,-3}
提示:
求向量积也可以使用基本输入模板上的小乘号。
模板上有两个乘号,容易搞错,大乘号是将对应的元素相乘。
3.矩阵的转置
矩阵的转置操作使用函数:
Transpose[M]将矩阵M转置。
提示:
可以将此函数自制成模板。
4.求行列式
求一个方阵的行列式使用函数:
Det[A]求方阵A的行列式。
例10计算行列式:
(1)
,
(2)
。
解:
In[1]:
=a=
;
Det[a]
Out[2]=-18
In[3]:
=b=
;
Det[b]
Out[3]=5+9λ+3λ2-λ3
5.求逆矩阵
求一个方阵的逆矩阵使用函数:
Inverse[A]求A的逆矩阵,自动判断是否可逆。
例11已知A=
,求A的逆矩阵。
解:
In[1]:
=a=
;
b=Inverse[a]
Out[2]=
In[3]:
=a.b//MatrixForm
Out[3]//MatrixForm=
In[4]:
=a-1
Out[4]=
注意:
a-1不表示逆矩阵。
还有函数:
MatrixPower[A,n]求An(其中n为整数),当n=-1时即求逆矩阵。
例12已知A=
,求
(1)A5,
(2)A-1,(3)A0。
解:
In[1]:
=a=
;
MatrixPower[a,5]//MatrixForm
Out[2]//MatrixForm=
In[3]:
=MatrixPower[a,-1]//MatrixForm
Out[3]//MatrixForm=
In[4]:
=Inverse[a]//MatrixForm
Out[4]//MatrixForm=
In[5]:
=MatrixPower[a,0]//MatrixForm
Out[5]//MatrixForm=
注意:
在Mathematica中直接输入符号An是将矩阵A的每个元素求n次幂。
6.特征值与特征向量
求矩阵的特征值与对应的特征向量的函数是:
Eigenvalues[A]求方阵A的全部特征值。
Eigenvectors[A]求方阵A的一组线性无关的特征向量。
Eigensystem[A]求全部特征值和对应的线性无关的特征向量组。
例13求矩阵A=
的特征值和特征向量。
解:
In[1]:
=a=
;
Eigenvalues[a]
Out[2]={-1,-1,5}
In[3]:
=Eigenvectors[a]
Out[3]={{-1,0,1},{-1,1,0},{1,1,1}}
In[4]:
=Eigensystem[a]
Out[4]={{-1,-1,5},{{-1,0,1},{-1,1,0},{1,1,1}}}
In[5]:
=Eigensystem[a]//MatrixForm
Out[5]//MatrixForm=
提示:
由上例可知,函数Eigensystem最好用,输出的结果含义十分清楚,通常使用这个函数就足够了。
如果输入A的元素时使用了小数点,或者参数改为N[A],则求近似解。
例14求矩阵A=
和B=
的特征值和特征向量。
解:
In[1]:
=a=
;
Eigensystem[a]//MatrixForm
Out[2]//MatrixForm=
In[3]:
=Eigensystem[N[a]]//MatrixForm
Out[3]//MatrixForm=
In[4]:
=Eigensystem[
]//MatrixForm
Out[3]//MatrixForm=
还有以下特殊情况应当说明,示例如下:
In[1]:
=Eigensystem[
]//MatrixForm
Out[1]//MatrixForm=
注意:
这个例子中属于特征值1的线性无关的特征向量只有一个,这时不能找到n个线性无关的特征向量(不相似于对角矩阵)。
遇到这种情况,Mathematica总是补上零向量!
但零向量不是特征向量,与常规不一致,不要产生误解。
三、解线性方程组
专门用于解线性方程组的函数有3个:
RowReduce[M]消元得到矩阵M的行最简形矩阵。
NullSpace[M]求齐次线性方程组Mx=0的一个基础解系。
LinearSolve[M,b]求线性方程组Mx=b的一个特解。
例15求解线性方程组:
。
解:
In[1]:
=ab=
;
a=Take[ab,{1,3},{1,4}];
b=ab[[All,5]];
RowReduce[ab]//MatrixForm
Out[4]//MatrixForm=
In[5]:
=NullSpace[a]
Out[5]={{1,0,2,1},{1,1,0,0}}
In[6]:
=LinearSolve[a,b]
Out[6]=
说明:
在上例的In[1]中首先给出了一个线性方程组的增广矩阵ab,再提取前4列得到系数矩阵a,提取第5列得到常数项b。
然后利用这三个函数分别求出:
行最简形矩阵、导出组的基础解系、非齐次方程组的一个特解,于是给出了线性代数课中人工求解线性方程组的关键结果。
提示:
从线性代数的内容知道,最有用的是RowReduce,由它的计算结果就能得到所有答案,不必再使用后两个函数。
这个函数还能用于求矩阵的秩和一个极大线性无关部分组。
当然也可以用解一般方程组的函数Solve解线性方程组,当方程组有自由未知量时,输出答案时用自由未知量表示其余未知量,也很实用。
习题十三
1.已知a={4,-2,4},b={6,-3,2},试求:
(1)a•b;
(2)(3a-2b)•(a+2b)。
2.求下列行列式的值:
(1)
;
(2)
。
3.已知A=
,B=
,求AB和BA。
4.已知A=
,I=
,求2A2+3A+5I。
5.求下列矩阵的秩。
(1)
;
(2)
。
6.解下列方程组。
(1)
;
(2)
。
7.求下列矩阵的特征值和特征向量。
(1)
;
(2)
。