第三章-matlab符号运算_第1页
第三章-matlab符号运算_第2页
第三章-matlab符号运算_第3页
第三章-matlab符号运算_第4页
第三章-matlab符号运算_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章-matlab符号运算第一页,共39页。一、符号变量、符号表达式和符号方程的生成与数值运算的区别:

※数值运算中必须先对变量赋值,然后才能参与运算。

※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达,可以获得任意精度的解。※参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。(符号变量也要先定义,后引用)

1、什么是符号运算第一页第二页,共39页。2、符号变量的定义(1)sym函数

主要功能是创建符号变量、符号表达式或符号矩阵。函数调用的一般格式为:

x=sym(‘x’)

其目的是将’x’创建为符号变量,以x作为输出变量名。例:f=sym(‘y’);%定义f是符号变量名,值为符号x

f1=sym('sin(x)+5x');f1——符号变量名sin(x)+5x——符号表达式''

——符号标识,符号表达式一定要用''单引号括起来matlab才能识别。第二页第三页,共39页。''的内容可以是符号表达式,也可以是符号方程。例:

f1=sym('ax^2+bx+c')——二次三项式

f2=sym('ax^2+bx+c=0')——

方程

f3='Dy+y^2=1'——微分方程※符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算。第三页第四页,共39页。>>sqrt(2)ans=1.4142%返回数值结果>>a=sqrt(sym(2))%符号变量a=2^(1/2)%返回符号结果

>>double(x)%求符号的值ans=

1.4142>>sym(2)/sym(5)+

sym(1)/sym(3)%符号表达式ans=11/15%结果为分数形式>>2/5+1/3ans=0.7333%结果为double形式例3-1符号对象和普通数据对象之间的差别第四页第五页,共39页。例3-2用符号运算求解方程组

a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量。a=sym(‘a’);

b=sym(‘b’);%定义a,b为符号常量,内容为符号a、b。y=2/b;x=sym(‘x’);y=sym(‘y”);’);%定义a,b为符号变量

[x,y]=solve(a*x-b*y-1,a*x+b*y-5,x,y)%以a,b为符号常数,x,y为符号变量即可得到方程组的解:x=3/ay=2/b第五页第六页,共39页。例3-3已知一复数表达式z=x+i*y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。

命令如下:

x=sym(‘x’,’real’);%把变量x定义为实数

y=sym(‘y’,’real’);%指定符号变量y为实数。

z=x+i*y;%定义复数表达式

conj(z);%求共轭复数

expand(z*conj(z))%求表达式与其共轭复数乘积的多项式

ans=x^2+y^2x=sym(‘x’,’unreal’)%去掉’x’的属性,将’x’创建为纯格式的符号变量,不具有任何属性。第六页第七页,共39页。

syms函数的功能与sym函数类似。syms函数可以在一个语句中同时定义多个符号变量,其一般格式为:

symsarg1arg2…argN

用于将rg1,arg2,…,argN等符号创建为符号型数据。例:symsxyz(2)syms函数第七页第八页,共39页。一般习惯于使用排在字母表中前面的字母作为变量的系数,而用排在后面的字母表示变量。例如:

f=sym(‘ax2+bx+c’)

表达式中的a,b,c通常被认为是常数,用作变量的系数;而将x看作自变量。(3)默认符号变量第八页第九页,共39页。符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。例如,数学表达式:

其符号表达式为:1+sqr(5*x))/2注意,在定义表达式前应先将表达式中的字符x定义为符号变量。3、符号表达式的生成第九页第十页,共39页。findsym函数:查询系统默认符号变量个数及变量名。findsym函数通常由系统自动调用,在进行符号运算时,系统调用该函数确定表达式中的符号变量,执行相应的操作。

findsym(f):返回表达式f中的所有符号变量。findsym(f,n):返回表达式f中的n个变量例:f=sym(‘cos(alpha)*b*x1+14*y’)findsym(f)%alpha,b,x1,yfindsym(f,2)%x1,y第十页第十一页,共39页。subs函数:将符号表达式中的符号变量用数值代替。subs(f):显示符号表达式f。subs(f,new):用new替代符号表达式f的系统默认变量。默认变量的选择规则为:对于只包含一个字符的变量,选择靠近x的变量作为默认变量;如果有两个变量和x之间的距离相同,则选择字母表后面的的变量作为默认变量subs(f,old,new):用new替代符号表达式f的系统变量old。第十一页第十二页,共39页。例:>>symsxy>>f=x^2*y+5*x*sqrt(y)f=x^2*y+5*x*y^(1/2)>>subs(f,x,3)ans=9*y+15*y^(1/2)>>subs(f,y,3)ans=3*x^2+5*x*3^(1/2)第十二页第十三页,共39页。将表达式中的自变量定义为符号变量后,赋值给符号函数名,即可生成符号函数。例如有一数学表达式:4、符号函数的生成其用符号表达式生成符号函数fxy的过程为:

