Mathematica线性代数运算命令与例题.docx
《Mathematica线性代数运算命令与例题.docx》由会员分享,可在线阅读,更多相关《Mathematica线性代数运算命令与例题.docx(20页珍藏版)》请在冰豆网上搜索。
Mathematica线性代数运算命令与例题
第五章线性代数运算命令与例题
线性代数中常用的工具是矩阵(向量)和行列式。
用这些工具可以表示工程技术,经济工作中一些需要用若干个数量从整体上反映其数量关系的问题。
用这些工具可以简明凝练而准确地把所要研究的问题描述出来,以提高研究的效率。
在线性代数课程中我们看到了用这些工具研究齐次和非齐次线性方程组解的理论和解的结构,矩阵的对角化,二次型化标准形等问题的有力,便捷.
5.1向量与矩阵的定义
数学上矩阵是这样定义的:
由
个数排成m行n列的数表
称为m行n列矩阵,特别,当m=1时就是线性代数中的向量。
记作:
两个
矩阵称为同型矩阵。
线性代数中的运算对象是向量和矩阵,因此首先介绍向量和矩阵的输入。
5.1.1输入一个矩阵
命令形式1:
Table[f[i,j],{i,m},{j,n}]
功能:
输入
矩阵,其中f是关于i和j的函数,给出[i,j]项的值.
命令形式2:
直接用表的形式来输入
功能:
用于矩阵元素表达式规律不易找到的矩阵的输入。
注意:
1.Mathematica是采用一个二重表的形式来表示矩阵的,即用
{{…},{…},…,{…}}
其中表中的每个表元素都是等长的一维表,第一个表元素是矩阵的第一行,第二个表元素是矩阵的第二行,一般,第n个表元素是矩阵的第n行。
要看通常的矩阵形式可以用命令:
MatrixForm[%]
2.对应上述命令形式,输入一个向量的命令为
Table[f[j],{j,n}]或直接输入一个一维表{a1,a2,…,an},这里a1,a2,…,an是数或字母。
例题
例1.输入矩阵A=
、向量b={1,4,7,-3}。
解:
Mathematica命令
In[1]:
=a={{12,-3,0,2,1},{56,-8,-45,21,91},{3,6,81,13,4}}
Out[1]:
={{12,-3,0,2,1},{56,-8,-45,21,91},{3,6,81,13,4}}
In[2]:
=b={1,4,7,-3}
Out[2]:
={1,4,7,-3}
例2.输入一个
矩阵
解:
Mathematica命令
In[3]:
=Table[Sin[i+j],{i,5},{j,3}]
Out[3]:
={{Sin[2],Sin[3],Sin[4]},{Sin[3],Sin[4],Sin[5]},{Sin[4],Sin[5],Sin[6]},
{Sin[5],Sin[6],Sin[7]},{Sin[6],Sin[7],Sin[8]}}
In[4]:
=MatrixForm[%]
Out[4]:
=
Sin[2]Sin[3]Sin[4]
Sin[3]Sin[4]Sin[5]
Sin[4]Sin[5]Sin[6]
Sin[5]Sin[6]Sin[7]
Sin[6]Sin[7]Sin[8]
5.1.2几个特殊矩阵的输入
1.生成0矩阵
命令形式:
Table[0,{m},{n}]
功能:
产生一个
的0矩阵
2.生成随机数矩阵
命令形式:
Table[Random[],{m},{n}]
功能:
产生一个
的随机数矩阵
3.生成上三角矩阵
命令形式:
Table[If[i<=j,a,0],{i,m},{j,n}]
功能:
产生一个非0元全为数a的上三角矩阵
4.生成下三角矩阵
命令形式:
Table[If[i>=j,a,0],{i,m},{j,n}]
功能:
产生一个非0元全为数a的
下三角矩阵
5.生成三对角矩阵
命令形式:
Table[Switch[i-j,-1,a[[i]],0,b[[i]],1,c[[i-1]],-,0],{i,m},{j,n}]
功能:
产生一个
的三对角矩阵
6.生成对角矩阵
命令形式:
DiagonalMatrix[list]
功能:
使用列表中的元素生成一个对角矩阵.
7.生成单位矩阵
命令形式:
IdentityMatrix[n]
功能:
生成n阶单位阵
例题
例3.构造
的0矩阵。
解:
Mathematica命令
In[5]:
=Table[0,{4},{3}]
Out[5]:
={{0,0,0},{0,0,0},{0,0,0},{0,0,0}}
In[6]:
=MatrixForm[%]
Out[6]:
=
000
000
000
000
例4.构造一个
的随机数矩阵。
解:
Mathematica命令
In[7]:
=Table[Random[],{2},{5}]
Out[7]:
={{0.46223,0.545335,0.423938,0.635765,0.792571},
{0.802126,0.372146,0.114424,0660867,0.0163719}}
例5.构造非0元全为2的4⨯5上三角矩阵。
解:
Mathematica命令
In[8]:
=Table[If[i<=j,2,0],{i,4},{j,5}]
Out[8]={{2,2,2,2,2},{0,2,2,2,2},{0,0,2,2,2},{0,0,0,2,2}}
In[9]:
=MatrixForm[%]
Out[9]=22222
02222
00222
00022
例6.构造非0元全为1的4⨯4下三角方阵。
解:
Mathematica命令
In[10]:
=Table[If[i>=j,1,0],{i,4},{j,4}]
Out[10]={{1,0,0,0},{1,1,0,0},{1,1,1,0},{1,1,1,1}}
In[11]:
=MatrixForm[%]
Out[11]=1000
1100
1110
1111
例7.生成三对角矩阵
。
解:
Mathematica命令
In[12]:
=Table[Switch[i-j,-1,a,0,b,1,c,_,0],{i,6},{j,6}]
Out[12]={{b,a,0,0,0,0},{c,b,a,0,0,0},{0,c,b,a,0,0},
{0,0,c,b,a,0},{0,0,0,c,b,a},{0,0,0,0,c,b}}
例8.生成对角矩阵
。
解:
Mathematica命令
In[13]:
=DiagonalMatrix[{a,b,c,d}]
Out[13]={{a,0,0,0},{0,b,0,0},{0,0,c,0},{0,0,0,d}}
例9.生成5阶单位矩阵。
解:
Mathematica命令
In[14]:
=a=IdentityMatrix[5]
Out[14]={{1,0,0,0,0},{0,1,0,0,0},{0,0,1,00},
{0,0,0,1,0},{0,0,0,0,1}}
In[15]:
=MatrixForm[%]
Out[15]=10000
01000
00100
00010
00001
5.2向量与矩阵的运算
5.2.1基本运算
运算
功能
命令形式
矩阵加法和减法
将两个同型矩阵相加(减)
A±B
数乘
将数与矩阵做乘法
kA
其中k是一个数,A是一个矩阵
矩阵的乘法
将两个矩阵进行矩阵相乘
A.B
其中乘号"."使用键盘上的小数点
矩阵的求逆
求方阵的逆
Inverse[A]
A必须为方阵
矩阵的转置
.
求矩阵的转置
Transpose[A]
A可以是任意矩阵
向量的数量积(点积)
求同维向量的数量积
v1.v2
其中乘号"."使用键盘上的小数点
例题
例10.计算
解:
Mathematica命令
In[16]:
={{1,3,7},{-3,9,-1}}+{{2,3,-2},{-1,6,-7}}
Out[16]={{3,6,5},{-4,15,-8}}
例11.计算
。
解:
Mathematica命令
In[17]:
=5{{1,2,3},{3,5,1}}
Out[17]={{5,10,15},{15,25,5}}
例12.求向量
与
的点积。
解:
Mathematica命令
In[18]:
={a,b,c}.{e,f,g}
Out[18]=ae+bf+cg
例13.求向量{a,b,c}与矩阵
的乘积。
解:
Mathematica命令
In[19]:
={a,b,c}.{{1,2},{3,4},{5,6}}
Out[19]={a+3b+5c,2a+4b+6c}
例14.求矩阵
与向量{a,b}的乘积。
解:
Mathematica命令
In[20]:
={{1,2},{3,4},{5,6}}.{a,b}
Out[20]:
={a+2b,3a+4b,5a+6b}
注:
Mathematica中不区分行向量和列向量,而是尽可能给出结果。
例15:
求矩阵
与
的乘积。
解:
Mathematica命令
In[21]:
=a={{1,3,0},{-2,-1,1}}
In[22]:
=b={{1,3,-1,0},{0,-1,2,1},{2,4,0,1}}
In[23]:
=a.b
Out[23]:
={{1,0,5,3},{0,-1,0,0}}
例16.求矩阵
的逆。
解:
Mathematica命令
In[24]:
=A={{1,2,3,4},{2,3,1,2},{1,1,1,-1},{1,0,-2,-6}}
Out[24]={{1,2,3,4},{2,3,1,2},{1,1,1,-1},{1,0,-2,-6}}
In[25]:
=Inverse[A]
Out[25]={{22,-6,-26,17},{-17,5,20,-13},{-1,0,2,-1},{4,-1,-5,3}}
例17.求矩阵
的逆。
解:
Mathematica命令
In[26]:
=Inverse[{{a,b},{c,d}}]
Out[26]:
=
例18.求矩阵
的转置。
解:
Mathematica命令
In[27]:
=A={{1,2,3,4},{2,3,4,5},{3,4,5,6}}
Out[27]:
={{1,2,3,4},{2,3,4,5},{3,4,5,6}}
In[28]:
=Transpose[A]
Out[28]:
={{1,2,3},{2,3,4},{3,4,5},{4,5,6}}
5.2.2.方阵的运算
●求行列式
命令形式:
Det[A]
功能:
计算方阵A的行列式
●求方阵的幂
命令形式:
MatrixPower[A,n]
功能:
计算方阵A的n次幂。
●求矩阵的k阶子式
命令形式:
Minors[A,k]
功能:
求出矩阵A的所有可能的k阶子式的值。
例题:
例19.
,求A的行列式
解:
Mathematica命令
In[29]:
=Det[{{a,b},{c,d}}]Out[29]:
=-bc+ad
例20.求矩阵
的2次幂。
解:
Mathematica命令
In[30]:
=MatrixPower[{{1,2},{3,4}},2]
Out[30]:
={{7,10},{15,22}}
例21.求矩阵
的所有2阶子式的值。
解:
Mathematica命令
In[31]:
=Minors[{{1,2,3},{2,3,4}},2]
Out[31]:
={{-1,-2,-1}}
例22.某农场饲养的动物所能达到的最大年龄为15岁,将其分为三个年龄组:
第一组,0——5岁;第二组6——10岁;第三组成11——15岁。
动物从第二年龄组起开始繁殖后代,经过长期统计,第二年龄组的动物在其年龄段平均繁殖4个后代,第三组在其年龄段平均繁殖3个后代,第一年龄组和第二年龄组的动物能顺利进入下一个年龄组的存活率分别是1/2和1/4。
假设农场现有三个年龄段的动物各1000头,问15年后农场饲养的动物总数及农场三个年龄段的动物各将达到多少头?
指出15年间,动物总增长多少头及总增长率。
解:
年龄组为5岁一段,故将时间周期也取5年。
15年经过3个周期。
用k=1,2,3分别表示第一、二、三个周期,xi(k)表示第i个年龄组在第k个周期的数量。
由题意,有如下矩阵递推关系:
即
利用Mathematica计算有:
In[32]:
=L={{0,4,3}.{1/2,0,0},{0,1/4,0}};x0={1000,1000,1000};
In[33]:
=Do[x0=L.x0;Print[x0],{3}]
Out[33]:
={7000,500,250}
{2750,3500,125}
{14375,1375,875}
结果分析:
15年后,农场饲养的动物总数将达到16625头,其中0——5岁的有14375头,占总数的86.47%,6——10岁的有1375头,占8.27%,11——15岁的有875头,占5.226%,15年间,动物总增长13625头,总增长率为13625/3000=454.16%。
5.3解线性方程组
线性方程组是线性代数研究的主要问题,Mathematica提供了解线性方程组的命令,可以求解方程个数与未知量个数相等或不等的一般线性方程组,命令为:
命令形式:
Solve[eqns,{x1,x2,…}]
功能:
求解以{x1,x2,…}为未知量的方程或纺方程组。
注:
eqns表示方程或方程组,其中的等号用两个等号"=="输入。
例23.求方程组
的解。
解:
Mathematica命令
In[34]:
=Solve[{2x+3y==4,x-y==1},{x,y}]
Out[34]:
=
例24.求齐次方程
的解。
解:
Mathematica命令
In[35]:
=Solve[5x1+4x2+3x3+2x4+x5==0,x1]
Out[35]=
In[36]:
=Solve[5x1+4x2+3x3+2x4+x5==0,x5]
Out[36]={{x5->-5x1-4x2-3x3-2x4}}
例25.求非齐次方程
的解。
解:
Mathematica命令
In[37]:
=Solve[{2x1+7x2+3x3+x4==6,3x1+5x2+2x3+2x4==4,9x1+4x2+x3+7x4==2},
{x1,x2,x3,x4}]
Out[37]=
●数学实验
对例25在指定不同未知量名时来求解,如做如下的计算
Solve[{2x1+7x2+3x3+x4==6,3x1+5x2+2x3+2x4==4,9x1+4x2+x3+7x4==2},{x1,x2}],
Solve[{2x1+7x2+3x3+x4==6,3x1+5x2+2x3+2x4==4,9x1+4x2+x3+7x4==2},{x2,x3}]等做观察,比较命令的结果并给出解释。
.
5.4求矩阵特征值和特征向量
5.4.1求矩阵特征值命令
命令形式1:
Eigenvalues[A]功能:
求出方阵A的全部特征值。
命令形式2:
Eigenvalues[N[A]]功能:
求出方阵A的全部特征值的数值解。
注意:
命令1有时不能求出特征值,而命令2总能求出特征值的近似值
例题:
例26.求矩阵
的特征值。
解:
Mathematica命令
In[38]:
=A={{2.,1.,1.},{1.,2.,1.},{1.,1.,2.}}
Out[38]={{2.,1.,1.},{1.,2.,1.},{1.,1.,2.}}
In[39]:
=Eigenvalues[A]
Out[39]={4.,1.,1.}
例27.求矩阵
的特征值。
解:
Mathematica命令
In[40]:
=A={{2,1,1},{1,2,1},{1,3,2}};
In[41]=Eigenvalues[N[A]]
Out[41]={4.56155,1.,0.438447}
得三个特征值4.56155,1.,0.438447.如果使用命令1,有
In[42]=Eigenvalues[A]
Eigenvalues:
:
eival:
Unabletofindallrootsofthecharacteristicpolynomial.
Out[42]=Eigenvalues[{{2,1,1},{1,2,1},{1,3,2}}]
出现红色英文提示,结果原样输出,说明此时命令1失效。
例28.求矩阵
的特征值。
解:
Mathematica命令
In[43]:
=A={{3,7,-3},{-2,-5,2},{-4,-10,3}};
In[44]:
=Eigenvalues[N[A]]
Out[44]={1.,1.7763610-15+1.I,1.7763610-15-1.I}
得三个特征值1.,1.7763610-15+1.I,1.7763610-15-1.I
注:
本题Mathematica的计算是有误差的。
实际上,首先用Mathematica计算矩阵A的特征多项式:
In[45]:
=f=Det[{{3-a,7,-3},{-2,-5-a,2},{-4,-10,3-a}}]
Out[45]=
In[46]:
=Solve[f==0,a]
Out[46]={{a->-I},{a->I},{a->1}}
得出的三个特征值分别为1,I,-I。
5.4.2求矩阵特征向量命令
命令形式1:
Eigenvectors[A]功能:
求方阵A全部特征向量。
命令形式2:
Eigenvectors[N[A]]功能:
求方阵A全部特征向量的数值解。
注意:
Mathematica求出的特征向量均为单位向量。
例29.求矩阵
的特征向量。
解:
Mathematica命令
In[47]:
=A={{2.,1.,1.},{1.,2.,1.},{1.,1.,2.}}
Out[47]={{2.,1.,1.},{1.,2.,1.},{1.,1.,2.}}
In[48]=Eigenvectors[A]
Out[48]={{0.57735,0.57735,0.57735},{0.,-0.707107,0.707107},
{-0.816497,0.408248,0.408248}}
得三个特征向量为:
{1.57735,0.57735,0.57735},
{0.,-0.707107,0.707107},
{-0.816497,0.408248,0.408248}
例30.求矩阵
的特征向量。
In[49]:
=Eigenvectors[N[A]]
Out[49]:
={{-0.816497,0.408248,0.408248},
{0.6742+3.8218110-18I,-0.40452-0.13484I,-0.26968-0.53936I},
{0.6742-3.8218110-18I,-0.40452+0.13484I,-0.26968+0.53936I}}
注:
由于特征值的误差导致对应于I和-I的特征向量也产生误差。
若用解线性方程组的方法求特征向量有:
In[50]:
=Solve[{(3-I)x1+7x2-3x3==0,-2x1-(5+I)x2+2x3==0,
-4x1-10x2+(3-I)x3==0},{x1,x2,x3}]
Out[50]=
In[51]:
=Solve[{2x1+7x2-3x3==0,-2x1-6x2+2x3==0,
-4x1-10x2+2x3==0},{x1,x2,x3}]
Out[51]={{x1->-2x3,x2->x3}}
In[52]:
=Solve[{(3+I)x1+7x2-3x3==0,-2x1-(5-I)x2+2x3==0,
-4x1-10x2+(3+I)x3==0},{x1,x2,x3}]
Out[52]=
结果正确。
Mathematica还提供了一个命令Eigensystem[A],它能一次求出方阵A的特征值和特征向量。
例31.求矩阵
的特征值和特征向量。
解:
Mathematica命令
In[53]:
=A={{2.,1.,1.},{1.,2.,1.},{1.,1.,2.}}
Out[53]={{2.,1.,1.},{1.,2.,1.},{1.,1.,2.}}
In[54]:
=Eigensystem[A]
Out[54]={{4.,1.,1.},
{{0.57735,0.57735,0.57735},{0.,-0.707107,0.707107},{-0.816497,0.408248,0.408248}}}
其中,第一个表是三个特征值,第二个2维表是三个特征向量。