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

下载本文档

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

文档简介

MATLAB7.0从入门到精通哈尔滨工业大学(威海)汽车工程学院2/4/20231课程主要内容第1章MATLAB简介第2章数值运算第3章单元数组和结构第4章字符串第5章符号运算第6章MATLAB绘图基础第7章程序设计第8章计算方法的MATLAB实现第9章优化设计第10章SIMULINK仿真初探2/4/20232第5章符号运算数学问题的求解通常有两条途径可循,一是求它的解析解,二是求它的数值解。求解析解的主要工具是符号运算。所谓符号运算是指运算的主要对象是符号、文字,或说是变量。2/4/202335.1符号表达式的生成符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。不要求变量有预先确定的值,符号方程式是含有等号的符号表达式。符号算数是使用已知的规则和给定符号恒等式求解这些符号方程的实践,它与代数和微积分所学到的求解方法完全一样。符号矩阵式数组,其元素是符号表达式。符号表达式的生成可采用sym和syms函数生成。2/4/202345.1.1符号常量符号常量是一种符号对象。可用sym函数生成,可用class函数来检测其数据类型。2/4/20235程序实例>>a=sqrt(2)a=1.4142>>b=sym(sqrt(2))b=

sqrt(2)>>c=sqrt(sym(2))c=

2^(1/2)2/4/20236程序实例>>a=sqrt(2)a=1.4142>>b=sym(sqrt(2))b=sqrt(2)>>class(a)ans=double>>class(b)ans=sym2/4/202375.1.2符号变量及符号表达式使用sym函数也可定义符号表达式,一是将每一个变量定义为符号变量,二是将整个表达式集体定义。也可以直接用单引号生成。函数syms功能比sym更为强大,它可以一次创建任意多个符号变量。使用格式如下:symsvar1var2...2/4/20238程序实例>>a=sym('a');>>b=sym('b');>>c=sym('c');>>x=sym('x');>>f=a*x^2+b*x+c

f=

a*x^2+b*x+c2/4/20239程序实例>>f=sym('a*x^2+b*x+c')

f=

a*x^2+b*x+c

>>g=sym('a*sin(b*x+c)')

g=

a*sin(b*x+c)2/4/202310程序实例>>symsabcx>>f=a*x^2+b*x+c

f=

a*x^2+b*x+c

>>g=a*sin(b*x+c)

g=

a*sin(c+b*x)2/4/2023115.1.3符号矩阵元素是符号对象的矩阵叫做符号矩阵。在MATLAB7.0语言中,符号矩阵的生成与数值矩阵的相关操作很相似。使用sym函数直接生成符号矩阵,各符号表达式长度相同。2/4/202312程序实例>>m1=sym('[asdwe;reas]')m1=

[asd,we][re,as]

>>m2=sym('[56;12]')m2=

[5,6][1,2]2/4/2023135.2符号变量的基本操作符号变量的基本操作主要包括符号变量的查找、符号变量的精度设置、数值型变量与符号型变量的转换。2/4/2023145.2.1符号变量查询函数findsym用于找出一个表达式中存在哪些符号变量。findsym(s)列出全部符号变量,findsym(s,n)列出靠x最近的n个符号变量。2/4/202315程序实例>>f=sym('a*x^2+b*x+c');>>m1=findsym(f)m1=a,b,c,x>>m2=findsym(f,2)m2=x,c>>m3=findsym(f,3)m3=x,c,b2/4/2023165.2.2符号变量精度设置单独使用digits或d=digits在命令窗口显示当前设定的数值精度。digits(d)命令设置数值的精度为d位。r=vpa(s)命令将显示符号表达式s在当前精度下的值。r=vpa(s,d)命令将显示符号表达式s在精度d下的值。显示的数字个数为d。2/4/202317程序实例>>digits

Digits=32

>>digits(100)>>digits

Digits=100

>>digits(32)>>digits

Digits=322/4/202318程序实例>>r1=vpa(pi)r1=3.1415926535897932384626433832795