symsabcxy%定义符号运算量

fxy=(a*x^2+b*y^2)/c^2%生成符号函数生成符号函数fxy后,即可用于微积分等符号计算。第十三页第十四页,共39页。例3-5定义一个符号函数fxy=(a*x2+b*y2)/c2

,分别求该函数对x、y的导数和对x的积分。symsabcxy%定义符号变量fxy=(a*x^2+b*y^2)/c^2;%生成符号函数diff(fxy,x)%符号函数fxy对x求导数ans=2*a*x/c^2diff(fxy,y)%符号函数fxy对y求导数ans=2*b*y/c^2int(fxy,x)%符号函数fxy对x求积分ans=1/c^2*(1/3*a*x^3+b*y^2*x)第十四页第十五页,共39页。5、符号方程的生成(1)创建抽象方程

MATLAB中可以创建抽象方程,即只有方程符号,没有具体表达式的方程。若要创建方程,并计算其一阶微分的方法如下:>>f=sym('f(x)');>>symsxh;>>df=(subs(f,x,x+h)-f)/hdf=(f(x+h)-f(x))/h抽象方程在积分变换中有着很多的应用。第十五页第十六页,共39页。(2)创建符号方程创建符号方程的方法有两种:利用符号表达式创建先创建符号变量,通过符号变量的运算生成符号函数直接生成符号表达式创建M文件利用M文件创建的函数,可以接受任何符号变量作为输入,作为生成函数的自变量>>equation1=sym('sin(x)+cos(x)=1')equation1=sin(x)+cos(x)=1第十六页第十七页,共39页。6、符号和数值之间的转化

S=sym(A,flag):将数值转化为符号变量,其中参数flag可以为‘r’,‘d’,‘e’,或者‘f’中的一个。该函数将数值标量或者矩阵转化为参数形式,该函数的第二个参数用于指定浮点数转化的方法,该函数各个取值的意义如表所示:参数说明rA为有理数形式dA为十进制数形式eA为指数形式fA为浮点数形式,将数值表示为'1.F'*2^(e)或者'-1.F'*2^(e)的格式,其中F为13位十六进制数,e为整数第十七页第十八页,共39页。例:>>t=0.1t=0.1000>>sym(t)%有理数形式

ans=1/10>>sym(t,'r')%有理数形式

ans=1/10>>sym(t,'f')%浮点数形式

ans='1.999999999999a'*2^(-4)第十八页第十九页,共39页。7、任意精度的计算

符号计算的一个非常显著的特点是:在计算过程中不会出现舍入误差,从而可以得到任意精度的数值解。如果希望计算结果精确,可以用符号计算来获得足够高的计算精度。符号计算相对于数值计算而言,需要更多的计算时间和存储空间。MATLAB工具箱中有三种不同类型的算术运算:数值型:MATLAB的浮点数运算;有理数类型:Maple的精确符号运算;VPA类型:Maple的任意精度算术运算。第十九页第二十页,共39页。在三种运算中,浮点运算速度最快,所需的内存空间小,但是结果精确度最低,而且存在一个舍入误差。符号运算中的有理数运算,其时间复杂度和空间复杂度都是最大的,但是,只要时间和空间允许,能够得到任意精度的结果。可变精度的运算运算速度和精确度均位于上面两种运算之间。其具体精度由参数指定,参数越大,精确度越高,运行越慢。第二十页第二十一页,共39页。浮点算术运算:

1/2+1/3--(定义输出格式formatlong)ans=0.83333333333333符号运算:

sym(1/2)+sym(1/3)ans=5/6--精确解任意精度算术运算:

digits(n)——设置可变精度,缺省16位

vpa(x,n)——显示可变精度计算例:digits(25)vpa(1/2+1/3)ans=.8333333333333333333333333第二十一页第二十二页,共39页。二、符号运算的基本操作符号表达式的四则运算合并符号表达式的同类项符号多项式的因式分解符号表达式的简化subs函数用于替换求值反函数的运算复合函数的运算第二十二页第二十三页,共39页。1、符号表达式的四则运算>>symsxyab>>fun1=sin(x)+cos(y)fun1=sin(x)+cos(y)>>fun2=a+bfun2=a+b>>fun1+fun2ans=sin(x)+cos(y)+a+b>>fun1*fun2ans=(sin(x)+cos(y))*(a+b)第二十三页第二十四页,共39页。2、合并符号表达式的同类项

