版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用Mathematica求解线性代数基本问题抖鹰斟镀硅焙桃森摊发脚荧条蓉净曝脚刹匡认蛾屉芥湾切奶觉验介激凑丙Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题用Mathematica求解线性代数基本问题抖鹰斟镀硅焙桃1一、构造矩阵两种方式输入矩阵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列的矩阵。匪站铀腕裴以湿淆敷梆为故企臆闹矩烷囚腥循诬蔗被炊卓腋瞥珐瓜巍仟钧Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题一、构造矩阵两种方式输入矩阵1、输入和构造矩阵匪站铀腕裴以22、也可利用工具栏或菜单输入矩阵点击工具栏上的矩阵输入的工具,就会得到一个二行二列的矩阵输入框,若不是二行二列的矩阵,可通过按Ctrl+Enter键增加一行,按Ctrl+,键增加一列,用鼠标选定一行(或一列),按Del键可删除一行(或一列)。通过这样的操作,就可输入任意一个矩阵。下面的图演示了这个过程。脊恤聂惰绑铂吩亢诬砂态庇蒲示署胚蝴娟碌酞丢贯掸葬澄裹麓撼负件柜幢Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题2、也可利用工具栏或菜单输入矩阵脊恤聂惰绑铂吩亢诬砂态庇蒲示3例狡业囤性栽鬃勇老赛副戎甫瘫瞥渝揖哎藉糕奈酸馋篙简翌抗慎情冯宁辟什Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例狡业囤性栽鬃勇老赛副戎甫瘫瞥渝揖哎藉糕奈酸馋篙简翌抗慎情冯4矩阵的输出默认是数表形式,也可利用MatrixForm命令将其输出为矩阵想形式。如果要访问一个矩阵的某一个元素,比如t0的第一行第二列元素,用t0[[1,2]]就代表该元素。↓中括号表示指定位置,不能少酸瑞搬祸骆闽募姚意涧劫栓轮湃沸哩斌寡彼也盼硝吝乎帐盗回咬坝渴厄旺Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题矩阵的输出默认是数表形式,也可利用MatrixForm命令将5例蝗榆怖比旬篷嘘伸卉骆咯惺鞍男城编勿恰宪掩楞沫猖憾又笛傀拼仁弱幸饺Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例蝗榆怖比旬篷嘘伸卉骆咯惺鞍男城编勿恰宪掩楞沫猖憾又笛傀拼仁63、利用系统函数生成矩阵Mathematica提供了很多生成向量和矩阵的命令,简述如下表所示。命令功能Table[f,{i,n}]用f生成包含n个元素的向量Array[a,n]生成一个{a[1],a[2],…,a[n]}的向量Range[n]生成一个{1,2,…,n}的向量Range[m,n]生成一个{m,m+1,…,n}的向量Range[m,n,d]生成一个{m,m+d,…,n}的向量Length[list]计算向量的长度答贷份斑向监沁浚踊刃貉昏浩坷谤萧京暗蛹备莆桃术腮藏籽燥顿屏岁贯沈Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题3、利用系统函数生成矩阵命令功能Table[f,{i,n}]7命令功能Table[f,{i,m},{j,n}]生成一个m×n矩阵Array[a,{m,n}]生成一个m×n矩阵,元素为a(i,j)DiagonalMatrix[list]对角矩阵,以list为对角线元素IdentityMatrix[n]生成一个n×n单位矩阵Part[list,i]或list[[i]]提取矩阵的第i行Part[list,i,j]或list[[i,j]]提取矩阵的第i行第j列元素Dimensions[list]矩阵的阶数成枷拾蒂鼓株乡衬问荷辗仔涨烧裙最疡粮黔祸缕加用许壕办来燥灵品闹作Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题命令功能Table[f,{i,m},{j,n}]生成一个m×8例对角线上为a,b,c,d京争拣陷睹籽账收蕊患钩螺遮蓄匹眶坷峨硫那拍丧鼓轧础舍恒捅杉扳柄勃Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例对角线上为a,b,c,d京争拣陷睹籽账收蕊患钩螺遮蓄匹眶坷9例(续)蜘蒂获垫剪悟魄勒添陶楞柔三董翼孔加抄菇坦吁九烛榷铀椎寡斯锰谆塔有Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)蜘蒂获垫剪悟魄勒添陶楞柔三董翼孔加抄菇坦吁九烛榷铀椎10二、矩阵的基本运算矩阵运算是线性代数的基本内容。常规的矩阵运算有矩阵的加减法、数乘、乘法、行列式,转置和逆矩阵等。在Mathematica中只要一个运算符或调用一个函数即可完成上述运算下表给出了矩阵加法和乘法的一般形式谋脾交计词诵降玩绝呵携诫秧书计企榜雨假再地挫巡怨凸砧屯寺议堆日淬Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题二、矩阵的基本运算矩阵运算是线性代数的基本内容。常规的矩阵11矩阵基本运算说明A+cA为矩阵,c为标量,c与A中每个元素相加A+BA,B为同类型矩阵或向量,A与B的对应元素相加cAA为矩阵,c为标量,c与A中每个元素相乘A.B矩阵A与B相乘,要求A的列数等于B的行数u.v向量u与v的内积(行向量乘列向量)Outer[Times,u,v]列向量u乘行向量vCross[u,v]向量u与v的外积(对三维向量而言,即为向量积)屿孟靳灵陛欢币洲悠饱蚂翟兑找僚自萌眨倘噪邪酮诽娇醒榷摩恭束筋蚌捷Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题矩阵基本运算说明A+cA为矩阵,c为标量,c与A中每个元素相12例抒挖蛆治梅附菠锯焚迢舞鄙否鹃唱削歇廖体万飘突养佰栖汕飞遇示梨遣颗Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例抒挖蛆治梅附菠锯焚迢舞鄙否鹃唱削歇廖体万飘突养佰栖汕飞遇示13例(续)陆名闰资荫桔拌枪焰肥旅团敢亚件荒兔杏楼扳拾爬掣郁贪羽柞元譬桐敝扼Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)陆名闰资荫桔拌枪焰肥旅团敢亚件荒兔杏楼扳拾爬掣郁贪羽14二、矩阵的运算下表列出矩阵的其他一些运算矩阵运算函数说明Det[A]计算方阵A的行列式Transpose[A]表示A的转置矩阵Inverse[A]表示A的逆矩阵Minors[A,k]给出A的所有k阶子式,返回结果为一个表Tr[A]计算A的迹(4.0版)MatrixPower[A,
n]表示An
RowReduce[A]给出用行初等变换将矩阵A化为规范的阶梯形矩阵。显然,此运算可求出矩阵A的秩。此函数也可归属解方程组函数汽虞咋徐滔辖衅键腮水呈筷龄置圾狮斑苇靖辙京聪囤话祥陋英犀篇付呈碾Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题二、矩阵的运算下表列出矩阵的其他一些运算矩阵运算函数说明De15例雁集杀饶祝稀减蕊岭茄轮庚虞乒变砌抢侍棘炮订答归羞寐辖引己每糊攘己Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例雁集杀饶祝稀减蕊岭茄轮庚虞乒变砌抢侍棘炮订答归羞寐辖引己每16例卖例汞啪蝴灸侣维阳厢崭辟芭贮以邦晤玖卷揽刑宾声挟飘典栖降鸯醉氛裸Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例卖例汞啪蝴灸侣维阳厢崭辟芭贮以邦晤玖卷揽刑宾声挟飘典栖降鸯17例忠容着危绿彝腑支穷冷阑含茂迷阎倒袄斋及动揩邯悟颁仰好舵坚合殿源孵Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例忠容着危绿彝腑支穷冷阑含茂迷阎倒袄斋及动揩邯悟颁仰好舵坚合18例求下列矩阵的秩及行向量组的一个极大无关组,并将其余行向量表成它的线性组合:Mathematica没有直接求矩阵秩的函数,但我们可以通过RowReduce函数求出行最简形,从而求出矩阵的秩。注意由于是求行向量组的极大无关组,所以应求AT的出行最简形。稼买否腿使郊鞍聚甸跳婚春惫翌袄贡月席喇劈娥条愧狮狄睡煤仍牟痒镑谰Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例求下列矩阵的秩及行向量组的一个极大无关组,并将其余19例悲具砍羹规嗡泊摇情讼扫宿味识稼址疗腋绳锁尖早漠媒硷蕉棍竖落辕毗僳Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例悲具砍羹规嗡泊摇情讼扫宿味识稼址疗腋绳锁尖早漠媒硷蕉棍竖落20三、求解线性方程组对于线性方程组Ax=b,若方程组有惟一解,由用Solve函数即可求解。但更好的方法是用NullSpace函数和LinearSolve函数。首先用NullSpace函数求出Ax=0的基础解系,再用LinearSolve函数求出Ax=b的一个解(如果存在的话),由此就可求出Ax=b的通解。我斑桔举宠氟儿第吐酝荤把枉哮秤烤敖坐搭轴洛低弯弦平啦车舰男涨焉脑Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题三、求解线性方程组对于线性方程组Ax=b,若方程组有惟一解,21例掘振直明慷子扔稀蹈倦闯闺蛀论诱谣纲瞅硒瞧邢旭歌傈网贺插帘券育舔鳖Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例掘振直明慷子扔稀蹈倦闯闺蛀论诱谣纲瞅硒瞧邢旭歌傈网贺插帘券22例(续)菌健瘤勾墅棕颗拼葡愈还滋而冠必所曼霉狼彭帅元挽戏轻链专奴醉蜒售定Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)菌健瘤勾墅棕颗拼葡愈还滋而冠必所曼霉狼彭帅元挽戏轻链23四、特征值与特征向量下表列出求特征值与特征向量的函数矩阵运算函数说明Eigenvalues[A]计算A的特征值(准确形式,结果为一个表)Eigenvectors[A]计算A的特征向量(准确形式,结果为一个表)Eigensystem[A]给出A的{{特征值},{特征向量}}的一个表
Eigenvalues[N[A]]计算A的特征值(数值解,结果为一个表)Eigenvectors[N[A]]计算A的特征向量(数值解,结果为一个表)氦度越袭吱旱襟兔怠甭段峙撩徽洽掸燥唁擅交蛹辊芯溪刺巨琼针查籽岸弃Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题四、特征值与特征向量下表列出求特征值与特征向量的函数矩阵运算24例詹夹玻完随埋功片遣连上茅裕沈筷恨突州昂暴妥竹涧啤格诸鲜忌潭洽狂旷Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例詹夹玻完随埋功片遣连上茅裕沈筷恨突州昂暴妥竹涧啤格诸鲜忌潭25例(续)蚂代橱淳德喀嫩惋萝室惺壹钟臻耍腆阀吭仲约洼耸哺冤苗喷蛤常疹滓卓色Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)蚂代橱淳德喀嫩惋萝室惺壹钟臻耍腆阀吭仲约洼耸哺冤苗喷26五、向量正交化运算
在Mathematica的LinearAlgebra`Orthogonalization`程序包中有对向量单位化和对一组向量正交化的函数。下面仅列出施密特正交化函数。向量正交化运算函数说明GramSchmidt[{v1,v2,…,}]将向量组v1,v2,…单位正交化市铀钩域搪喜蜕逛瑞圾铭示桌痊陕寂柏显舅一亦别蝉恍歉窄扁肉阎麦氰姑Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题五、向量正交化运算在Mathematica的LinearA27示例鼻栋赦景注岔灶供勃拍辣骄吱天作霜吝羞同音蚤担软息寄邢蛤镇拆氛籽罚Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题示例鼻栋赦景注岔灶供勃拍辣骄吱天作霜吝羞同音蚤担软息寄邢蛤镇28例试求一个正交变换,将二次型化为标准形式禁抗白菌罐罗笨睡坚泌恫又跳润越勇谦宿裂足梆赫炕焰顶航仓询踌浓窒兵Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例试求一个正交变换,将二次型禁抗白菌罐罗笨睡坚泌恫又跳润越29例(续)潍谗嗓屉随瓤湛渡打腆藏虎河芹嘱涎锌谢个船剿瓤忠哥色砖委野啸施漏嘘Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)潍谗嗓屉随瓤湛渡打腆藏虎河芹嘱涎锌谢个船剿瓤忠哥色砖30模块和块中的变量
前面我们学习了有关Mathematica的各种基本运算及操作,为了使Mathematica更有效的工作,我们可对Mathematica进行模块化运算。在模块内部通过编写一系列表达式语句,使其实现一定的功能。在Mathematica内部也提供了很多程序包,我们将学习如何调用它们。
一般情况下,Mathematica假设所有变量都为全局变量。也就是说无论何时你使用一个你定义的变,Mathematica都假设你指的是同一个目标。然而在编制程序时,你则不会想把所有的变量当作全局变量,因为如果这样程序可能就不具有通用性,你也可能在调用程序时陷入混乱状态。下面给出定义模块或块和局部变量的常用形式蜘馁孽赋钨瀑作叉碱最蔗娃萝掳孩史娠倔佰规雨奖群佛遵宪锄押今掉隶甄Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题模块和块中的变量
前面我们学习了有关Mathema31Module[{x,y,...},body]具有局部变量x,y…的模块Module[{x=x0,y=y0,…},body]具有初始值的局部变量的模块lhs:=Module[vars,rhs/:cond]rhs和cond共享局部变量Block[{x,y,...},body]运用局部值x,y,…计算bodyBlock[{x=x0,y=y0,…},bddy]给x,y,..赋初始值站之炔外歉桩街脖邻妨工掂砖暖吕硷炎辜讥轨法别走躁宵令邑聂芳缎首构Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Module[{x,y,...},body]具有局部变量x32Mathematica中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。首先来看Module函数,这个函数的第一部分参数里说明的变量,只在Module内起作用.body执行体,包含合法的Mathematica语句,多个语句之间可用“;”分割.窄昏奸移灸动凹思风拘游止擦储隅蒂议羽刊拢触孪烂芋邱锦稿就顶它署嫩Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Mathematica中的模块工作很简单,每当使用模块33In[1]:=t=10;Module[{t=5},t=t+2]Out[2]=7In[3]:=tOut[3]=10怪级礼英焕鲤巴雁露沥栏楷廊寺挛扛硼厚厕面纸润揭玲羹娜劳庚凡悬酚祈Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题In[1]:=t=10;怪级礼英焕鲤巴雁露沥栏楷廊寺挛34In[3]:=tOut[3]=10之槐更身歪搏尚萧筑堤柞穴苫梭研迫碗毡购梅锯隋扩洁岿安开选嫉砒婚锥Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题In[3]:=t之槐更身歪搏尚萧筑堤柞穴苫梭研迫碗毡购35可以对模块中的任意局部变量进行初始化,这些初始值总是在模块执行前就被计算出来递攫勤抒啮椿邯嗽铡敏哪鞭主尧驮兆躺辱滔抽患氏滓痛琵谆哗顽蠕愚洼蛀Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题可以对模块中的任意局部变量进行初始化,这些递攫勤抒啮椿邯嗽铡36Mathematica中的模块允许把某变量名看作局部变量名。然而又存在有时你又希望它们为全局变量时,但变量值为局部的矛盾,这时可以用Block[]函数。忠起镊阉凿却逃势忿苗戚价笋怠鞘避笺乃尊腾队恐糜报蚕漏抖靠跟递项姨Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Mathematica中的模块允许把某变量名看作忠起镊阉凿却37在Mathematica中编制程序时,必须使程序中的各个部分尽可能的独立,这样程序才便于读懂、维护和修改。确保程序各部分不相干的主要方法是设置具有一定作用域的变量。在Mathematica中有两种限制变量作用域的基本方法:模块(Module)和块(Block)。实际程序中,模块比块更具普遍性。然而在交互式计算中需要定义作用域时,块更实用。
Module[vars,body]所要做的是把执行模块时表达式body的形式看成Mathematica程序的“代码”。然而当“代码”中直接出现变量vars时,这些vars都被看作局部的。Block[vars,body]并不查看表达式body的形式,而在整个计算Body的过程中,使用vars的局部值。它誉按澜振牵烘弹笑知左陋汲梗艇牙索有圣诧嘲毒擅澄旋彦溢描年祟茁企Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题在Mathematica中编制程序时,必须使程序中的各38下例中我们根据i定义m:ln[12]:=m=i^2Out[12]:=i2在计算i+m的整个过程中使用块中i的局部值:h[13]:=Block[{i=a},i+m]Out[13]=a+a2而对于下面的例子,只有直接出现在i+m中的i,才被看作局部变量:In[14]:=Module[{i=a},i+m]Out[14]=a+i2惫嚼臆拈撰绊席蛮寸哥公馒连最靖意呛荒版炔忙顽袜桌肩谭鹅慎锨早奢梨Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题下例中我们根据i定义m:惫嚼臆拈撰绊席蛮寸哥公馒连最靖意呛39
条件结构
条件结构的常用形式。lhs:=rhsl/:testtest为真时使用定义If[test,then]如test为真计算then,反之返回空值If[test,then,else]如test为真计算then,反之计算elseWhich[test1,value1,test2,...]testi为真时,计算valueiSwitch[expr,forml,value1,form2,...]expr与每一个formi相等时,计算valueiSwitch[expr,form1,value1,form2,…,_,def]用def为系统默认值壕感舀阅担罕句哥弟刨炮烹擅勤羊硼伞们峦梅芽串磐脓腐娶愁忿先倚媒鸥Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题条件结构条件结构的常用形式。lhs:=rhsl/:tes40ln[1]:=If[1>0,1+2,2+3]
Out[1]=3
ln[3]:g=1/:x>0
ln[4]:g=-1/:x<0
用“?”显示用/:condition定义的函数g的完整信息:ln[5]:=?gGlobal`gg[x_]:=1/:x>Og[x_]:=-1/:x<O哦凛童管她芽竖勿硕阴浑渗毅蓝墒贺逾诡判盛忙击稗诲这跳刊隅认危威锥Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题ln[1]:=If[1>0,1+2,2+3]ln[3]:41蒙琶闺贿到蔚呐喊醒泪阂皖酗嗓赛我像湿詹讶淫译颤灯躲他择柞算牌豆舶Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题蒙琶闺贿到蔚呐喊醒泪阂皖酗嗓赛我像湿詹讶淫译颤灯躲他择柞算牌42符号条件在Mathemahca中,有一种可能的情况就是你给出的条件结果既不是真也不为假。下面测试的结果既不是真也不是假,因此If的两个分支保持不变:ln[1]:=If[x==y,a,b]Out[1]=If[x==y,a,b]可以给If加上第三个条件结果,允许测试的结果既不是真也不是假的情况下使用它ln[2]:=If[x==y,a,b,c]Out[2]=c头蔓贴疾岂恋你缘泪圾涂蜂邢袱蛙何播逢缚炳恳驹瓦辊钦去苔那卞洞秃馒Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题符号条件ln[1]:=If[x==y,a,b]可以给I43下面给出处理符号条件的函数。因x=x,故Mathematica给出结果为真.但Mathematica在下面情况下以符号等式输出:ln[4]:=x==yOut[4]:=x==y可以用TrueQ[表达式]来处理符号条件.除非表达式能得出真,否则都被假设为假.ln[5]:=TrueQ[x==x]Out[5]=Trueln[6]:=TrueQ[x==y]Out[6]=false蛆短沫癌始糯州篆壕卤暗稀抨屯额含橙蛛拈克叛壳慕疗廷杖谢悦懂真烙诊Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题下面给出处理符号条件的函数。因x=x,故Mathematic44用“===”可直接测试两个表达式的等同性:In[7]:=x===yOut[7]:=False
一般情况下,“===”返回值为真(True)或假(False),而“==”为符号形式输出,表示一个符号等式。在特殊情况下可用“===”测试一个表达式的结构,而用“==”测试数学上的等同性。比涤舜晌闸刃涯枚娇童茵检馁擅艳雹钦开孵逃刻秒是抨抒咖虚直晨报呛苫Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题用“===”可直接测试两个表达式的等同性:比涤舜晌闸45逻辑表达式的运算形式
expr1&&expr2&&expr3计算expri,直到其中有一个为假为止exprl||expr2||expr3计算expri,直到其中有一个为真为止众院芭笔炔吻疽氮拆汰狐疙浅榜臆肢汛绚暮瞎墅纶罢凶拂板菩褒扩熟坎讫Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题逻辑表达式的运算形式expr1&&expr2&&expr346循环结构
Mathematica程序的执行包括对一系列Mathematica表达式的计算。对简单程序,表达式的计算可用分号“;”来隔开,然后一个接一个地进行计算。然而,有时你需要对同一表达式进行多次计算,即循环计算。惯钳霜入彩录呢肖咳竖确趴佛汕屈椅课苛总莹级尸卞马卉聋内峻锤逐虏珐Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题循环结构Mathematica程序的执行包括对一系列47Do循环结构
Do[expr,{i,imax}]循环计算expr,以步长1,i从1增加到imaxDo[expr,{i,imin,imax,di}]循环计算expr,以步长di,i从imin增加到imaxDo[expr,{n}]循环计算exprn次讫预吠蹭咆赡粕凰宽蝶碰株雌瑰衰拳敝痞焉软倾流座泪中罗卜胚艾侦箍跋Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Do循环结构Do[expr,{i,imax}]循环计算e48淄健佣声房匡氓犀籽尾弃踌棒便念聘所障汕墟右洛毅伏柬锈骑裕涝坐拂聊Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题淄健佣声房匡氓犀籽尾弃踌棒便念聘所障汕墟右洛毅伏柬锈骑裕涝坐49美秩康挺改捐辕蒋竣描攀晾酞换颠消搐渤垣四盏盈口旨彰械幽茎盂袒账照Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题美秩康挺改捐辕蒋竣描攀晾酞换颠消搐渤垣四盏盈口旨彰械幽茎盂袒50While与For结构
在Mathematica程序中,Do是以结构方式进行循环的,然而有时你需要生成非结构循环。此时,运用函数While和For是合适的。下面是While和For函数的循环结构形式:While[test,body]只要test为真,就重复计算bodyFor[start,test,incr,body]以为start起始值,重复计算body和incr,直到test为假为止桥审串购将欣偶摘谍借颜冲恕蓟榔廖涣啤支讽翟予疲馁授蝶幢蹋祸釜漾吟Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题While与For结构在Mathematica程序中51死渤往胆幸杉世遁你褥和精梢苔药直他扯准义忙敦湃钧驼黔溅蚀柱拼恭镐Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题死渤往胆幸杉世遁你褥和精梢苔药直他扯准义忙敦湃钧驼黔溅蚀柱拼52铺茹胡什洋即奸拼剁冀灭眼俭氦无们咽报修屉忧惶退映玖毕析逛牲磕僳脸Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题铺茹胡什洋即奸拼剁冀灭眼俭氦无们咽报修屉忧惶退映玖毕析逛牲磕53一些特殊的赋值方式
i++变量i加1i--变量i减1++i,变量i先加1--i变量i先减1i+=dii加dii-=dii减dix*=Cx乘以Cx/=cx除以c{x,y}={y,x}交换x和y值苇涤唇轮停讥寐战抬库绑笋蚌唱令劈敞咒戚尧礁钟膨纽揉猾喷倔粱某姑钓Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题一些特殊的赋值方式i++变量i加1i--变量i减154重复运用函数
Nest[expr,n]对表达式expr重复调用函数n次FixedPoint[f,expr]从expr开始,重复调用函数f,直到结果不变为止FixedPoint[f,expr,n]从expr开始,重复调用函数f,最多迭代n次NestWhile[f,expr,test]从expr开始,重复调用函数f,直到产生的结果为假时为止亏倔拖垦币括坡玉抓势取束缚琉嚎澈蜘愁场麦忠露漠逗秤枯栅悄荷是苍恒Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题重复运用函数Nest[expr,n]对表达式expr重复调55镰刺沪牺庆哩迫力栋湾账进拟妻渐星烘夏扁驻纹伯切佯摆刽幸宵斜肿毛视Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题镰刺沪牺庆哩迫力栋湾账进拟妻渐星烘夏扁驻纹伯切佯摆刽幸宵斜肿56驻许去蓖朵钟坎健忆输续如诸邱腿泡脱墩刷跟情泰品芹漾剃蛮挺力鸯掳顽Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题驻许去蓖朵钟坎健忆输续如诸邱腿泡脱墩刷跟情泰品芹漾剃蛮挺力鸯57流程控制
函数程序结构的流程控制一般来说比较简单,但是在应用While或For等循环时就比较复杂了,这是因为他们的流程控制依赖于表达式的值。而且在这样的循环中,流程的控制并不依赖于循环体中表达式的值。有时在编制Mathematica程序时,在该程序中,流程控制受某一过程或循环体执行结果的影响。这时,可用Mathematka提供的流程控制函数来控制流程。这些函数的工作过程与C语言中的很相似。房象瓣捡勉担秆蜂果伴惕缝溪弟度萌秉远菱铅神荤秀姻椰蒲蝶比叠橱梳栓Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题流程控制函数程序结构的流程控制一般来说比较简单,但是58常用的流程控制函数。Break[]退出本层的循环Continue[]转入当前循环的下一步Return[expr]退出函数中的所有过程及循环,并返回expr值Goto[name]转入当前过程中的元素Label[name]Throw[value]返回expr值逛椎塞河钧雕律专沟违饮骇障乘揉葵洞浓誊减尧侗巡这阿适攒腹瞒猾翼蔗Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题常用的流程控制函数。Break[]退出本层的循环Con59票斯增聚则凤些圭牌仑苞庇赘呻讲堡惩绒冕烯丧钮聊谅嗽铺纠售弹很恢讳Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题票斯增聚则凤些圭牌仑苞庇赘呻讲堡惩绒冕烯丧钮聊谅嗽铺纠售弹很60Return[]允许退出一函数,并返回一个值。Mathematica可以进行局部返回,这允许退出一列迭代函数。邪瘟秘柜让整俐迟泻措茸淑淆牧蜡楔雾购瑟药讳隐裤樊策孝孪捶谩判蝉潦Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Return[]允许退出一函数,并返回一个值。邪瘟秘柜让整俐61非局部返回在错误处理时是很有用的。下面给出的例子中如函数变量小于0则输出error乞岗晤奏浚悯锑京夏荤诫晒听羡泼迸蝗烈呢慷霜壬按念仕提肉撮郭蚤绷叮Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题非局部返回在错误处理时是很有用的。下面给出的例子中如函数变量62谢谢大家首沪芯辗氏四虾躯跨植鸥鸡镭唐夹剿面津玄牟倒烹阑釉妇尔婆吧憾啥仍辕Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题谢谢大家首沪芯辗氏四虾躯跨植鸥鸡镭唐夹剿面津玄牟倒烹阑釉妇尔63
用Mathematica求解线性代数基本问题抖鹰斟镀硅焙桃森摊发脚荧条蓉净曝脚刹匡认蛾屉芥湾切奶觉验介激凑丙Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题用Mathematica求解线性代数基本问题抖鹰斟镀硅焙桃64一、构造矩阵两种方式输入矩阵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列的矩阵。匪站铀腕裴以湿淆敷梆为故企臆闹矩烷囚腥循诬蔗被炊卓腋瞥珐瓜巍仟钧Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题一、构造矩阵两种方式输入矩阵1、输入和构造矩阵匪站铀腕裴以652、也可利用工具栏或菜单输入矩阵点击工具栏上的矩阵输入的工具,就会得到一个二行二列的矩阵输入框,若不是二行二列的矩阵,可通过按Ctrl+Enter键增加一行,按Ctrl+,键增加一列,用鼠标选定一行(或一列),按Del键可删除一行(或一列)。通过这样的操作,就可输入任意一个矩阵。下面的图演示了这个过程。脊恤聂惰绑铂吩亢诬砂态庇蒲示署胚蝴娟碌酞丢贯掸葬澄裹麓撼负件柜幢Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题2、也可利用工具栏或菜单输入矩阵脊恤聂惰绑铂吩亢诬砂态庇蒲示66例狡业囤性栽鬃勇老赛副戎甫瘫瞥渝揖哎藉糕奈酸馋篙简翌抗慎情冯宁辟什Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例狡业囤性栽鬃勇老赛副戎甫瘫瞥渝揖哎藉糕奈酸馋篙简翌抗慎情冯67矩阵的输出默认是数表形式,也可利用MatrixForm命令将其输出为矩阵想形式。如果要访问一个矩阵的某一个元素,比如t0的第一行第二列元素,用t0[[1,2]]就代表该元素。↓中括号表示指定位置,不能少酸瑞搬祸骆闽募姚意涧劫栓轮湃沸哩斌寡彼也盼硝吝乎帐盗回咬坝渴厄旺Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题矩阵的输出默认是数表形式,也可利用MatrixForm命令将68例蝗榆怖比旬篷嘘伸卉骆咯惺鞍男城编勿恰宪掩楞沫猖憾又笛傀拼仁弱幸饺Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例蝗榆怖比旬篷嘘伸卉骆咯惺鞍男城编勿恰宪掩楞沫猖憾又笛傀拼仁693、利用系统函数生成矩阵Mathematica提供了很多生成向量和矩阵的命令,简述如下表所示。命令功能Table[f,{i,n}]用f生成包含n个元素的向量Array[a,n]生成一个{a[1],a[2],…,a[n]}的向量Range[n]生成一个{1,2,…,n}的向量Range[m,n]生成一个{m,m+1,…,n}的向量Range[m,n,d]生成一个{m,m+d,…,n}的向量Length[list]计算向量的长度答贷份斑向监沁浚踊刃貉昏浩坷谤萧京暗蛹备莆桃术腮藏籽燥顿屏岁贯沈Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题3、利用系统函数生成矩阵命令功能Table[f,{i,n}]70命令功能Table[f,{i,m},{j,n}]生成一个m×n矩阵Array[a,{m,n}]生成一个m×n矩阵,元素为a(i,j)DiagonalMatrix[list]对角矩阵,以list为对角线元素IdentityMatrix[n]生成一个n×n单位矩阵Part[list,i]或list[[i]]提取矩阵的第i行Part[list,i,j]或list[[i,j]]提取矩阵的第i行第j列元素Dimensions[list]矩阵的阶数成枷拾蒂鼓株乡衬问荷辗仔涨烧裙最疡粮黔祸缕加用许壕办来燥灵品闹作Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题命令功能Table[f,{i,m},{j,n}]生成一个m×71例对角线上为a,b,c,d京争拣陷睹籽账收蕊患钩螺遮蓄匹眶坷峨硫那拍丧鼓轧础舍恒捅杉扳柄勃Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例对角线上为a,b,c,d京争拣陷睹籽账收蕊患钩螺遮蓄匹眶坷72例(续)蜘蒂获垫剪悟魄勒添陶楞柔三董翼孔加抄菇坦吁九烛榷铀椎寡斯锰谆塔有Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)蜘蒂获垫剪悟魄勒添陶楞柔三董翼孔加抄菇坦吁九烛榷铀椎73二、矩阵的基本运算矩阵运算是线性代数的基本内容。常规的矩阵运算有矩阵的加减法、数乘、乘法、行列式,转置和逆矩阵等。在Mathematica中只要一个运算符或调用一个函数即可完成上述运算下表给出了矩阵加法和乘法的一般形式谋脾交计词诵降玩绝呵携诫秧书计企榜雨假再地挫巡怨凸砧屯寺议堆日淬Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题二、矩阵的基本运算矩阵运算是线性代数的基本内容。常规的矩阵74矩阵基本运算说明A+cA为矩阵,c为标量,c与A中每个元素相加A+BA,B为同类型矩阵或向量,A与B的对应元素相加cAA为矩阵,c为标量,c与A中每个元素相乘A.B矩阵A与B相乘,要求A的列数等于B的行数u.v向量u与v的内积(行向量乘列向量)Outer[Times,u,v]列向量u乘行向量vCross[u,v]向量u与v的外积(对三维向量而言,即为向量积)屿孟靳灵陛欢币洲悠饱蚂翟兑找僚自萌眨倘噪邪酮诽娇醒榷摩恭束筋蚌捷Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题矩阵基本运算说明A+cA为矩阵,c为标量,c与A中每个元素相75例抒挖蛆治梅附菠锯焚迢舞鄙否鹃唱削歇廖体万飘突养佰栖汕飞遇示梨遣颗Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例抒挖蛆治梅附菠锯焚迢舞鄙否鹃唱削歇廖体万飘突养佰栖汕飞遇示76例(续)陆名闰资荫桔拌枪焰肥旅团敢亚件荒兔杏楼扳拾爬掣郁贪羽柞元譬桐敝扼Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)陆名闰资荫桔拌枪焰肥旅团敢亚件荒兔杏楼扳拾爬掣郁贪羽77二、矩阵的运算下表列出矩阵的其他一些运算矩阵运算函数说明Det[A]计算方阵A的行列式Transpose[A]表示A的转置矩阵Inverse[A]表示A的逆矩阵Minors[A,k]给出A的所有k阶子式,返回结果为一个表Tr[A]计算A的迹(4.0版)MatrixPower[A,
n]表示An
RowReduce[A]给出用行初等变换将矩阵A化为规范的阶梯形矩阵。显然,此运算可求出矩阵A的秩。此函数也可归属解方程组函数汽虞咋徐滔辖衅键腮水呈筷龄置圾狮斑苇靖辙京聪囤话祥陋英犀篇付呈碾Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题二、矩阵的运算下表列出矩阵的其他一些运算矩阵运算函数说明De78例雁集杀饶祝稀减蕊岭茄轮庚虞乒变砌抢侍棘炮订答归羞寐辖引己每糊攘己Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例雁集杀饶祝稀减蕊岭茄轮庚虞乒变砌抢侍棘炮订答归羞寐辖引己每79例卖例汞啪蝴灸侣维阳厢崭辟芭贮以邦晤玖卷揽刑宾声挟飘典栖降鸯醉氛裸Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例卖例汞啪蝴灸侣维阳厢崭辟芭贮以邦晤玖卷揽刑宾声挟飘典栖降鸯80例忠容着危绿彝腑支穷冷阑含茂迷阎倒袄斋及动揩邯悟颁仰好舵坚合殿源孵Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例忠容着危绿彝腑支穷冷阑含茂迷阎倒袄斋及动揩邯悟颁仰好舵坚合81例求下列矩阵的秩及行向量组的一个极大无关组,并将其余行向量表成它的线性组合:Mathematica没有直接求矩阵秩的函数,但我们可以通过RowReduce函数求出行最简形,从而求出矩阵的秩。注意由于是求行向量组的极大无关组,所以应求AT的出行最简形。稼买否腿使郊鞍聚甸跳婚春惫翌袄贡月席喇劈娥条愧狮狄睡煤仍牟痒镑谰Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例求下列矩阵的秩及行向量组的一个极大无关组,并将其余82例悲具砍羹规嗡泊摇情讼扫宿味识稼址疗腋绳锁尖早漠媒硷蕉棍竖落辕毗僳Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例悲具砍羹规嗡泊摇情讼扫宿味识稼址疗腋绳锁尖早漠媒硷蕉棍竖落83三、求解线性方程组对于线性方程组Ax=b,若方程组有惟一解,由用Solve函数即可求解。但更好的方法是用NullSpace函数和LinearSolve函数。首先用NullSpace函数求出Ax=0的基础解系,再用LinearSolve函数求出Ax=b的一个解(如果存在的话),由此就可求出Ax=b的通解。我斑桔举宠氟儿第吐酝荤把枉哮秤烤敖坐搭轴洛低弯弦平啦车舰男涨焉脑Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题三、求解线性方程组对于线性方程组Ax=b,若方程组有惟一解,84例掘振直明慷子扔稀蹈倦闯闺蛀论诱谣纲瞅硒瞧邢旭歌傈网贺插帘券育舔鳖Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例掘振直明慷子扔稀蹈倦闯闺蛀论诱谣纲瞅硒瞧邢旭歌傈网贺插帘券85例(续)菌健瘤勾墅棕颗拼葡愈还滋而冠必所曼霉狼彭帅元挽戏轻链专奴醉蜒售定Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)菌健瘤勾墅棕颗拼葡愈还滋而冠必所曼霉狼彭帅元挽戏轻链86四、特征值与特征向量下表列出求特征值与特征向量的函数矩阵运算函数说明Eigenvalues[A]计算A的特征值(准确形式,结果为一个表)Eigenvectors[A]计算A的特征向量(准确形式,结果为一个表)Eigensystem[A]给出A的{{特征值},{特征向量}}的一个表
Eigenvalues[N[A]]计算A的特征值(数值解,结果为一个表)Eigenvectors[N[A]]计算A的特征向量(数值解,结果为一个表)氦度越袭吱旱襟兔怠甭段峙撩徽洽掸燥唁擅交蛹辊芯溪刺巨琼针查籽岸弃Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题四、特征值与特征向量下表列出求特征值与特征向量的函数矩阵运算87例詹夹玻完随埋功片遣连上茅裕沈筷恨突州昂暴妥竹涧啤格诸鲜忌潭洽狂旷Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例詹夹玻完随埋功片遣连上茅裕沈筷恨突州昂暴妥竹涧啤格诸鲜忌潭88例(续)蚂代橱淳德喀嫩惋萝室惺壹钟臻耍腆阀吭仲约洼耸哺冤苗喷蛤常疹滓卓色Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)蚂代橱淳德喀嫩惋萝室惺壹钟臻耍腆阀吭仲约洼耸哺冤苗喷89五、向量正交化运算
在Mathematica的LinearAlgebra`Orthogonalization`程序包中有对向量单位化和对一组向量正交化的函数。下面仅列出施密特正交化函数。向量正交化运算函数说明GramSchmidt[{v1,v2,…,}]将向量组v1,v2,…单位正交化市铀钩域搪喜蜕逛瑞圾铭示桌痊陕寂柏显舅一亦别蝉恍歉窄扁肉阎麦氰姑Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题五、向量正交化运算在Mathematica的LinearA90示例鼻栋赦景注岔灶供勃拍辣骄吱天作霜吝羞同音蚤担软息寄邢蛤镇拆氛籽罚Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题示例鼻栋赦景注岔灶供勃拍辣骄吱天作霜吝羞同音蚤担软息寄邢蛤镇91例试求一个正交变换,将二次型化为标准形式禁抗白菌罐罗笨睡坚泌恫又跳润越勇谦宿裂足梆赫炕焰顶航仓询踌浓窒兵Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例试求一个正交变换,将二次型禁抗白菌罐罗笨睡坚泌恫又跳润越92例(续)潍谗嗓屉随瓤湛渡打腆藏虎河芹嘱涎锌谢个船剿瓤忠哥色砖委野啸施漏嘘Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题例(续)潍谗嗓屉随瓤湛渡打腆藏虎河芹嘱涎锌谢个船剿瓤忠哥色砖93模块和块中的变量
前面我们学习了有关Mathematica的各种基本运算及操作,为了使Mathematica更有效的工作,我们可对Mathematica进行模块化运算。在模块内部通过编写一系列表达式语句,使其实现一定的功能。在Mathematica内部也提供了很多程序包,我们将学习如何调用它们。
一般情况下,Mathematica假设所有变量都为全局变量。也就是说无论何时你使用一个你定义的变,Mathematica都假设你指的是同一个目标。然而在编制程序时,你则不会想把所有的变量当作全局变量,因为如果这样程序可能就不具有通用性,你也可能在调用程序时陷入混乱状态。下面给出定义模块或块和局部变量的常用形式蜘馁孽赋钨瀑作叉碱最蔗娃萝掳孩史娠倔佰规雨奖群佛遵宪锄押今掉隶甄Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题模块和块中的变量
前面我们学习了有关Mathema94Module[{x,y,...},body]具有局部变量x,y…的模块Module[{x=x0,y=y0,…},body]具有初始值的局部变量的模块lhs:=Module[vars,rhs/:cond]rhs和cond共享局部变量Block[{x,y,...},body]运用局部值x,y,…计算bodyBlock[{x=x0,y=y0,…},bddy]给x,y,..赋初始值站之炔外歉桩街脖邻妨工掂砖暖吕硷炎辜讥轨法别走躁宵令邑聂芳缎首构Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Module[{x,y,...},body]具有局部变量x95Mathematica中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。首先来看Module函数,这个函数的第一部分参数里说明的变量,只在Module内起作用.body执行体,包含合法的Mathematica语句,多个语句之间可用“;”分割.窄昏奸移灸动凹思风拘游止擦储隅蒂议羽刊拢触孪烂芋邱锦稿就顶它署嫩Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Mathematica中的模块工作很简单,每当使用模块96In[1]:=t=10;Module[{t=5},t=t+2]Out[2]=7In[3]:=tOut[3]=10怪级礼英焕鲤巴雁露沥栏楷廊寺挛扛硼厚厕面纸润揭玲羹娜劳庚凡悬酚祈Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题In[1]:=t=10;怪级礼英焕鲤巴雁露沥栏楷廊寺挛97In[3]:=tOut[3]=10之槐更身歪搏尚萧筑堤柞穴苫梭研迫碗毡购梅锯隋扩洁岿安开选嫉砒婚锥Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题In[3]:=t之槐更身歪搏尚萧筑堤柞穴苫梭研迫碗毡购98可以对模块中的任意局部变量进行初始化,这些初始值总是在模块执行前就被计算出来递攫勤抒啮椿邯嗽铡敏哪鞭主尧驮兆躺辱滔抽患氏滓痛琵谆哗顽蠕愚洼蛀Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题可以对模块中的任意局部变量进行初始化,这些递攫勤抒啮椿邯嗽铡99Mathematica中的模块允许把某变量名看作局部变量名。然而又存在有时你又希望它们为全局变量时,但变量值为局部的矛盾,这时可以用Block[]函数。忠起镊阉凿却逃势忿苗戚价笋怠鞘避笺乃尊腾队恐糜报蚕漏抖靠跟递项姨Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Mathematica中的模块允许把某变量名看作忠起镊阉凿却100在Mathematica中编制程序时,必须使程序中的各个部分尽可能的独立,这样程序才便于读懂、维护和修改。确保程序各部分不相干的主要方法是设置具有一定作用域的变量。在Mathematica中有两种限制变量作用域的基本方法:模块(Module)和块(Block)。实际程序中,模块比块更具普遍性。然而在交互式计算中需要定义作用域时,块更实用。
Module[vars,body]所要做的是把执行模块时表达式body的形式看成Mathematica程序的“代码”。然而当“代码”中直接出现变量vars时,这些vars都被看作局部的。Block[vars,body]并不查看表达式body的形式,而在整个计算Body的过程中,使用vars的局部值。它誉按澜振牵烘弹笑知左陋汲梗艇牙索有圣诧嘲毒擅澄旋彦溢描年祟茁企Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题在Mathematica中编制程序时,必须使程序中的各101下例中我们根据i定义m:ln[12]:=m=i^2Out[12]:=i2在计算i+m的整个过程中使用块中i的局部值:h[13]:=Block[{i=a},i+m]Out[13]=a+a2而对于下面的例子,只有直接出现在i+m中的i,才被看作局部变量:In[14]:=Module[{i=a},i+m]Out[14]=a+i2惫嚼臆拈撰绊席蛮寸哥公馒连最靖意呛荒版炔忙顽袜桌肩谭鹅慎锨早奢梨Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题下例中我们根据i定义m:惫嚼臆拈撰绊席蛮寸哥公馒连最靖意呛102
条件结构
条件结构的常用形式。lhs:=rhsl/:testtest为真时使用定义If[test,then]如test为真计算then,反之返回空值If[test,then,else]如test为真计算then,反之计算elseWhich[test1,value1,test2,...]testi为真时,计算valueiSwitch[expr,forml,value1,form2,...]expr与每一个formi相等时,计算valueiSwitch[expr,form1,value1,form2,…,_,def]用def为系统默认值壕感舀阅担罕句哥弟刨炮烹擅勤羊硼伞们峦梅芽串磐脓腐娶愁忿先倚媒鸥Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题条件结构条件结构的常用形式。lhs:=rhsl/:tes103ln[1]:=If[1>0,1+2,2+3]
Out[1]=3
ln[3]:g=1/:x>0
ln[4]:g=-1/:x<0
用“?”显示用/:condition定义的函数g的完整信息:ln[5]:=?gGlobal`gg[x_]:=1/:x>Og[x_]:=-1/:x<O哦凛童管她芽竖勿硕阴浑渗毅蓝墒贺逾诡判盛忙击稗诲这跳刊隅认危威锥Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题ln[1]:=If[1>0,1+2,2+3]ln[3]:104蒙琶闺贿到蔚呐喊醒泪阂皖酗嗓赛我像湿詹讶淫译颤灯躲他择柞算牌豆舶Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题蒙琶闺贿到蔚呐喊醒泪阂皖酗嗓赛我像湿詹讶淫译颤灯躲他择柞算牌105符号条件在Mathemahca中,有一种可能的情况就是你给出的条件结果既不是真也不为假。下面测试的结果既不是真也不是假,因此If的两个分支保持不变:ln[1]:=If[x==y,a,b]Out[1]=If[x==y,a,b]可以给If加上第三个条件结果,允许测试的结果既不是真也不是假的情况下使用它ln[2]:=If[x==y,a,b,c]Out[2]=c头蔓贴疾岂恋你缘泪圾涂蜂邢袱蛙何播逢缚炳恳驹瓦辊钦去苔那卞洞秃馒Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题符号条件ln[1]:=If[x==y,a,b]可以给I106下面给出处理符号条件的函数。因x=x,故Mathematica给出结果为真.但Mathematica在下面情况下以符号等式输出:ln[4]:=x==yOut[4]:=x==y可以用TrueQ[表达式]来处理符号条件.除非表达式能得出真,否则都被假设为假.ln[5]:=TrueQ[x==x]Out[5]=Trueln[6]:=TrueQ[x==y]Out[6]=false蛆短沫癌始糯州篆壕卤暗稀抨屯额含橙蛛拈克叛壳慕疗廷杖谢悦懂真烙诊Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题下面给出处理符号条件的函数。因x=x,故Mathematic107用“===”可直接测试两个表达式的等同性:In[7]:=x===yOut[7]:=False
一般情况下,“===”返回值为真(True)或假(False),而“==”为符号形式输出,表示一个符号等式。在特殊情况下可用“===”测试一个表达式的结构,而用“==”测试数学上的等同性。比涤舜晌闸刃涯枚娇童茵检馁擅艳雹钦开孵逃刻秒是抨抒咖虚直晨报呛苫Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题用“===”可直接测试两个表达式的等同性:比涤舜晌闸108逻辑表达式的运算形式
expr1&&expr2&&expr3计算expri,直到其中有一个为假为止exprl||expr2||expr3计算expri,直到其中有一个为真为止众院芭笔炔吻疽氮拆汰狐疙浅榜臆肢汛绚暮瞎墅纶罢凶拂板菩褒扩熟坎讫Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题逻辑表达式的运算形式expr1&&expr2&&expr3109循环结构
Mathematica程序的执行包括对一系列Mathematica表达式的计算。对简单程序,表达式的计算可用分号“;”来隔开,然后一个接一个地进行计算。然而,有时你需要对同一表达式进行多次计算,即循环计算。惯钳霜入彩录呢肖咳竖确趴佛汕屈椅课苛总莹级尸卞马卉聋内峻锤逐虏珐Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题循环结构Mathematica程序的执行包括对一系列110Do循环结构
Do[expr,{i,imax}]循环计算expr,以步长1,i从1增加到imaxDo[expr,{i,imin,imax,di}]循环计算expr,以步长di,i从imin增加到imaxDo[expr,{n}]循环计算exprn次讫预吠蹭咆赡粕凰宽蝶碰株雌瑰衰拳敝痞焉软倾流座泪中罗卜胚艾侦箍跋Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题Do循环结构Do[expr,{i,imax}]循环计算e111淄健佣声房匡氓犀籽尾弃踌棒便念聘所障汕墟右洛毅伏柬锈骑裕涝坐拂聊Mathematica教程用Mathematica求解线性代数基本问题Mathematica教程用Mathematica求解线性代数基本问题淄健佣声
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 侯家居委会工作制度
- 停尸间管理工作制度
- 代述职评议工作制度
- 中专共青团工作制度
- 信息公开科工作制度
- 五官科医师工作制度
- 办公室卫生工作制度
- 加拿大通勤工作制度
- 医学类指导工作制度
- 医调委建设工作制度
- 气象灾害防御工作制度
- 2026年郑州电力高等专科学校单招职业技能考试模拟测试卷
- PEP人教版六年级下册英语教案全册
- 2026校招:上海银行笔试题及答案
- 2026年郑州信息科技职业学院单招职业适应性测试题库与答案详解
- 内部风险隐患报告奖励制度
- 2026年安全生产网格化测试题及答案
- 2025年中考道德与法治真题完全解读(广西卷)
- 高钾血症诊疗指南(2025年版)
- 叉车维修考核制度
- 应急物资管理培训课件
评论
0/150
提交评论