>>r2=vpa(pi,4)r2=3.142

>>r2=vpa(pi,5)r2=3.14162/4/2023195.2.3数值型变量与符号型变量的转换将数值形式转换为符号形式:对于任意数值型变量t,使用sym函数可以将其转换为4种形式的符号变量,分别为:有理数形式sym(t)或sym(t,’r’)、浮点数形式sym(t,’f’)、指数形式sym(t,’e’)和数值精度形式sym(t,’d’)。也可以采用这种方法将数值型矩阵转换为符号型矩阵,但此时只能把它转换成有理数形式。另外,函数poly2sym实现将某一向量转化为它对应的多项式。2/4/202320程序实例>>t=0.1;>>sym(t,'r')ans=1/10>>sym(t,'f')ans='1.999999999999a'*2^(-4)>>sym(t,'e')ans=1/10+eps/40>>sym(t,'d')ans=.100000000000000005551115123125782/4/202321程序实例>>a=[12345];>>f=poly2sym(a)

f=

x^4+2*x^3+3*x^2+4*x+52/4/202322将符号形式转换为数值形式:将符号形式转化为数值形式主要用函数eval来实现。另外,使用sym2poly函数实现将多项式转化为它对应的系数向量。2/4/202323程序实例>>a=sym(sqrt(5))

a=

sqrt(5)>>b=eval(a)b=2.23612/4/202324程序实例>>symsx>>f=x^3-4*x+5;>>c=sym2poly(f)c=10-452/4/2023255.3符号表达式的操作用户可以对符号表达式进行各种操作,包括四则运算、合并同类项、多项式分解和简化等。2/4/2023265.3.1符号表达式的四则运算符号表达式也与通常的算术式一样,可以进行四则运算。在符号对象的比较中只有相等与否,没有大小关系比较;三角函数的符号运算与数值运算法则基本相同;符号运算的指数函数运算与前面数值运算法则相同,对数运算对于符号运算来说只能使用log函数,因此log2(sym(a))=log(a)/log(2)。符号运算的复数运算与数值复数运算相同。2/4/202327程序实例>>symsxyab>>f1=sin(x)+cos(y);>>f2=a+b;>>f=f1*f2

f=

(a+b)*(cos(y)+sin(x))2/4/2023285.3.2符号表达式合并同类项collect(s,v)命令将符号矩阵s中所有同类项合并,并以v为符号变量输出。collect(s)命令使用findsym函数规定的默认变量代替上式中的v。2/4/202329程序实例>>symsxy>>collect(x^2*y+y*x-x^2-2*x,x)ans=(y-1)*x^2+(y-2)*x>>collect(x^2*y+y*x-x^2-2*x,y)ans=(x^2+x)*y-x^2-2*x>>collect(x^2*y+y*x-x^2-2*x)ans=(y-1)*x^2+(y-2)*x2/4/2023305.3.3符号多项式的因式分解使用expand函数将表达式中的括号进行展开;使用factor函数将表达式进行因式分解;使用horner函数将一般的表达式变换为嵌套的形式,默认x为第一变量。2/4/202331程序实例>>symsxy>>f=(x-1)*(x-2)*(x-3)*(y-4);>>g=expand(f)

g=

x^3*y-4*x^3-6*x^2*y+24*x^2+11*x*y-44*x-6*y+242/4/202332程序实例>>symsxy>>g=x^3*y-4*x^3-6*x^2*y+24*x^2+11*x*y-44*x-6*y+24;>>f=factor(g)

f=

(x-1)*(x-2)*(x-3)*(y-4)2/4/202333程序实例>>symsxy>>g=x^3*y-4*x^3-6*x^2*y+24*x^2+11*x*y-44*x-6*y+24;>>f=horner(g)

f=

-6*y+24+(11*y-44+(-6*y+24+(y-4)*x)*x)*x2/4/202334程序实例>>symsxy>>f=x^2-2*x+y^2-3*y*x;>>horner(f)

ans=

