二讲Matlab符号计算12.ppt
《二讲Matlab符号计算12.ppt》由会员分享,可在线阅读,更多相关《二讲Matlab符号计算12.ppt(127页珍藏版)》请在三一文库上搜索。
1、第二讲 Matlab 符号计算,参考文献:,MATLAB程序设计教程,李海涛,邓樱 编著,高等教育出版社,2002,所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。,Matlab本身并没有符号计算功能, MathWorks公司于1993年购买了著名的符号数学软件Maple的使用权,并利用Maple已有的函数库,开发了符号数学工具箱。,符号运算与数值运算的区别:,数值运算中必须先对变量赋值,然后才能参与运算。,符号运算无须事先对独立变量赋值,运算结果以标准的 符号形式表达。,符号计算是精确计算,可以获得任意精度的解; Symbolic Math Toolbox
2、符号运算工具包通过调用Maple软件实现符号计算的。 Maple软件主要功能是符号运算,它占据符号软件的主导地位。,符号运算的特点:,运算对象可以是没赋值的符号变量。符号计算定义在符号变量的基础上,符号表达式计算前必须定义符号变量;,Matlab的符号数学工具箱的主要功能包括:符号表达式的创建、符号矩阵的运算、符号表达式的化简、符号微积分、符号方程(主要指代数方程与常微分方程)的求解、符号函数绘图等。,符号计算的计算速度较慢;,符号计算的运算符和基本数学函数与数值计算中的运算符和基本数学函数几乎完全相同。,一、符号对象的创建,(一) 创建符号变量和表达式,参与符号运算的对象可以是符号变量、符号
3、表达式或符号矩阵。符号变量要先定义,后引用。Matlab提供了两个建立符号变量的函数:sym和syms,两个函数的用法不同。,sym函数,sym函数的主要功能是创建单个符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:,符号量名=sym(符号字符串),符号字符串可以是常量、变量、函数、表达式或方程。,如: f1=ax2+bx+c 二次三项式 f2= ax2+bx+c=0 方程 f3=Dy+y2=1 微分方程,符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算,a=sym(a);b=sym(b);c=sym(c
4、);d=sym(d);%定义4个符号变量 w=10;x=5;y=-8;z=11; %定义4个数值变量 A=a,b;c,d %建立符号矩阵A B=w,x;y,z %建立数值矩阵B det(A) %计算符号矩阵A的行列式 det(B) %计算数值矩阵B的行列式,使用符号变(常)量进行代数运算和数值变(常)量进行的运算是不同的。,例1 考察符号变量和数值变量的差别。,例2 定义一个符号函数 fxy=(a*x2+b*y2)/c2 ,分别求该函数对x、y的导数和对x的积分。,a=sym(a);b=sym(b);c=sym(c); %定义符号变量 x=sym(x); y=sym(y); fxy=(a*x2
5、+b*y2)/c2; %生成符号函数 diff(fxy,x) %符号函数fxy对x求导数 diff(fxy,y) %符号函数fxy对y求导数 int(fxy,x) %符号函数fxy对x求积分,ans = 2*a*x/c2 ans = 2*b*y/c2 ans = 1/c2*(1/3*a*x3+b*y2*x),例3 比较符号常数与数值在代数运算时的差别。,pi1=sym(pi);k1=sym(8);%定义符号变量 k2=sym(2);k3=sym(3); pi2=pi;r1=8;r2=2;r3=3; % 定义数值变量 sin(pi1/3) % 计算符号表达式值 sin(pi2/3) % 计算数值
6、表达式值 sqrt(k1) % 计算符号表达式值 sqrt(r1) % 计算数值表达式值 sqrt(k3+sqrt(k2) % 计算符号表达式值 sqrt(r3+sqrt(r2) % 计算数值表达式值,ans = 1/2*3(1/2) ans = 0.8660 ans = 2*2(1/2) ans = 2.8284 ans = (3+2(1/2)(1/2) ans = 2.1010,符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。,利用单引号来生成;,用sym函数建立;,使用已定义的符号变量组成。,建立符号表达式的方法:,例4 已知一复数表达式 z=x+i*
7、y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。 为了使乘积表达式 x2+y2非负,这里,把变量x和y定义为实数。 x=sym(x,real);y=sym(x,real);,若要去掉x的属性,可以使用下面语句 x = sym(x,unreal) 将x创建为纯格式的符号变量。,z=x+i*y; %定义复数表达式 conj(z); %求共轭复数 expand(z*conj(z) %求表达式与其共轭复数乘积的多项式 ans = x2+y2,syms函数,函数sym一次只能定义一个符号变量,使用不方便。Matlab 提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格
8、式为:,syms 符号变量名1 符号变量名2 符号变量名n,用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。,U=sym(3*x2+5*y+2*x*y+6)%定义符号表达式U syms x y; %建立符号变量x、y V=3*x2+5*y+2*x*y+6 %定义符号表达式V 2*U-V+6 %求符号表达式的值,例5 用两种方法建立符号表达式。,U = 3*x2+5*y+2*x*y+6 V = 3*x2+5*y+2*x*y+6 ans = 3*x2+5*y+2*x*y+12,(二) 符号函数的生成,将表达式中的自变量定义为符号变量后,赋值给符号函数名,即可
9、生成符号函数。例如有一数学表达式:,syms a b c x y %定义符号 fxy=(a*x2+b*y2)/c2 %生成符号函数,其用符号表达式生成符号函数fxy的过程为:,生成符号函数fxy后,即可用于微积分等符号计算。,符号表达式中变量的确定,Matlab 中的符号可以表示符号变量和符号常数。findsym可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式为:,findsym(S,n),函数返回符号表达式S中的n个符号变量,若没有指定n,则返回 S 中的全部符号变量。,在求函数的极限、导数和积分时,如果用户没有明确指定自变量,Matlab将按缺省原则确定自变量并对其进行相应微积
10、分运算。可用findsym(S,1)查找系统的缺省变量。事实上,Matlab 按离字符x最近原则确定缺省变量,例6 查询符号函数 f=xn g=sin(at+b) 中的系统缺省变量。,表示函数 f 中查询的 1 个系统缺省变量为 x。,syms a b n t x %定义符号变量 f=xn; %给定符号函数 g=sin(a*t+b); findsym(f,1) %在f函数中查询1个系统缺省变量 ans= x,(三) 符号矩阵的创建,符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。,用字符串直接创建符
11、号矩阵,例7 A = a,2*b; 3*a, 0 A = a, 2*b 3*a, 0,模仿matlab数值矩阵的创建方法; 每一行都要用方括号括起来; 需保证同一列中各行元素字符串有相同的长度(较短的字符串要用空格补齐长度)。,用sym函数创建符号矩阵,命令格式:A=sym( ),符号矩阵内容同数值矩阵:矩阵元素可以是任何不带等号的符号表达式,各矩阵元素之间用逗号或空格分隔,各行之间用分号分隔,各元素字符串的长度可以不相等; 需用sym函数定义; 需用 标识。,例8 A = sym(a , 2*b ; 3*a , 0) A = a, 2*b 3*a, 0,注意:符号矩阵的每一行的两端都有方括号
12、,这是与 Matlab数值矩阵的一个重要区别。,将数值矩阵转化为符号矩阵,A=1/3,2.5;1/0.7,2/5 A = 0.3333 2.5000 1.4286 0.4000 sym(A) ans = 1/3, 5/2 10/7, 2/5,函数调用格式:sym(A),例9,A =sym(1/3,5/2;10/7,2/5) eval(A),将符号矩阵转化为数值矩阵,函数调用格式: eval(A),A = 1/3, 5/2 10/7, 2/5 ans = 0.3333 2.5000 1.4286 0.4000,例10,numeric(A),或,符号矩阵的修改,指令修改 用A(,)=new 来修改
13、:用new替换 A 中的某个元素; 用A1subs(A,new)来修改:用new替换 A中的自由变量; 用A1=subs(A,new,old)来修改:用new替换 A中的变量old,直接修改 可用、 键找到所要修改的矩阵,直接修改;,例11,A2=subs(A, sym(c), b) A2 = a, 2*c 3*a, 4*c,A = sym(a , 2*b ; 3*a , 0) A = a, 2*b 3*a, 0 A(2,2)=4*b A = a, 2*b 3*a, 4*b,syms a x; f=a*sin(x)+5 f = a*sin(x)+5 f1=subs(f,sin(x),sym(y
14、) f1 = a*y+5 f2=subs(f,a,x,2,pi/3) f2 = 3(1/2)+5 f3=subs(f,a,x,2,pi/3) f3 = 6.7321 f4=subs(subs(f,a,2),x,0:pi/6:pi) f4 = 5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 f5=subs(f,a,x,0:6,0:pi/6:pi) f5 = 5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000,实际上,Matlab的符号数学工具箱提供了两个符号表达式的替换函数subexpr和subs,可
15、以通过符号替换使表达式的输出形式简化,以得到一个简单的表达式。,符号表达式的替换,将表达式中重复出现的字符串用变量代替的函数为subexpr,其调用形式为:,此函数用变量Sigma(字符或字符串)的值代替符号表达式S中重复出现的字符串,Y返回替换后的结果。,Y,Sigma=subexpr(S,Sigma),例12 求解并化简 3 次方程 x3+ax+1=0 的符号解。,t=solve(x3+a*x+1=0),t = 1/6*(-108+12*(12*a3+81)(1/2)(1/3)-2*a/(-108+12*(12*a3+81)(1/2)(1/3) -1/12*(-108+12*(12*a3+
16、81)(1/2)(1/3)+a/(-108+12*(12*a3+81)(1/2)(1/3)+1/2*i*3(1/2)*(1/6*(-108+12*(12*a3+81)(1/2)(1/3)+2*a/(-108+12*(12*a3+81)(1/2)(1/3) -1/12*(-108+12*(12*a3+81)(1/2)(1/3)+a/(-108+12*(12*a3+81)(1/2)(1/3)-1/2*i*3(1/2)*(1/6*(-108+12*(12*a3+81)(1/2)(1/3)+2*a/(-108+12*(12*a3+81)(1/2)(1/3),r,s=subexpr(t,s),r = 1
17、/6*s(1/3)-2*a/s(1/3) -1/12*s(1/3)+a/s(1/3)+1/2*i*3(1/2)*(1/6*s(1/3)+2*a/s(1/3) -1/12*s(1/3)+a/s(1/3)-1/2*i*3(1/2)*(1/6*s(1/3)+2*a/s(1/3) s = -108+12*(12*a3+81)(1/2),而函数 subs 用指定符号替换符号表达式中的某一特定符号。,数值运算中,所有矩阵运算操作指令都比较直观、简单。而符号运算就不同了,所有涉及符号矩阵运算的操作都有专用符号矩阵函数来进行,这些函数作用于单个的数据无意义。,符号矩阵的运算,symsize 求符号矩阵维数;
18、charploy 特征多项式; inverse 逆矩阵; jordan 约当标准型; simple 符号矩阵简化。,符号矩阵运算函数:,transpose(S) 返回S矩阵的转置矩阵; determ(S) 返回S矩阵的行列式值; colspace(S) 返回S矩阵列空间的基; Q,D=eigensys(S) Q返回S矩阵的特征向量,D返回S矩阵的特征值。,例13 计算3阶范得蒙矩阵行列式的值。设A是一个由符号变量a,b,c确定的范得蒙矩阵。,其实,曾介绍过的许多应用于数值矩阵的函数,如diag、triu、tril、inv、det、rank、eig等,也可直接应用于符号矩阵。,syms a b
19、c; U=a,b,c; A=1,1,1;U;U.2 %建立范得蒙符号矩阵 det(A) %计算A的行列式值,A = 1, 1, 1 a, b, c a2, b2, c2 ans = b*c2-c*b2-a*c2+a*b2+a2*c-a2*b,二、符号表达式运算,(一)符号表达式的四则运算,symadd(a,d) 符号表达式的加; symsub(a,b) 符号表达式的减; symmul(a,b) 符号表达式的乘; symdiv(a,b) 符号表达式的除; sympow(a,b) 符号表达式的幂运算; symop(a,b) 符号表达式的综合运算。,符号表达式运算的函数:,例14 符号表达式的四则运
20、算示例。,syms x y; f1=2*x+x2*x-5*x+x3%符号表达式的结果为最简形式 f2=2*x/(5*x) %符号表达式的结果为最简形式 f3=(x+y)*(x-y) %符号表达式的结果不是x2-y2, %而是(x+y)*(x-y),f1 = -3*x+2*x3 f2 = 2/5 f3 = (x+y)*(x-y),(1),f=cos(x);g= sin(2*x); symop(f,/,g,+,f,*,g) ans = cos(x)/sin(2*x)+cos(x)*sin(2*x),(2),f= 2*x2+3*x-5; g= x2+x-7; h= symadd(f,g) h = 3
21、*x2+4*x-12,syms x f=2*x2+3*x-5; g= x2+x-7; h=f+g,syms x f=cos(x);g=sin(2*x); f/g+f*g,(1) f= 2*x2+3*x-5; g= x2+x-7;,例15,(2)f=cos(x);g= sin(2*x);,h = 3*x2+4*x-12,ans = cos(x)/sin(x)+cos(x)*sin(x),该函数将符号表达式s转换为分子和分母都是整系数的最佳多项式,并分别存放在n与d中。,(二)符号表达式的分式通分,如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分
22、母。其一般调用格式为:,n,d=numden(s),例16 对表达式 进行通分。,syms x y f=x/y+y/x; n,d=numden(f),n = x2+y2 d = y*x,factor(S)对S分解因式,S是符号表达式或符号矩阵; pretty(S)将符号表达式S按照类似书写习惯的方式显示; expand(S)对S进行展开,S是符号表达式或符号矩阵; collect(S)对S合并同类项,S是符号表达式或符号矩阵; collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。,(三)符号表达式的因式分解、展开与合并,Matlab 提供了符号表达式的因式分解与展开的函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 符号 计算 12
链接地址:https://www.31doc.com/p-3108651.html