收藏 分销(赏)

Mathematica教程-5用Mathematica求解线性代数基本问题.ppt

上传人:xrp****65 文档编号:13218183 上传时间:2026-02-04 格式:PPT 页数:63 大小:685KB 下载积分:10 金币
下载 相关 举报
Mathematica教程-5用Mathematica求解线性代数基本问题.ppt_第1页
第1页 / 共63页
Mathematica教程-5用Mathematica求解线性代数基本问题.ppt_第2页
第2页 / 共63页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,用,Mathematica,求解线性代数基本问题,一、构造矩阵,两种方式输入矩阵,1,、输入和构造矩阵,矩阵是一个数表,在,Mathematica,中构造并输入一个已知矩阵就相当于构造一个表。例如,键入,tt,=,a,b,c,a,b,c,不一定是数,可以是一个图形等,在,Mathematica,中就构造了一个名为,tt,的,3,维向量,a,b,c,;,键入,t0=1,,,2,,,3,,,4,,,5,,,6,则得到一个名为,t0,的,2,行,3,列,的矩阵。,2,、也可利用工具栏或菜单输入矩阵,点击工具栏上的矩阵输入的工具,就会得到一个二行二列的矩阵输入框,若不是二行二列的矩阵,可通过按,Ctrl+Enter,键增加一行,按,Ctrl+,键增加一列,用鼠标选定一行(或一列),按,Del,键可删除一行,(,或一列)。通过这样的操作,就可输入任意一个矩阵。下面的图演示了这个过程。,例,矩阵的输出默认是数表形式,也可利用,MatrixForm,命令,将其输出为矩阵想形式。,如果要访问一个矩阵的某一个元素,比如,t0,的第一行第二列元素,用,t01,2,就代表该元素。,中括号表示指定位置,不能少,例,3,、利用系统函数生成矩阵,Mathematica,提供了很多生成向量和矩阵的命令,简述如下表所示。,命令,功能,Tablef,i,n,用,f,生成包含,n,个元素的向量,Arraya,n,生成一个,a1,a2,an,的向量,Rangen,生成一个,1,2,n,的向量,Rangem,n,生成一个,m,m+1,n,的向量,Rangem,n,d,生成一个,m,m+d,n,的向量,Lengthlist,计算向量的长度,命令,功能,Tablef,i,m,j,n,生成一个,m,n,矩阵,Arraya,m,n,生成一个,m,n,矩阵,元素为,a(i,j,),DiagonalMatrixlist,对角矩阵,以,list,为对角线元素,IdentityMatrixn,生成一个,n,n,单位矩阵,Partlist,i,或,listi,提取矩阵的第,i,行,Partlist,i,j,或,listi,j,提取矩阵的第,i,行第,j,列元素,Dimensionslist,矩阵的阶数,例,对角线上为,a,b,c,d,例(续),二、矩阵的基本运算,矩阵运算是线性代数的基本内容。常规的矩阵运算有矩阵的加减法、数乘、乘法、行列式,转置和逆矩阵等。在,Mathematica,中只要一个运算符或调用一个函数即可完成上述运算,下表给出了矩阵加法和乘法的一般形式,矩阵基本运算,说明,A+,c,A,为矩阵,,c,为标量,,c,与,A,中,每个元素,相加,A+B,A,B,为,同类型,矩阵或向量,A,与,B,的对应元素相加,c,A,A,为矩阵,,c,为标量,c,与,A,中,每个元素,相乘,A,.,B,矩阵,A,与,B,相乘,要求,A,的,列数,等于,B,的,行数,u,.,v,向量,u,与,v,的,内积,(行向量乘列向量),OuterTimes,u,v,列向量,u,乘行向量,v,Crossu,v,向量,u,与,v,的外积,(,对三维向量而言,即为向量积,),例,例(续),二、矩阵的运算,下表列出矩阵的其他一些运算,矩阵运算函数,说明,Det,A,计算方阵,A,的行列式,Transpose,A,表示,A,的转置矩阵,Inverse,A,表示,A,的逆矩阵,MinorsA,,,k,给出,A,的所有,k,阶子式,返回结果为一个表,Tr,A,计算,A,的迹,(4.0,版,),MatrixPower,A,n,表示,A,n,RowReduce,A,给出用行初等变换将矩阵,A,化为规范的阶梯形矩阵。显然,此运算可求出矩阵,A,的秩。此函数也可归属解方程组函数,例,例,例,例,求下列矩阵的秩及行向量组的一个极大无关 组,并将其余行向量表成它的线性组合:,Mathematica,没有直接求矩阵秩的函数,但我们可以通过,RowReduce,函数求出行最简形,从而求出矩阵的秩。,注意由于是求行向量组的极大无关组,所以应求,A,T,的出行最简形。,例,三、求解线性方程组,对于线性方程组,Ax=b,,若方程组有惟一解,由用,Solve,函数即可求解。但更好的方法是用,NullSpace,函数和,LinearSolve,函数。,首先用,NullSpace,函数求出,Ax=0,的基础解系,再用,LinearSolve,函数求出,Ax=b,的一个解(如果存在的话),由此就可求出,Ax=b,的通解。,例,例(续),四、特征值与特征向量,下表列出求特征值与特征向量的函数,矩阵运算函数,说明,Eigenvalues,A,计算,A,的,特征值,(,准确形式,结果为一个表,),Eigenvectors,A,计算,A,的,特征向量,(,准确形式,结果为一个表,),Eigensystem,A,给出,A,的,特征值,特征向量,的一个表,EigenvaluesN,A,计算,A,的,特征值,(,数值解,结果为一个表,),EigenvectorsN,A,计算,A,的,特征向量,(,数值解,结果为一个表,),例,例(续),五、,向量正交化运算,在,Mathematica,的,LinearAlgebraOrthogonalization,程序包中有对向量单位化和对一组向量正交化的函数。下面仅列出施密特正交化函数。,向量正交化运算函数,说明,GramSchmidtv,1,v,2,,,将向量组,v,1,v,2,单位正交化,示例,例,试求一个正交变换,将二次型,化为标准形式,例(续),模块和块中的变量,前面我们学习了有关,Mathematica,的各种基本运算及操作,为了使,Mathematica,更有效的工作,我们可对,Mathematica,进行模块化运算。在模块内部通过编写一系列表达式语句,使其实现一定的功能。在,Mathematica,内部也提供了很多程序包,我们将学习如何调用它们。,一般情况下,Mathematica,假设所有变量都为全局变量。也就是说无论何时你使用一个你定义的变,Mathematica,都假设你指的是同一个目标。然而在编制程序时,你则不会想把所有的变量当作全局变量,因为如果这样程序可能就不具有通用性,你也可能在调用程序时陷入混乱状态。下面给出定义模块或块和局部变量的常用形式,Modulex,y,.,body,具有局部变量,x,y,的模块,Modulex=x0,y=y0,body,具有初始值的局部变量的模块,lhs:=,Modulevars,rhs/:cond,rhs,和,cond,共享局部变量,Blockx,y,.,body,运用局部值,x,y,计算,body,Blockx=x0,y=y0,bddy,给,x,y,.,赋初始值,Mathematica,中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。,首先来看,Module,函数,这个函数的第一部分参数里说明的 变量,只在,Module,内起作用,.body,执行体,包含合法的,Mathematica,语句,多个语句之间可用“,;”,分割,.,In1:=t=10;,Modulet,=5,t=t+2,Out2=7,In3:=t,Out3=10,In3:=t,Out3=10,可以对模块中的任意局部变量进行初始化,这些,初始值总是在模块执行前就被计算出来,Mathematica,中的模块允许把某变量名看作,局部变量名。然而又存在有时你又希望它们为,全局变量时,但变量值为局部的矛盾,这时可以,用,Block,函数。,在,Mathematica,中编制程序时,必须使程序中的各个部分尽可能的独立,这样程序才便于读懂、维护和修改。确保程序各部分不相干的主要方法是设置具有一定作用域的变量。在,Mathematica,中有两种限制变量作用域的基本方法,:,模块,(Module),和块,(Block),。实际程序中,模块比块更具普遍性。然而在交互式计算中需要定义作用域时,块更实用。,Modulevars,body,所要做的是把执行模块时表达式,body,的形式看成,Mathematica,程序的“代码”。然而当“代码”中直接出现变量,vars,时,这些,vars,都被看作局部的。,Blockvars,body,并不查看表达式,body,的形式,而在整个计算,Body,的过程中,使用,vars,的局部值。,下例中我们根据,i,定义,m:,ln12:=m=i2,Out12:=i,2,在计算,i+m,的整个过程中使用块中,i,的局部值,:,h13:=,Blocki,=a,,,i+m,Out13=a+a,2,而对于下面的例子,只有直接出现在,i+m,中的,i,,才被看作局部变量,:,In14:=,Modulei,=a,,,i+m,Out14=a+i,2,条件结构,条件结构的常用形式。,lhs:=,rhsl,/:test,test,为真时使用定义,Iftest,then,如,test,为真计算,then,,反之返回空值,Iftest,then,else,如,test,为真计算,then,,反之计算,else,W,hichtest1,value1,,,t,est2,,,.,testi,为真时,,计算,valuei,Switchexpr,forml,value1,form2,.,expr,与每一个,formi,相等时,,计算,valuei,Switchexpr,form1,value1,form2,,,_,,,def,用,def,为系统默认值,ln1:=If 10,1+2,2+3,Out1=3,ln3:g=1/:x0,ln4:g=-1/:xO,gx,_:=-1,:xO,符号条件,在,Mathemahca,中,有一种可能的情况就是你给出的条件结果既不是真也不为假。下面测试的结果既不是真也不是假,因此,If,的两个分支保持不变,:,ln1:=,Ifx,=,y,a,b,Out1=,Ifx,=,y,a,b,可以给,If,加上第三个条件结果,允许测试的结果,既不是真也不是假的情况下使用它,ln2:=,Ifx,=,y,a,b,c,Out2=c,下面给出处理符号条件的函数。因,x=x,故,Mathematica,给,出结果为真,.,但,Mathematica,在下面情况下以符号等式输出,:,ln4:=x=y,Out4:=x=y,可以用,TrueQ,表达式,来处理符号条件,.,除非表达式能得出真,否则都被假设为假,.,ln5:=,TrueQx,=x,Out5=True,ln6:=,TrueQx,=y,Out6=false,用“,=”,可直接测试两个表达式的等同性,:,In7:=x=y,Out7:=False,一般情况下,“=”,返回值为真,(True),或假,(False),而“,=”,为符号形式输出,表示一个符号等式。在 特殊情况下可用“,=”,测试一个表达式的结构,而用“,=”,测试数学上的等同性。,逻辑表达式的运算形式,expr1&expr2&expr3,计算,expri,直到其中有一个为假为止,exprl|expr2|expr3,计算,expri,直到其中有一个为真为止,循环结构,Mathematica,程序的执行包括对一系列,Mathematica,表达式的计算。对简单程序,表达式的计算可用分号“;”来隔开,然后一个接一个地进行计算。然而,有时你需要对同一表达式进行多次计算,即循环计算。,Do,循环结构,Doexpr,i,imax,循环计算,expr,以步长,1,i,从,1,增加到,imax,Doexpr,i,imin,imax,di,循环计算,expr,以步长,di,i,从,imin,增加到,imax,Doexpr,n,循环计算,expr,n,次,While,与,For,结构,在,Mathematica,程序中,,Do,是以结构方式进行循环的,然而有时你需要生成非结构循环。此时,运用函数,While,和,For,是合适的。下面是,While,和,For,函数的循环结构形式,:,Whiletest,body,只要,test,为真,就重复计算,body,Forstart,test,incr,body,以为,start,起始值,重复计算,body,和,incr,,直到,test,为假为止,一些特殊的赋值方式,i+,变量,i,加,1,i-,变量,i,减,1,+i,,,变量,i,先加,1,-i,变量,i,先减,1,i+=,di,i,加,di,i-=,di,i,减,di,x*=C,x,乘以,C,x,=c,x,除以,c,x,y,=,y,x,交换,x,和,y,值,重复运用函数,Nestexpr,n,对表达式,expr,重复调用函数,n,次,FixedPoint,f,,,expr,从,expr,开始,重复调用函数,f,,直到结果不变为止,FixedPointf,,,expr,n,从,expr,开始,重复调用函数,f,,最多迭代,n,次,NestWhilef,expr,test,从,expr,开始,重复调用函数,f,,直到产生的结果为假时为止,流程控制,函数程序结构的流程控制一般来说比较简单,但是在应用,While,或,For,等循环时就比较复杂了,这是因为他们的流程控制依赖于表达式的值。而且在这样的循环中,流程的控 制并不依赖于循环体中表达式的值。有时在编制,Mathematica,程序时,在该程序中,流程控制受某一过程或循环体执行结果的影响。这时,可用,Mathematka,提供的流程控制函数来控制流程。这些函数的 工作过程与,C,语言中的很相似。,常用的流程控制函数,。,Break,退出本层的循环,Continue,转入当前循环的下一步,Returnexpr,退出函数中的所有过程及循环,并返回,expr,值,Gotoname,转入当前过程中的元素,Labelname,Throwvalue,返回,expr,值,Return,允许退出一函数,并返回一个值。,Mathematica,可以进行局部返回,这允许退出一列,迭代函数。,非局部返回在错误处理时是很有用的。下面给出的例子中如函数变量小于,0,则输出,error,谢谢大家,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服