y^2+(-2-3*y+x)*x2/4/2023355.3.4符号表达式的简化使用simplify函数和simple函数进行符号表达式的简化。simplify(s)命令将符号表达式s中的每一个元素都进行简化,该函数的缺点是即使多次运用此函数也不一定得到最简形式。simple(s)命令使用多种代数简化方法对符号表达式s进行简化,并显示其中最简单的结果。[r,how]=simple命令在返回最简单的结果的同时,返回一个描述得到该最简结果所用简化方法的字符串how。2/4/202336程序实例>>symsx>>f=(x-2).^2+3*(x-3);>>simplify(f)

ans=

x^2-x-52/4/202337程序实例>>symsx>>f=(x-2).^2+3*(x-3);>>[r,how]=simple(f)

r=x^2-x-5how=simplify2/4/202338程序实例>>symsx>>f=(x-3).^3-3*x+(x-1)/(x+2).^2-2*x.^2;>>simplify(f)

ans=

(x^5-7*x^4-16*x^3+25*x^2-109-11*x)/(x+2)^22/4/202339程序实例>>symsx>>f=(x-3).^3-3*x+(x-1)/(x+2).^2-2*x.^2;>>simple(f)simplify:(x^5-7*x^4-16*x^3+25*x^2-109-11*x)/(x+2)^2radsimp:(x^5-7*x^4-16*x^3+25*x^2-109-11*x)/(x+2)^2combine(trig):(x^5-7*x^4-16*x^3+25*x^2-109-11*x)/(x^2+4*x+4)2/4/202340factor:(x^5-7*x^4-16*x^3+25*x^2-109-11*x)/(x+2)^2expand:x^3-11*x^2+24*x-27+1/(x+2)^2*x-1/(x+2)^2combine:(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2convert(exp):(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2convert(sincos):(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2convert(tan):(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^22/4/202341collect(x):(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2mwcos2sin:(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2ans=(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2>>symsx>>f=(x-3).^3-3*x+(x-1)/(x+2).^2-2*x.^2;>>[r,how]=simple(f)r=(x-3)^3-3*x+(x-1)/(x+2)^2-2*x^2how=[]2/4/2023425.3.5书写形式的转化pretty函数的使用pretty(s)将符号表达式用书写方式表示出来,默认宽度为79。pretty(s,n)将符号表达式用书写方式表示出来,宽度指定为n。2/4/202343程序实例>>p=sym('(x^2-1)/(x+2)+(2*x+5)/(3*x-2)')p=(x^2-1)/(x+2)+(2*x+5)/(3*x-2)>>pretty(p)2x-12x+5------+-------x+23x-22/4/2023445.3.6subs函数用于替换求值subs(s)命令将符号表达式s中的所有符号变量用调用函数中的值或matlab工作区间的值替代。subs(s,new)命令将符号表达式s中的自由符号变量用数值型变量或表达式new替换。subs(s,old,new)命令将符号表达式s中的符号变量old用数值型变量或表达式new替换。如没指定被替换的变量,则默认选择与x最接近的字母。2/4/202345程序实例>>symsxy>>f=x^2*y+5*x*sqrt(y);>>subs(f)ans=x^2*y+5*x*y^(1/2)>>subs(f,2)ans=4*y+10*y^(1/2)>>subs(f,y,2)ans=2*x^2+5*x*2^(1/2)>>subs(f,{x,y},{2,3})或subs(f,[x,y],[2,3])ans=29.32052/4/202346程序实例>>symsaxy>>f=x^2*y+5*x*sqrt(y);>>subs(f,a)

ans=a^2*y+5*a*y^(1/2)

>>subs(f,y,a)ans=a*x^2+5*x*a^(1/2)2/4/2023475.3.7反函数的运算g=finverse(f)命令用于求函数f的反函数。g=finverse(f,v)指定对变量v求反函数。2/4/202348程序实例>>symsxy>>f=x^2+y;>>finverse(f,x)Warning:finverse(x^2+y)isnotunique.>Insym.finverseat43ans=(-y+x)^(1/2)>>finverse(f,y)ans=-x^2+y2/4/2023495.3.8复合函数的运算compose(f,g)返回f=f(x)和g=g(y)时的复合函数f(g(y)),就是原来的默认变量用函数g完整替代。compose(f,g,z)返回f=f(x)和g=g(y)时的复合函数f(g(z)),z为指定变量,代替复合函数中默认变量,即先用z替代默认变量再复合。compose(f,g,x,z)返回复合函数f(g(z))。即指定变量x用g(z)替代,如果g(z)中有z,则g(z)函数保持原形不变,如没有,则默认变量用z替代。compose(f,g,x,y,z)返回复合函数f(g(y))。首先g(y)中的指定变量y用z代替,原有的z不变,然后f(x)中的指定变量x用g(z)代替。2/4/202350程序实例>>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)2/4/202351程序实例>>compose(h,g,x,z)ans=sin(z)^t>>compose(h,g,t,z)ans=x^sin(z)>>compose(h,p,x,y,z)ans=exp(-z/u)^t>>compose(h,p,t,u,z)ans=x^exp(-y/z)2/4/202352程序实例>>symsxyztu>>f=1/(1+x^2)+y-z*t+sin(u);>>g=x+z*sin(y)-t*u;>>h=x^t-y*z+z^u;>>p=x*z+exp(-y/u)-log(t);>>compose(f,g)ans=1/(1+(x+z*sin(y)-t*u)^2)+y-z*t+sin(u)>>compose(f,g,t)ans=1/(1+(t+z*sin(y)-t*u)^2)+y-z*t+sin(u)2/4/202353程序实例>>symsxyztu>>f=1/(1+x^2)+y-z*t+sin(u);>>g=x+z*sin(y)-t*u;>>h=x^t-y*z+z^u;>>p=x*z+exp(-y/u)-log(t);>>compose(h,g,x,z)ans=(x+z*sin(y)-t*u)^t-y*z+z^u>>compose(h,g,t,z)ans=x^(x+z*sin(y)-t*u)-y*z+z^u2/4/202354程序实例>>symsxyztu>>f=1/(1+x^2)+y-z*t+sin(u);>>g=x+z*sin(y)-t*u;>>h=x^t-y*z+z^u;>>p=x*z+exp(-y/u)-log(t);>>compose(h,p,x,y,z)ans=(x*z+exp(-z/u)-log(t))^t-y*z+z^u>>compose(h,p,t,u,z)ans=x^(x*z+exp(-y/z)-log(t))-y*z+z^u2/4/2023555.3.9提取分子、分母如果符号表达式是有理式形式或可展开为有理分式的形式,则可通过函数numden来提取符号表达式中的分子与分母。numden函数可将符号表达式合并、有理化,并返回所得的分子与分母。其调格式如下:[n,d]=numden(a)提取符号表达式a的分子与分母,并分别把其存放在n与d中;n=numden(a)提取符号表达式a的分子与分母,但只把分子存放在n中。2/4/202356程序实例>>f=sym('a*x^2/(b-x)');>>[n,d]=numden(f)n=-a*x^2d=-b+x>>k=numden(f)k=-a*x^22/4/2023575.4符号微积分微积分是高等数学中最重要的基础内容之一,它被广泛地应用于许多的工程学科中。MATLAB的符号数学工具箱为我们提供了快速、简便地计算微积分的工具。MATLAB符号数学工具箱中的符号微积分包括符号极限、符号微分、符号积分等。2/4/2023585.4.1符号极限极限是高等数学的出发点,同时它也是微积分学的基础。在MATLAB中,符号极限由函数“limit”来实现的。Limit函数的调用格式如下:limit(f,x,a)计算符号表达式当x→a时f=f(x)的极限值。limit(f,a)命令使用命令findsym(f)确定f中的自变量当其→a时f的极限。limit(f)命令使用命令findsym(f)确定f中的自变量当其→0时f的极限。limit(f,x,a,’right(left)’)求x→a的左、右极限。limit(f,x,±inf)计算符号表达式当x→正负无穷时f=f(x)的极限值。2/4/202359程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>a=limit(f)a=cos(t*y)>>b=limit(f,t)b=cos(t*y)+sin(t*y)2/4/202360程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>c=limit(f,t,0)c=sin(x*y)+1>>d=limit(f,t,pi)d=cos(pi*y)+sin(x*y)2/4/202361程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>a=limit(f,y,3,'left')a=

cos(3*t)+sin(3*x)>>b=limit(f,x,2,'right')b=

sin(2*y)+cos(t*y)2/4/202362程序实例>>symsxn>>f1=limit((1+x/n)^n,n,inf)f1=exp(x)>>f2=limit((1-x/n)^n,n,inf)f2=1/exp(x)2/4/2023635.4.2符号微分和求导微分是高等数学中最基础的内容之一。在MATLAB中,符号微分由函数“diff”来实现的。diff函数可同时计算数值微分与符号微分。diff函数的调用格式如下:diff(f)对f中默认的符号变量求导。diff(f,n)对f中默认的符号变量求n阶导。diff(f,x)对f中指定的自变量x求导。diff(f,x,n)对f中指定的自变量x求n阶导。说明:n是正整数时,对指定的变量求n阶导,当n是小数时,按四舍五入原则先取整,然后求导,当n是负数时,默认求指定变量的一阶导数。n还可以是字符串,相当于对新指定的符号变量求导,结果为0。小于1的数将对函数求一阶导。2/4/202364程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>a=diff(f)

a=

y*cos(x*y)

>>b=diff(f,3)

b=

-y^3*cos(x*y)2/4/202365程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>c=diff(f,t)

c=

-y*sin(t*y)

>>d=diff(f,t,3)

d=

y^3*sin(t*y)2/4/202366程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>a=diff(f,7.5)

a=

y^8*sin(x*y)

>>b=diff(f,pi)

b=

-y^3*cos(x*y)2/4/202367程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>a=diff(f,-3)

a=

y*cos(x*y)

>>b=diff(f,-5.2)

b=

y*cos(x*y)2/4/202368程序实例>>symsxyt>>f=sin(x*y)+cos(y*t);>>diff(f,a)???Illegalrighthandsideinassignment.Toomanyelements.Errorin==>sym.diffat30x=a.s;>>diff(f,'a')ans=02/4/202369程序实例>>symsxy>>a=[x^2+x*y;sin(x)*cos(y)];>>diff(a)ans=2*x+ycos(x)*cos(y)>>diff(a,y)ans=x-sin(x)*sin(y)2/4/202370jacobian(f,v)命令用于计算数量或向量f对于向量v的jacobi矩阵,所得结果的第i行第j列的数是df(i)/df(j)。f是数量时返回f的梯度。2/4/202371程序实例>>symsxyz>>a=[x^2+x*y;sin(x)*cos(y)];>>jacobian(a,[x,y])ans=[2*x+y,x][cos(x)*cos(y),-sin(x)*sin(y)]2/4/202372程序实例>>symsxyz>>a=[x^2+x*y,sin(x)*cos(y)];>>jacobian(a,[x,y,z])

ans=

[2*x+y,x,0][cos(x)*cos(y),-sin(x)*sin(y),0]2/4/202373程序实例>>symsxyz>>a=[x^2+x*y,sin(x)*cos(y);x+sin(y),sin(x*y)-cos(x)];>>jacobian(a,[x,y])ans=[2*x+y,x][1,cos(y)][cos(x)*cos(y),-sin(x)*sin(y)][cos(x*y)*y+sin(x),cos(x*y)*x]2/4/202374程序实例>>symsxyz>>a=[x^2+x*y,sin(x)*cos(y);x+sin(y),sin(x*y)-cos(x)];>>jacobian(a,[x,y,z])ans=[2*x+y,x,0][1,cos(y),0][cos(x)*cos(y),-sin(x)*sin(y),0][cos(x*y)*y+sin(x),cos(x*y)*x,0]2/4/2023755.4.3符号积分由高等数学可知,积分比微分复杂得多。很多情况下,积分不一定能成功。当在MATLAB中进行符号积分,找不到原函数时,它将返回未经计算的命令。符号积分由函数int来实现。int函数的调用格式如下所示:int(f)命令对f求不定积分,常数项默认为0。int(f,v)命令对f中的变量v求不定积分。int(f,a,b)命令对f进行[a,b]上求定积分。int(f,v,a,b)命令对f中的变量v进行[a,b]上求定积分。MATLAB还提供了一个交互性的近似积分命令rsums,该命令可以计算一元函数在某有限的闭区间上的积分数值。调用格式为rsums(f,a,b)其中f为积分表达式,a,b为积分上下限。2/4/202376程序实例>>symsxyt>>f=x^2+y^2+t^2;>>a=int(f)

a=

x^3/3+(t^2+y^2)*x

>>b=int(f,y)

b=

y^3/3+(t^2+x^2)*y2/4/202377程序实例>>symsxyt>>f=x^2+y^2+t^2;>>c=int(f,1,2)

c=

t^2+y^2+7/3

>>d=int(f,y,1,2)

d=

t^2+x^2+7/32/4/202378程序实例>>symsxytab>>f=x^2+y^2+t^2;>>m1=int(f,a,b)

m1=

-((a-b)*(a^2+a*b+b^2+3*t^2+3*y^2))/3

>>m2=int(f,t,a,b)

m2=

-((a-b)*(a^2+a*b+b^2+3*x^2+3*y^2))/32/4/202379程序实例>>symsx>>f=(x-1)^3+x^2+4*x;>>rsums(f,-1,2)2/4/2023802/4/2023812/4/2023825.4.4符号级数求和在数学分析中,级数求和是一个重要内容,MATLAB中使用symsum函数求解符号表达式的和。调用格式如下:R=symsum(s,a,b)将符号表达式s中默认变量从a到b时的有限和。R=symsum(s,v,a,b)将符号表达式s中指定变量从a到b时的有限和。2/4/202383程序实例验证下列结果2/4/202384程序实例>>symsxk>>a=symsum(1/k^2,1,inf)a=pi^2/6>>b=symsum(x^k/sym('k!'),k,0,inf)b=exp(x)2/4/2023855.5符号代数方程的求解在MATLAB符号数学工具箱中,符号方程式是含有等号的符号表达式。符号方程的求解包括符号线性方程的求解、非线性方程的求解和符号微分方程的求解等。2/4/2023865.5.1符号非线性方程组的求解符号代数非线性方程的求解可以通过函数fsolve来实现。fsolve函数以最小二乘法求解非线性方程,其调用格式如下:x=fsolve(fun,x0)命令以x0为初始矩阵来求解方程fun。[x,fval]=fsolve(fun,x0)命令以x0为初始矩阵来求解方程fun,同时输出方程根对应的函数值。其中fun可以是函数名也可以是符号表达式。2/4/202387程序实例>>x1=fsolve('x(1).^2-2*x(2)',[12])x1=1.64621.3551>>x2=fsolve('x(1).^2-sin(x(2))',[12])x2=0.95561.99082/4/202388程序实例使用fsolve函数求解下面非线性方程组。2/4/202389程序实例首先编写方程组的M文件。functiony=myfun2(x)y(1)=3*x(1)^2-x(2)^2;y(2)=3*x(1)*x(2)^2-x(1)^2-1;2/4/202390程序实例在命令窗口输入>>x0=[0.80.4];>>x=fsolve('myfun2',x0)Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.x=0.52080.90202/4/202391程序实例>>x0=[0.80.4];>>[x,fval]=fsolve('myfun2',x0)Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.x=0.52080.9020fval=1.0e-006*-0.02090.19282/4/2023925.5.2一般符号代数方程求解在MATLAB7.0语言中,使用solve函数求解一般的符号代数方程组。其使用格式为:solve(eq1,eq2,……eqn)求解由符号表达式或不带等号的字符串eq1,eq2,……eqn组成的方程组。自变量为默认自变量。solve(eq1,eq2,……eqn,var1,var2,……varn)求解由符号表达式或不带等号的字符eq1,eq2,……eqn组成的方程组。自变量由var1,var2,……varn来指定。得到结构体形式的解。当方程组中的符号变量个数大于求解的变量个数时只求解靠x最近的n个变量的解,其他变量作为常量对待。输出结果时,可采用解的结构体输出方式自动判断求解变量。2/4/202393程序实例>>x=solve('p*sin(x)=r')x=asin(r/p)

>>r=solve('p*sin(x)=r')r=asin(r/p)

>>x=solve('p*sin(x)-r')x=asin(r/p)2/4/202394程序实例>>x=solve('p*sin(x)=r','p')x=r/sin(x)>>p=solve('p*sin(x)=r','p')p=r/sin(x)>>p=solve('p*sin(x)-r','p')p=r/sin(x)2/4/202395程序实例>>[x,y]=solve('x+y=5','x-y=1')x=3y=2>>[y,x]=solve('x+y=5','x-y=1')y=3x=22/4/202396程序实例>>s=solve('x+y=5','x-y=1')s=x:[1x1sym]y:[1x1sym]>>s.x

ans=3

>>s.y

ans=22/4/202397程序实例>>x=solve('x+y=5','x-y=1','x')Warning:2equationsin1variables.>Insolveat113Warning:Explicitsolutioncouldnotbefound.>Insolveat140

x=

[emptysym]2/4/202398程序实例>>[x,y,z]=solve('x+y+z=5','x-y-z=1')???Errorusing==>solve2variablesdoesnotmatch3outputs.>>[x,y,z]=solve('x+y+z=5','x-y-z=1','x-y+z=7')x=3y=-1z=32/4/202399程序实例>>[x,y,z]=solve('a+b+c=15','a+b-c=3','a-b+c=5')

x=

4

y=

5

z=

62/4/2023100程序实例>>[a,b,c]=solve('a+b+c=15','a+b-c=3','a-b+c=5')

a=

4

b=

5

c=

62/4/2023101程序实例>>s=solve('a+b+c=15','a+b-c=3','a-b+c=5')s=a:[1x1sym]b:[1x1sym]c:[1x1sym]>>s.aans=4>>s.bans=5>>s.cans=62/4/2023102程序实例>>[a,b]=solve('a+b+c=15','a+b-c=3','a-b+c=5')???Errorusing==>solve3variablesdoesnotmatch2outputs.>>[a,b]=solve('a+b+c=15','a+b-c=3')

a=

-a+9

b=

62/4/2023103程序实例>>s=solve('a+b+c=15','a+b-c=3')s=b:[1x1sym]c:[1x1sym]>>s.bans=-a+9>>s.cans=6>>s.a???Referencetonon-existentfield'a'.2/4/2023104工程实例问题描述:一圆半径为2,并以x=3,y=5为圆心,另一圆半径为b,并以x=5,y=3为圆心。找两圆的交点。且当b=3时的解。解题过程:首先建立两个圆的方程,然后采用符号方程求解计算出交点坐标,左后采用符号代换计算出焦点的具体坐标。第一圆方程(x-3)*(x-3)+(y-5)*(y-5)=2*2第二圆方程(x-3)*(x-3)+(y-5)*(y-5)=b*b2/4/2023105求解过程>>symsxyb>>[x,y]=solve((x-3).^2+(y-5).^2-4,(x-5).^2+(y-3).^2-b.^2)x=9/2-1/8*b^2+1/8*(-16+24*b^2-b^4)^(1/2)9/2-1/8*b^2-1/8*(-16+24*b^2-b^4)^(1/2)y=7/2+1/8*b^2+1/8*(-16+24*b^2-b^4)^(1/2)7/2+1/8*b^2-1/8*(-16+24*b^2-b^4)^(1/2)>>subs(x,b,3)ans=4.73862.0114>>subs(y,b,3)ans=5.98863.26142/4/20231065.6符号微分方程的求解符号微分方程求解可以通过函数dsolve来实现,dsolve函数的调用格式如下:dsolve(‘eqn1’,’eqn2’,...,cond1,cond2,…,’v’),其中,对给定的常微分方程(组)eq1、eq2......中指定的符号自变量v,与给定的边界条件和初始条件cond1、cond2......求符号解。若没有指定变量v,则默认变量为t,在微分方程表达式中,D=d/dt、D2=d2/dt2......。微分算子D后面的字母就是待求解的未知函数。初始和边界条件由字符串表示,若边界条件少于方程组的阶数,则结果中会出现任意常数c。2/4/2023107函数的输出结果可能存在三种情况:(1)一个方程和一个输出,则返回符号向量中非线性方程的联立解;(2)几个方程与相同个数的输出,返回的结果是按字母顺序排序,并且分配给输出参数;(3)几个方程和一个输出,则返回解的结构。如果解不是显式形式,则被认为是隐式形式。当一个隐式形式的解返回时,会给出警告。如果解既不是显式形式,也不是隐式形式,也会给出警告,同时返回的是一个空字符串。在一些非线性方程中,输出结果可能是降阶的微分方程或是积分方程。2/4/2023108程序实例>>y1=dsolve('Dx=-a*x')

y1=

C1*exp(-a*t)

>>y2=dsolve('(Dy)^2+y^2=1','y(0)=0')

y2=

sin(t)-sin(t)2/4/2023109程序实例>>[f,g]=dsolve('Df=f+g','Dg=-f+g','f(0)=1','g(0)=2')f=exp(t)*(2*sin(t)+cos(t))g=exp(t)*(2*cos(t)-sin(t))

>>[f,g]=dsolve('Df=f+g','Dg=-f+g','f(0)=1','g(0)=2','x')f=exp(x)*(2*sin(x)+cos(x))g=exp(x)*(2*cos(x)-sin(x))2/4/2023110程序实例>>s=dsolve('Df=f+g','Dg=-f+g','f(0)=1','g(0)=2')s=f:[1x1sym]g:[1x1sym]>>s.fans=exp(t)*(2*sin(t)+cos(t))

>>s.gans=exp(t)*(2*cos(t)-sin(t))2/4/20231115.7符号函数画图MATLAB的符号工具箱也为用户对符号函数进行画图提供了方便。符号函数画图可以通过函数ezplot或fplot来实现。其中,函数ezplot的调用格式如下:ezplot(f)表示在默认区间-2*pi<x<2*pi绘制f=f(x)的函数图或在默认区间-2*pi<x<2*pi和-2*pi<y<2*pi绘制f(x,y)=0的函数图。ezplot(f,[a,b])同上,绘图区间变为[a,b]。ezplot(f,[xmin,xmax,ymin,ymax])同上,绘图区间变为x为[xmin,xmax],y为[ymin,ymax]。ezplot(x,y)表示在区间0<t<2*pi绘制x=x(t)和y=y(t)的函数图。ezplot(x,y,[tmin,tmax])表示在区间tmin<t<tmax绘制x=x(t)和y=y(t)的函数图。2/4/2023112程序实例>>symsx>>f=x^2-9;>>ezplot(f)2/4/2023113结果图形2/4/2023114程序实例>>symsxy>>f=x^2+y^2-9;>>ezplot(f)2/4/2023115结果图形2/4/2023116ezplot('x.^2+y.^2-9')2/4/2023117ezplot('x.^2+y.^2-9=0')2/4/2023118程序实例>>symsxy>>f=x^2+y^2-9;>>ezplot(f,[-3,3])2/4/2023119结果图形2/4/2023120程序实例>>

温馨提示

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

评论

0/150

提交评论