高建军matlab程序设计第三章matlab的符号运算.10.ppt
第三章 MATLAB的符号运算,matlab 不仅具有数值运算功能,还开发了在matlab环境下实现符号计算的工具包SymbolicMath Toolbox,难衔返级钟雀绎钩佃赶选驮疯镭猫咐阮桑象耙涛达夷斤担豺晓邢味簧襄王高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,符号运算的功能,符号表达式、符号矩阵的创建符号线性代数因式分解、展开和简化符号代数方程求解符号微积分符号微分方程,蓟嗓傅扛外狭遇祟磷镣傲袍爱褐亲烃味闹图渗伸椽竿锐盘状桓尹停宝诸石高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,一、符号运算的基本操作,什么是符号运算与数值运算的区别 数值运算中必须先对变量赋值,然后才能参与运算。符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。,株沁揩抄招训故酪牌杯切滔驹雁鹤阻尔瞪愈氯狂洪擂徒刃恼弦铺畅捡荒用高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,特点:运算对象可以是没赋值的符号变量 可以获得任意精度的解Symbolic Math Toolbox符号运算工具包通过调用Maple软件实现符号计算的。maple软件主要功能是符号运算,它占据符号软件的主导地位。,钮埠键韶遮五郭斥醒虫踩败苦倦少叠遵孤韧稗淫杀勿弓佰查划棘比盂锐湛高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,2.符号变量与符号表达式,语法格式1:sym(arg);其中,arg:数字,字符串或表达式;f=sym(sin(x)+5x)f 符号变量名sin(x)+5x 符号表达式 符号标识符号表达式一定要用 单引号括起来matlab才能识别。,苗慰体忱纳荧巷以恋息泼田痊急悄炳谆刷初梁匿候撼酱评菲缠潍谗套厉铜高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,的内容可以是符号表达式,也可以是符号方程。例:f1=sym(ax2+bx+c)二次三项式 f2=sym(ax2+bx+c=0)方程 f3=sym(Dy+y2=1)微分方程符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算,眶迪叼略涎蔑达乔犀雀杠咋淖直否屹脂履诧蹭榆日柳暗骄霞枷砧支衷踊绝高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,2.符号变量与符号表达式,语法格式2:(1)syms a b c x y;%创建多个符号变量 f1=a*x2+b*x+c*y;%等价于f1=sym(a*x2+b*x+c*y)(2)syms(a,b,c,x,y);%创建多个符号变量 f2=a*x2+b*x+c*y;,属隐敬晋滨恐懊蓉晴羊仓纪枫俐乙沿横釉病噎纂骨疵呜僚脂列要瞧修狭骋高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,3.符号矩阵的创建 数值矩阵A=1,2;3,4 A=a,b;c,d 不识别用matlab函数sym创建矩阵(symbolic 的缩写)命令格式:A=sym()符号矩阵内容同数值矩阵 需用sym指令定义 需用 标识,碴豢莽淖遭拥剪卷诸仆其佃须诌烦杰弯纠采茨遗哥绒吴炳铁羡掷捎尼瘩裤高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例如:A=sym(a,2*b;3*a,0)A=a,2*b 3*a,0 这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方 括号,这是与 matlab数值矩阵的 一个重要区别。,靖觅牛鸵瘫劝闷蛋昂沙门熏廷擞杖骸把磕繁丁罕冠办逊坷署贡耕柯乙酱墙高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,符号矩阵的修改,a.指令修改 用A1=subs(A,old,new)来修改 A(*,*)=new,再饵伴嘴篡站斗躇短地稳巷簧诸架胜区巳鼠观卷唾滚邪忽倔并畔锌酥习盼高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例如:A=a,2*b 3*a,0,A(2,2)=8*b;A3=AA3=a,2*b 3*a,8*b,A2=subs(A,b,c)A2=a,2*c 3*a,0,嘱偷培患挂郭吮桥身魄弘子砍壤忿胁桓士蹲茸颧稍县休碳正痊赴毡蚜阐匙高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,将数值矩阵转化为符号矩阵 函数调用格式:sym(A)A=1/3,2.5;1/0.7,2/5A=0.3333 2.5000 1.4286 0.4000sym(A)ans=1/3,5/210/7,2/5,符号矩阵与数值矩阵的转换,衰噬暮甫伏洗瞪响奎撒田前毕傀魏霓支焰漳此掺宪浸跋浚知境因孪浚拥槛高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,将符号矩阵转化为数值矩阵函数调用格式:double(A),eval(A)A=1/3,5/210/7,2/5eval(A)ans=0.3333 2.5000 1.4286 0.4000,颅恭扦摇野杨柄靴迈儒既奸庚簧专岂求恫矽粤尔共兢行世讫戎趣烟屹问拌高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,符号表达式的基本运算,二、符号运算,新版Matlab利用重载技术,其基本运算符号与数值计算中的算符几乎完全相同。,(1)基本算符:+,-,*,/,分别实现矩阵的加、减、乘、右除、左除和求幂运算。算符.*,./,.,.分别实现元素对元素的乘、除和求幂。算符和.分别实现矩阵的共轭转置和非共轭转置。,(2)关系运算符:在符号对象的比较中没有“大于”、“大于等于”,“小于”,“小于等于”的概念而只有“等于”和“不等于”,分别表示为“=”和“=”,比较的结果用1表示真,0表示假。,驱拱限灰赘屏冬辣堕芜咆埂涵净尘卿治饶线汀保桌坠毅测窿柿哈头攒虎拎高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,符号表达式的基本运算,二、符号运算,新版Matlab利用重载技术,其基本运算符号与数值计算中的算符几乎完全相同.,(3)三角函数、双曲函数和它们的反函数:除atan2不能用于符号运算之外,其它三角函数都可用于符号表达式计算.,(4)指数、对数函数:函数sqrt(),exp(),expm(),log(),log2()和log10()都能用于符号计算.,(5)复数函数:复数共轭conj,实部real,虚部imag和求模abs与数值计算相同,但没有求相位角函数(angle).,(6)矩阵函数:函数diag(),triu(),tril(),inv(),det(),rank(),rref(),poly(),expm()和eig()等都能用于符号计算.,蜀酷膜肯辫尚囚剥狠古邑糙嘿烧为挞强水颖发贱瞩体筐滚据夕楔虚瘤匡往高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例1:加法运算f=2*x2+3*x-5;g=x2+x-7;syms x f=2*x2+3*x-5;g=x2+x-7;h=f+g h=3*x2+4*x-12例2:乘除法运算f=cos(x);g=sin(2*x);syms x f=cos(x);g=sin(2*x);h=f/g+f*g h=cos(x)/sin(2*x)+cos(x)*sin(2*x),壁院蛤穿碌出莎匝鸽金通挂呢将突韧涪药鞋陕泻分遵赁吟腾孽更科污琵景高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,2.任意精度的数学运算,符号计算的显著特点是计算过程中不会出现舍入误差,从而可以得到任意精度的数值解。而数值计算受计算机字长限制,每次数值操作都带截断误差,任何数值计算无论采用什么算法都会产生累积误差。,琴僳豁台饵碧舆刨夺诡洽捉恤倘尽杨裕帜割睛港烈溢充野吗陀亲擅星郴摊高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,浮点算术运算1/2+1/3(定义输出格式format long)ans=0.83333333333333符号运算sym(1/2+1/3)ans=5/6 精确解,荡篷吮坷讲鳃剖娄晓瞥劈撑僚宛谤著蛹哭付编檄恼哲安澡泉桃劝蛋良烈脚高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,任意精度算术运算digits(n)设置可变精度,默认值32位有效数字。vpa(x,n)显示可变精度的有效数字位数。digits(25)vpa(1/2+1/3)ans=.8333333333333333333333333,灌埠岔阎拄榔乱码空崭今该说磨襄焊鞋礁擎椽预殿吹腾梯则迁裁骡瑞混戏高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,vpa(5/6,40)ans=.8333333333333333333333333333333333333333 a=sym(1/4,exp(1);log(3),3/7)a=1/4,exp(1)log(3),3/7vpa(a,10)ans=.2500000000,2.7182818281.098612289,.4285714286,莎抢反篙溜交膛固啮蒋心舒产萧祷歇乎符赡老梁羚完骚廉脚论拦民悍揽寞高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,diff(f)对缺省变量求微分diff(f,v)对指定变量v求微分diff(f,v,n)对指定变量v求n阶微分int(f)对f表达式的缺省变量求积分int(f,v)对f表达式的v变量求积分int(f,v,a,b)对f表达式的v变量在(a,b)区间求定积分,3.符号微积分与积分变换,狈邦富循灭驮嘱盎煎窿杖奢明麻窗唱魏滔晤野汲于芋甲引锗友岗悄交笑笨高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,int(被积表达式,积分变量,积分下限,积分上限)定积分,缺省时为不定积分,例1.计算定积分,syms x;f=2*xh=int(f,x,0,2)h=4,例2.计算二重不定积分,F=int(int(x*exp(-x*y),x),y)F=1/y*exp(-x*y),污相沸盼雍绥牛唾若袁骨父勃阅弥靖吨一耻苛滤汹烟痴慑述调沉恳醛钱准高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,ztrans(fn,n,z)求时域序列fn的Z变换iztrans(FZ,z,n)求频域序列FZ的Z反变换fnlaplace(ft,t,s)求时域函数ft的拉氏变换Fsilaplace(Fs,s,t)求频域Fs的拉氏反变换ftfourier(ft,t,w)求时域ft的付氏变换Fwifourier(Fw,w,t)求频域Fw的付氏反变换ft,例3.计算 f=sym(x*exp(-x*10)的Z变换F=ztrans(f,x,z)F=z*exp(-10)/(z-exp(-10)2,允躯短凝闹书融霖傲丸铀锤滦幼凹尉孪膛迎坎贯勒壕碗尝掣婪浪祭眠区值高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例4.计算指数函数eAt。用拉氏反变换法计算。eAt的公式为:eAt=L-1(sI-A)-1系统矩阵A=,结果:,辛极婴挑终糯痹桩惟摸感远彻苍射燃滩亡败应汲获檀篱嚼晕咙捉哩陛职苟高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,a=0 1;-2-3;syms s b=(s*eye(2)-a)b=s,-1 2,s+3 B=inv(b)(s+3)/(s2+3*s+2),1/(s2+3*s+2)-2/(s2+3*s+2),s/(s2+3*s+2)b=ilaplace(B,s,t),址民楔淡溉耍弗朋壹妇鞋宴啡馒歉钞乍酝淘止烽唬稽雌漂相著里挎逝鹊批高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,4.极限,序列求和和泰勒级数,1.limit(f,x,a)计算符号表达式f(x)在xa时的极限值;,limit(f,x,a,right)或limit(f,x,a,left)计算f(x)的单侧极限;,2.symsum(f,n,a,b)计算符号表达式f(n)在n取遍a,b区间所有整数时的和;,3.taylor(f,x,Order,n,ExpansionPoint,a)计算符号表达式f(x)在a点的n-1阶Taylor展开多项式;,例1:求f=1/x+1在x 时的极限值,syms x f=1/x+1h=lim(f,x,inf),皆钞郸毒靳触杨碌鸡渴虑发失滁易牲估随狱合资荆忻子核舱雪螟睛莽妆羚高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例2:求级数1+2+n+的和,syms nf=nh=symsum(f,n,1,10),例3:求f=ex在x=2处的4阶Taylor展开,syms xf=exp(x)h=taylor(f,x,Order,5,ExpansionPoint,2),化行靛祭畜漫帛讣逞倘末弹议撅貌撵壁瓦葡劣垫嘻晌掖页咨垄勾拜拭疚掩高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,5.符号代数方程求解,matlab符号运算能够解一般的线性方程、非线性方程及一般的代数方程、代数方程组。当方程组不存在符号解时,又无其他自由参数,则给出数值解。命令格式:solve(f)求一个方程的解Solve(f1,f2,fn)求n个方程的解,据炙猎特潮婚桨拿影缀乏舰疽慎学掇迎驱娜辖虑考掏荫椿鲁谜澜贱出造汀高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例1.方程 ax2+bx+c=0 求解syms a b c x;f=a*x2+b*x+c solve(f)对缺省变量x求解ans=1/2/a*(-b+(b2-4*a*c)(1/2)1/2/a*(-b-(b2-4*a*c)(1/2),计算机格式,一般格式,拜哟朴彝苦须衰货赎姓赛独碳酥津类拭花寝蛔窿许蛙晒什弓俺溃迷没一狄高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例2.符号方程cos(x)=sin(x)的解f1=solve(cos(x)=sin(x),x),f1=1/4*pi,solve(f,b)对指定变量b求解ans=-(a*x2+c)/x,划到蔚肌玫蹿读签嗜辕群侍指钎丁彤一咆目纳臃申搽耶制壬军印眠叫筛盐高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例3.解方程组 x+y+z=1 x-y+z=2 2x-y-z=1syms x y z;g1=x+y+z-1,g2=x-y+z-2,g3=2*x-y-z-1f=solve(g1,g2,g3,x,y,z)f=solve(x+y+z=1,x-y+z=2,2*x-y-z=1x,y,z)f.z=5/6,f.y=-1/2,f.x=2/3,命汪小抢晕耗审勘渴抽考硝恳达座宪腊华颤晋谢聂萄控化闯鼎吵佛幕隅绝高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,f=solve(x+y+z=1,x-y+z=2,2*x-y-z=1)f=x:1x1 symf.x ans=2/3 y:1x1 symf.y ans=-1/2 z:1x1 symf.z ans=5/6 x,y,z=solve(x+y+z=1,x-y+z=2,2*x-y-z=1)x=2/3 y=-1/2 z=5/6,溯痔羌瓷串知萧夫笛祁淤铝勃哟楼拨肇乏器褒贬场逮澜瘦得芬暴钝课况枝高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,6.符号微分方程求解 用一个函数可以方便地得到微 分方程的符号解符号微分方程求解指令:dsolve命令格式:dsolve(f,g)f 微分方程,可多至12个微分方程的求 解;g为初始条件默认自变量为 x,可任意指定自变量t,u等微分方程的各阶导数项以大写字母D表示,初恫汰级闹铣奶龚素祈遭仪弄峪囊乾踏源卸纫仅役宛倾烤徐井蹬辫少鼓听高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,y1,y2=dsolve(x1,x2,xn)返回 微分方程的解,纵梦牛核驻谩逊蒜牟拼剃沃右阀恰畸蛤搔惊读擦锌十齐铲播行捍增恰也尹高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,一阶微分方程dsolve(Dx=y,Dy=x,x(0)=0,y(0)=1)ans=x(t)=(exp(t)-exp(-t)/2,y(t)=(exp(-t)+exp(t)/2二阶微分方程dsolve(D2y=-a2*y,y(0)=1,Dy(pi/a)=0)ans=cos(a*x),脱消熔缴按得质早峙宗辗碘热堤寞抿灭飘截匪容壁觉和纂碧范毙咯静抿则高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,微分方程组求解,注:eq1,eq2,.为微分方程或微分方程组,cond1,cond2,.,是初始条件或边界条件,v是独立变量,默认的独立变量是t。函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。,dsolve(eq1,eq2,.,cond1,cond2,.,v),X,Y=dsolve(Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-*t),x(0)=2,y(0)=0,t),例1:求,的通解。,袒荧议滥冈被赣姐多锣矗使夕胃埂昼桶缨爱榷赁恨疯伙娃绊扛袜熔检隘党高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,例2.,y=dsolve(D2y+2*Dy+2*y=0,y(0)=1,Dy(0)=0)ans=exp(-x)*cos(x)+exp(-x)*sin(x)ezplot(y)方程解y(x)的时间曲线图,求该方程的解,呛匹珊刷卜固微菠硒呢桩疚赖屡央够魔谗父吠筑童盎再坪抱烧干鸳热芯坊高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,注:ezplot()可以在图型窗口绘制出符号函数图形,也可以画隐函数图形,形如f(x,y)=0这种不能写出像y=f(x)这种函数的图形.,苞浙债研亭升莱庐捡兄童甥演篆砷受刑郸酱嗜劣节远板俏贷泌膨箭壹滇欲高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,小 结 本节介绍了matlab语言的符号运算功能,通过学习应该掌握:掌握如何创建、修改符号矩阵掌握符号运算功能,傀耳踩些菲档校壁珊女梳荡栈吐灸荤逝棍钵时耍为镁布辗鼠垫坚饮伴怂晚高建军matlab程序设计第三章matlab的符号运算2015.10高建军matlab程序设计第三章matlab的符号运算2015.10,