>>symsxy>>collect(x^2*y+y*x-x^2-2*x)ans=(y-1)*x^2+(y-2)*x>>f=-1/4*x*exp(-2*x)+3/16*exp(-2*x);>>collect(f)ans=-1/4*x*exp(-2*x)+3/16*exp(-2*x)

R=collect(S,v),对指定的变量v进行合并,如果不指定,则默认为对x进行合并。第二十四页第二十五页,共39页。3、符号多项式的嵌套(horner)>>symsx>>fun1=2*x^3+2*x^2-32*x+40fun1=2*x^3+2*x^2-32*x+40>>horner(fun1)ans=40+(-32+(2+2*x)*x)*xhorner(f)函数:将f转化为嵌套格式。嵌套格式在多项式求值中可以降低计算的时间复杂度。第二十五页第二十六页,共39页。expand(f)函数:用于符号表达式的展开。其操作对象可以是多种类型,如多项式、三角函数、指数函数等。(P84表3.1)4、符号多项式的展开(expand)>>symsx>>fun1=40+(-32+(2+2*x)*x)*x>>expand(fun1)ans=2*x^3+2*x^2-32*x+40第二十六页第二十七页,共39页。factor(f)函数:实现因式分解功能,如果输入的参数为正整数,则返回此数的素数因数。5、符号多项式的因式分解(factor)>>symsx>>fun1=x^2-x-6>>factor(fun1)ans=(x+2)*(x-3)第二十七页第二十八页,共39页。6、符号表达式的简化

simple(s):实现表达式的化简,该函数可以自动选择化简所选择的方法,最后返回表达式的最简单的形式。函数的化简方法包括:simplify、combine(trig)、radsimpconvert(exp)、collect、factor、expand等。

simplify(f):函数实现表达式的化简,化简所选用的方法为Maple中的化简方法。>>symsx>>fun1=(1/x+7/x^2+12/x+8)^(1/3)fun1=(1/x+7/x^2+12/x+8)^(1/3)>>sfy1=simplify(fun1)sfy1=((13*x+7+8*x^2)/x^2)^(1/3)第二十八页第二十九页,共39页。7、subs函数用于替换求值

>>symsxyf=x^2*y+5*x*sqrt(y)f=x^2*y+5*x*y^(1/2)>>subs(f,x,3)ans=9*y+15*y^(1/2)>>subs(f,y,3)ans=3*x^2+5*x*3^(1/2)第二十九页第三十页,共39页。8、反函数的运算(finverse)>>symsxy>>f=x^2+yf=x^2+y>>finverse(f,y)ans=-x^2+y第三十页第三十一页,共39页。9、复合函数的运算(compose)

>>symsxyztu>>f=1/(1+x^2)>>g=sin(y)>>h=x^t>>p=exp(-y/u)>>compose(f,g)ans=1/(1+sin(y)^2)>>compose(f,g,t)ans=1/(1+sin(t)^2)第三十一页第三十二页,共39页。1、符号矩阵的创建数值矩阵A=[1,2;3,4]A=[a,b;c,d]——不识别

使用函数sym直接创建符号矩阵命令格式:A=sym('[]')二、符号矩阵例如:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]注意:符号矩阵的每一行的两端都有方括号,这是与matlab数值矩阵的一个重要区别。第三十二页第三十三页,共39页。用字符串直接创建矩阵

模仿matlab数值矩阵的创建方法需保证同一列中各元素字符串有相同的长度。例:A=['[a,2*b]';'[3*a,0]']

A=[a,2*b][3*a,0]第三十三页第三十四页,共39页。将数值矩阵转化为符号矩阵函数调用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]虽然矩阵形式没有发生改变,但是在MATLAB7的工作区间内,系统已经生成了一个新的矩阵,其数据类型为符号型。第三十四页第三十五页,共39页。④符号矩阵的修改

a.直接修改可用、键找到所要修改的矩阵,直接修改

b.指令修改用A1=sym(A,,,'new')来修改。用A1=subs(A,'new','old')来修改例如:A=[a,2*b][3*a,0]A1=sym(A,2,2,‘4*b’)%A(2,2)=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论