1、第四章 符号推演与计算,我们已经知道数值计算是MATLAB最强大的功能之一,但自从Mathworks公司买下了Maple的使用权以后,MATLAB将数值计算与符号计算熔为一体,成了全功能的计算软件。有关符号计算的所有功能都在符号工具箱(Symbolic Math Toolbox)中。我们可以在帮助窗口中打开该工具箱获得更详细的资料。本章将介绍如何定义一个符号数学公式,以及如何推演一个数学公式,如对一个多项式提取公因子,对一个复杂的数学表达式进行化简,以及诸如符号矩阵代数运算、符号积分运算等一系列符号的推演过程。符号运算的一个最关键的命令是syms符号定义,利用该命令我们可以定义任何一个符号公式
2、,符号积分公式、符号矩阵公式、符号线性方程和符号微分方程等数学公式等。我们可以利用MATLAB 命令对它进行通常意义下的解析推导。,有关符号推演的知识点见下图,4.1 符号表达式的定义和数据转换,在MATLAB中为进行符号推演就必须区别表达式和符号表达式的区别。MATLAB提供了一系列按照符号推演规则下的符号命令,如定义符号、定义一个多元函数所有参数中那些是自变量那些是参数等等。当我们在符号推演的过程或结束后,希望计算函数在某些点处的值,我们有一些有关的辅助命令如vpa和subst。,4.1.1 定义符号对象的指令,一个符号表达式中,所有的参数都是符号变量或符号常量,因此必须和在计算机语言中的
3、那些表达式有所区别。我们可以用命令sym和syms来定义符号变量和符号表达式。sym 和 syms 常用的格式如下: f = sym(expr) 把表达式expr 转换为符号对象。 syms(arg1, arg2, arg3) 将他们定义为符号变量。 syms arg1 arg2 arg3 为上面命令的简写形式。,【例4.1.1】用符号计算验证三角等式。,syms a1 a2; % 定义符号变量 y=sin(a1)*cos(a2)+cos(a1)*sin(a2) % 定义符号表达式y simple(y) % 化简,ans =sin(a1+a2),【例4.1.2】把字符表达式转换为符号变量,y=
4、sym(2*sin(x)*cos(x) %符号变量 y=simple(y) %按规则把已有的y符号表达式化成最简形式,y =2*sin(x)*cos(x) y =sin(2*x),【例4.1.3】求矩阵的行列式值、逆和特征根,syms a11 a12 a21 a22; A=a11,a12;a21,a22 DA=det(A) % 计算矩阵A的行列式的值 IA=inv(A) % 计算矩阵A的逆矩阵 EA=eig(A) % 求矩阵的特征根系统,A = a11, a12 a21, a22 DA = a11*a22-a12*a21 IA = a22/(a11*a22-a12*a21), -a12/(a1
5、1*a22-a12*a21) -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21) EA = 1/2*a11+1/2*a22+1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2) 1/2*a11+1/2*a22-1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2),【例4.1.5】验证积分,syms A t tao w; yf=int(A*exp(-i*w*t),t,-tao/2,tao/2); Yf=simple(yf),Yf = 2*A*sin(1/2*tao*w)/w,4.1.2 符号表达式中自
6、由变量的确定在一个符号表达式中可能有多个符号变量,那么哪一个是自变量,哪些是符号常量则对某种运算是非常重要的. MATLAB 提供了一个 findsym 命令,可以对所有符号变量指定一定数量的自变量进行自动认定。,基本语法: findsym(expr) 确定表达式 expr 中所有自由符号变量 findsym(expr,n)确定expr 靠 x 最近的n个独立变量,【例4.1.6】一个简单的例子,syms a x y z t % 定义符号变量 a,x,y,z,t findsym(sin(pi*t) % 确定表达式中所有符号为自由变量 findsym(x+i*y-j*z,1) % 确定达式中最靠
7、近x的变量 findsym(x+i*y-j*z,2) % 式中最靠近x的两个变量 findsym(x+i*y-j*z,3) % 式中最靠近x的三个变量(包括x),结果为:ans = pi, t ans = x ans = x,y ans = x,y,z,【例4.1.7】findsym确定自由变量是对整个矩阵进行的。,syms a b t u v x y; A=a+b*x,sin(t)+u;x*exp(-t),log(y)+v findsym(A,1) % 在矩阵A中确定x为自变量,A = a+b*x, sin(t)+u x*exp(-t), log(y)+v ans = x,4.1.3 符号的
8、数值化和替代在进行公式推导的过程中,有时我们需要将公式按某些实际参数来进行数值化表示,或在自变量取某些值时求符号公式的值,这时我们可以使用符号数值化和替换等命令。 一、对符号求值的命令为vpa,即(Variable precision arithmetic)。语法为: R = vpa(A) R = vpa(A,d) 这里 A:对符号表达式A求给定精度的值。 d:输出数值的有效位数。,【例4.1.8】求以下符号的有效位数值 digits(25) % 设置vpa输出的有效数 q = vpa(sin(sym(pi)/6) % 输出sin在给定点的值,这里有效位为25 p = vpa(pi) w =
9、vpa(1+sqrt(5)/2,4) % 输出函数的值,这里有效位为4 q = 0.5000000000000000000000000 p = 3.141592653589793238462643 w = 1.618,二、符号表达式值的替换函数对于符号表达式中的某些变量,我们可以通过使用替换命令将这些变量变成单个数据或数组,从而让整个符号表达式变成具体的数字,这样我们就可以先推导再计算了。符号替换命令为:,R = subs(S) R = subs(S,old,new) 其中 subs(S):式中所有的变量均用内存中工作数组相应的变量替换。 subs(S,old,new): 将符号表达式S中的某
10、些“老的符号变量”替换成“新变量或数值数组。,【例4.1.9】求解常微分方程 的通解, 并用C1=3,a=50替换解的变量,y = dsolve(Dy = -a*y) % 求微分方程的通解 a =50;C1=3; y = C1*exp(-a*t),subs(y) % 进行参数的替换 ans = 3*exp(-50*t),【例4.1.10】以“新”替换“老”, 将表达式中的a替换为4 subs(a+b,a,4) ans = 4+b,(2) 将表达式中的老符号用新符号替换。 subs(cos(a)+sin(b),a,b,sym(alpha),2) ans = cos(alpha)+sin(2) (
11、3)将符号表达式中的参数进行大量的数据替换 subs(exp(a*t),a,-magic(2) % 将参数用22的魔方数组替换 ans = exp(-t), exp(-3*t) exp(-4*t), exp(-2*t) (4)将符号乘用矩阵乘替换 subs(x*y,x,y,0 1;-1 0,1 -1;-2 1) ans = 0 -12 0,4.2 微积分中的符号运算,微积分中可以进行极限、导数、微分、积分、级数展开等解析运算,也可以进行多元函数的微积分运算,结合图形的显示可以更好地帮助我们理解空间微积分的概念和计算。,4.2.1 求极限求极限即对表达式进行求极限,首先是定义符号表达式,然后对表
12、达式进行极限运算。极限运算的命令语法为:,limit(F, a) limit(F) limit(F, x, a, right) limit(F, x, a, left) 其中 F:为表达式2 a:为极限点,当不给出极限点时系统内定的极限点为0 right:求右极限 left: 求左极限,【例4.2.1】求极限的简单例子,syms x a t h; limit(sin(x)/x) % 当x趋于0(系统内定极限点为0) limit(1/x,x,0,right) % 1/x趋于0的右极限 limit(1/x,x,0,left) % 1/x趋于0的左极限 limit(sin(x+h)-sin(x)/h
13、,h,0) v = (1 + a/x)x, exp(-x); limit(v,x,inf,left) % 函数v自变量x趋于无穷大时的左极限,ans =1 ans =inf ans =-inf ans =cos(x) ans = exp(a), 0,4.2.2 符号求导 一、单变量求导数的语法为:diff(S,v) diff(S,n) diff(S,v,n) 其中: S: 为符号表达式,可能有多个符号参数 v: 以S中的符号v进行求导运算 n: 对S进行n次求导【例4.2.2】对表达式 以x、t分别求导 syms x t diff(sin(x2)+x*t,x) diff(sin(x2)+x*t
14、,t) ans = 2*cos(x2)*x+t ans = x,【例4.2.3】对求5阶导数 syms x diff(x6,x,5) ans = 720*x,【例4.2.4】求,syms a t x; f=a,t3;t*cos(x), log(x); df=diff(f) %求矩阵f对x的导数 dfdt2=diff(f,t,2) %求矩阵f对t的二阶导数 dfdxdt=diff(diff(f,x),t) %求二阶混合导数,df = 0, 0 -t*sin(x), 1/x,dfdt2 = 0, 6*t 0, 0,dfdxdt = 0, 0 -sin(x), 0,二、求偏导数的jacobian命令
15、设列向量每一个分量w,v为自变量x,y的函数,即则jacobian命令计算矩阵Jacobian命令的一般形式为: J = jacobian(w;v,x,y),【例4.2.4】直角坐标系转化为球形坐标,即, 这里,为编程方便两个角度分别用l和f来表示 syms r l f % 定义符号变量 x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l); J = jacobian(x; y; z, r l f) % 注意列向量和行向量,J = cos(l)*cos(f), -r*sin(l)*cos(f), -r*cos(l)*sin(f) cos(
16、l)*sin(f), -r*sin(l)*sin(f), r*cos(l)*cos(f) sin(l), r*cos(l), 0,对矩阵进行简化: Det_J = simple(det(J) % 利用simple变命令进行简化 Det_J = -cos(l)*r2,4.2.3 符号积分符号积分包括不定积分和定积分,其语法分别为:R = int(S) R = int(S,v) R = int(S,a,b) R = int(S,v,a,b),其中: S: 为符号表达式,可能有多个参数 v: 以S中的符号v进行求积分运算 a: 为定积分下限 b: 为定积分上限,【例4.2.5】几个简单的例子 sym
17、s x t alpha z int(-2*x/(1+x2)2) % 计算不定积分 int(x/(1+z2), z) % 以z为自变量计算不定积分 int(x*log(1+x), 0, 1) % 计算积分限为0,1的定积分 int(2*x, sin(t), 1) % 计算积分限为sin(t),1 的定积分 int(exp(t), exp(alpha*t),ans = 1/(1+x2) ans = x*atan(z) ans = 1/4 ans = 1-sin(t)2 ans = exp(t), 1/alpha*exp(alpha*t),【例4.2.6】 对符号矩阵进行积分,即对矩阵的每一个元素进
18、行积分。 syms x n=4 A = x.(0:n)*(0:n) % 产生符号矩阵A D = diff(log(A) % 对符号矩阵A进行函数log运算并求导 Int_A=int(A) % 对矩阵进行积分,A = 1, 1, 1, 1, 1 1, x, x2, x3, x4 1, x2, x4, x6, x8 1, x3, x6, x9, x12 1, x4, x8, x12, x16,D = 0, 0, 0, 0, 0 0, 1/x, 2/x, 3/x, 4/x 0, 2/x, 4/x, 6/x, 8/x 0, 3/x, 6/x, 9/x, 12/x 0, 4/x, 8/x, 12/x,
19、16/x,Int_A = x, x, x, x, x x, 1/2*x2, 1/3*x3, 1/4*x4, 1/5*x5 x, 1/3*x3, 1/5*x5, 1/7*x7, 1/9*x9 x, 1/4*x4, 1/7*x7, 1/10*x10, 1/13*x13 x, 1/5*x5, 1/9*x9, 1/13*x13, 1/17*x17,【例4.2.7】求积分,syms x y z F2=int(int(int(x2+y2+z2,z,sqrt(x*y),x2*y),ysqrt(x),x2),x,1,2) VF2=vpa(F2) % 积分结果用32位数字表示,F2 = 1610027357/6
20、563700-6072064/348075*2(1/2)+14912/4641*2(1/4)+64/225*2(3/4) VF2 = 224.92153573331143159790710032805,4.2.4 泰勒展式泰勒展式是数值计算的基础,应用十分广泛。如求微分方程的数值解时,对给定的初始值对被积函数在该点进行泰勒展开,利用步进法逐步求出微分方程的数值解。在数学建模竞赛中我们曾经使用过该方法。对任意函数都可以在某点处进行展开,其表达式为:泰勒展式命令语法为: r = taylor(f) r = taylor(f,n,v) r = taylor(f,n,v,a) 其中 f:被展开函数,如
21、没有其他参数表示系统内定在0点展开 v:对变量v进行泰勒展开 n:取展式的前n项 a:在a点展开,若不给出,系统内定为在0展开。,【例4.2.9】对函数进行各种泰勒展开 syms x taylor(exp(x) % 对函数在0点展开,并取阶数为5(系统内定) taylor(exp(x), 7) % 对函数在0点展开,并取阶数为7 taylor(exp(x), 3, 2) % 对函数在2点展开,并取前3项ans = 1+x+1/2*x2+1/6*x3+1/24*x4+1/120*x5 ans = 1+x+1/2*x2+1/6*x3+1/24*x4+1/120*x5+1/720*x6 ans =
22、exp(2)+exp(2)*(x-2)+1/2*exp(2)*(x-2)2,【例4.2.10】对函数进行各种泰勒展开 syms x y taylor(exp(x+y) % 对x在x=0 处展开,x的阶数为5 taylor(exp(x+y),y,3) % 对y在 y=0处展开,y的阶数为3 ans = exp(y)+exp(y)*x+1/2*exp(y)*x2+1/6*exp(y)*x3+1/24*exp(y)*x4+1/120*exp(y)*x5 ans = exp(x)+exp(x)*y+1/2*exp(x)*y2,4.2.5 符号求和 符号级数求和的命令语法为:r = symsum(s)
23、r = symsum(s,v) r = symsum(s,a,b) r = symsum(s,v,a,b),其中 s:为含变量k的表达式 v:对表达式s中的变量v求和 b:对表达式中变量k从a到b求和,【例4.2.11】几个简单的求和的例子 syms k n x symsum(k2) % 对序列到k项求和 ans = 1/3*k3-1/2*k2+1/6*k symsum(k2, 0, 10) % 从0项到10项求和 ans = 385 symsum(xk/sym(k!, k, 0, inf) ans = exp(x),【例4.2.12】我们来考虑一个综合题,对给定空间曲线的某一点,求该点的切线
24、和法平面并作图,首先用解析推导得曲线上点的切线方向、和以该点为法线的法平面。然后用替换命令求某一点的法线和法向量,再作图。 syms t x y z % 说明符号变量 x=2*sin(t); y=2*cos(t); z=4*t; % 定义一条空间曲线 w=x;y;z; % 建立参数坐标 v=jacobian(w,t); % 求曲线在各点的切线方向 t=pi/4; % 确定固定点 v0=subs(v); % 求该点的切线方向 w0=subs(w); % 求该点的坐标 t0=pi/4; syms t x1 y1 % 准备建立点的法线和平面 F=w0+v0.*(t-t0) % 建立该点的切线方程 Z
25、=-(v0(1)*(x1-w0(1)+v0(2)*(y1-w0(2)/v0(3)+w0(3) % 建立该点的法平面 ezplot3(w(1),w(2),w(3),0,2*pi),hold on % 作空间曲线 ezmesh(Z),hold on % 作法平面 quiver3(w0(1),w0(2),w0(3),v0(1),v0(2),v0(3),1,r),hold on %作法线 plot3(w0(1),w0(2),w0(3),r.,markersize,30) % 作该固定点为红色大点 axis equal axis(-2,2,-2,2,0,5) hidden off axis off,【例
26、4.2.12】对给定曲面 ,求曲面上给定点的切面以及平面的法线。并作图形。 解:空间平面的方程为:,这里 为曲面上的一点。,为该点的方向导数,解题思路为: 1)在曲面的某点上用jacobian函数求该点上的方向导数,利用空间平面公式作图。 2)利用quiver3函数作法向量,语法为: quiver3(X,Y,Z,U,V,W) quiver3(Z,U,V,W) quiver3(.,scale) quiver3(.,LineSpec) quiver3(.,LineSpec,filled),这里X,Y,Z为空间的点的坐标,它们为同维数组。 U,V,W为相应点的方向向量, Scale:为方向向量的长度
27、。 本题的程序为:,% 2004年4月18日,对给定的曲线作某点的切平面及法线 syms z x y z=x2+y2 ezmesh(z,-1.2,1.2);hold on axis equal j=jacobian(z) x=0.5;y=0.3;x0=x;y0=y; z0=subs(z) z_xy=subs(j) quiver3(x0,y0,z0,z_xy(1),z_xy(2),-1,30,b) hold on plot3(x0,y0,z0,r.,markersize,30) hold on syms x y Z=z_xy(1)*(x-x0)+z_xy(2)*(y-y0)+z0 ezmesh(
28、Z,-1.2,1.2),4.3 矩阵代数中的符号计算矩阵代数中的符号计算包括对矩阵进行各种四则运算、求矩阵的行列式、矩阵的逆、矩阵的谱分解以及求线性方程组的解等。部分命令和含义见表8.3.1,注意:有些命令如求矩阵模norm,求矩阵的条件数cond不能用在符号矩阵中,【例4.3.1】求希尔伯特符号矩阵H的特征值、行列式、逆矩阵等矩阵操作。 clear all;clc H = sym(hilb(5) % 定义一个5阶希尔伯特矩阵,H = 1, 1/2, 1/3, 1/4, 1/5 1/2, 1/3, 1/4, 1/5, 1/6 1/3, 1/4, 1/5, 1/6, 1/7 1/4, 1/5,
29、1/6, 1/7, 1/8 1/5, 1/6, 1/7, 1/8, 1/9,d = det(H) % 求希尔伯特矩阵的行列式的值,d =1/266716800000,X = inv(H) % 求希尔伯特矩阵的行列式的逆矩阵,X = 25, -300, 1050, -1400, 630 -300, 4800, -18900, 26880, -12600 1050, -18900, 79380, -117600, 56700 -1400, 26880, -117600, 179200, -88200 630, -12600, 56700, -88200, 44100,p = poly(H) % 求
30、希尔伯特矩阵的特征多项式,p = x5-563/315*x4+735781/2116800*x3-852401/222264000*x2+61501/53343360000*x-1/266716800000,e = eig(vpa(H) % 将符号矩阵转为10位有效数的数字矩阵并求特征根,e = .3287939270e-5 .3058980252e-3 .1140749157e-1 .2085342187 1.567050691,t = sym(t); I,J = meshgrid(1:5); H = 1./(I+J-t) % 产生带参数t的希尔伯特矩阵 H=subs(H,t,1) % 将参
31、数替换为1,H = 1/(2-t), 1/(3-t), 1/(4-t), 1/(5-t), 1/(6-t) 1/(3-t), 1/(4-t), 1/(5-t), 1/(6-t), 1/(7-t) 1/(4-t), 1/(5-t), 1/(6-t), 1/(7-t), 1/(8-t) 1/(5-t), 1/(6-t), 1/(7-t), 1/(8-t), 1/(9-t) 1/(6-t), 1/(7-t), 1/(8-t), 1/(9-t), 1/(10-t),H=subs(H,t,1) % 将参数替换为1,H =1.0000 0.5000 0.3333 0.2500 0.20000.5000 0
32、.3333 0.2500 0.2000 0.16670.3333 0.2500 0.2000 0.1667 0.14290.2500 0.2000 0.1667 0.1429 0.12500.2000 0.1667 0.1429 0.1250 0.1111,【例4.3.2】 计算矩阵的秩 syms a11 a12 a13 a21 a22 a23 x y A=a11, a12; a21, a22;% 这是一个满秩矩阵 rank(A),ans = 2,B=a11, a11; a22, a22;% 第一行的元素相同,第二行的元素也相同 rank(B),ans = 1,C=magic(6) % 产生6
33、阶魔方矩阵 rank(sym(C),C = 35 1 6 26 19 243 32 7 21 23 2531 9 2 22 27 208 28 33 17 10 1530 5 34 12 14 164 36 29 13 18 11 ans = 5 从而我们知道n阶的魔方矩阵的秩为n-1,【例4.3.3】 求矩阵 的上三角阵和下三角 阵。,syms a11 a12 a13 a21 a22 a23 a31 a32 a33 x y % 定义符号 A=a11 a12 a13; a21 a22 a23;a31 a32 a33 % 定义符号矩阵 rank(A) tril(A) % 求矩阵A的下三角阵 tr
34、iu(A) % 求矩阵A的上三角阵 triu(A,1) % 求矩阵A的上次对角线上三角阵 triu(A,-1) % 求矩阵A的下次对角线上三角阵,ans = a11, 0, 0 a21, a22, 0 a31, a32, a33,ans = a11, a12, a13 0, a22, a23 0, 0, a33,ans = 0, a12, a13 0, 0, a23 0, 0, 0,ans = a11, a12, a13 a21, a22, a23 0, a32, a33,【例4.3.4】求解线性方程组 求解线性方程或方程组解的命令为solve,其语法为: g = solve(eq) g =
35、solve(eq,var) g = solve(eq1,eq2,.,eqn) g = solve(eq1,eq2,.,eqn,var12,var2,.,varn) 其中 eq:为字符串方程,如果仅有表达式,则表示该表达式等于0。 var:表示方程中的变量。,(1) 求 的解,syms x a b c eq=a*x2+b*x+c solve(eq, x),(2)求线性方程组,S = solve(x + y = 1,x - 4*y = 2) % 结果为构架数组 disp(S.x = ), disp(S.x) % 显示x解 disp(S.y = ), disp(S.y) % 显示y解,S.x = 6
36、/5 S.y = -1/5,(3) 求关于 变量x,y的解,S=solve(a*x2+b*y+w=0,x+y+w=0,x,y)disp(S.x = ), disp(S.x)disp(S.y = ), disp(S.y),S.x = -1/2/a*(-2*a*w-b+(4*a*w*b+b2-4*a*w)(1/2)-w -1/2/a*(-2*a*w-b-(4*a*w*b+b2-4*a*w)(1/2)-wS.y = 1/2/a*(-2*a*w-b+(4*a*w*b+b2-4*a*w)(1/2),4.4 符号表达式的操作命令对符号表达式的操作,就象我们平时在数学课上对多项式的推演一样。这里包括多项式的
37、加、减、乘、除,对多项式的化简等等。,4.4.1 多项式的基本操作 基本的操作命令如下: collect(expr,v) 对以 v 为表达式的同幂项进行合并 expand(expr) 对expr如多项式、三角函数等函数进行展开 factor(expr) 对表达式、整数进行因式分解 horner(expr ) 把多项式分解为嵌套形式 simlify(expr) 将 expr 进行简化 simple(expr) 将 expr 化成最简单的形式 pretty(expr) 以习惯的书写方式显示表达式,【例4.4.1】按不同的方式合并同幂项。 EXPR=sym(x2+x*exp(-t)+1)*(x+ex
38、p(-t); expr1=collect(EXPR) % 默认合并x同幂项系数 expr2=collect(EXPR,exp(-t) % 合并exp(-t)同幂项expr1 = x3+2*exp(-t)*x2+(1+exp(-t)2)*x+exp(-t) expr2 = x*exp(-t)2+(2*x2+1)*exp(-t)+(x2+1)*x,【例4.4.2】利用factor命令将以下多项式变为因子相乘的形式 syms x y a b factor(x3-y3) factor(a2-b2, a3+b3) factor(sym(123450),ans = (x-y)*(x2+x*y+y2) an
39、s = (a-b)*(a+b), (a+b)*(a2-a*b+b2) ans = (2)*(3)*(5)2*(823),【例4.4.3】利用horner命令对表达式进行嵌套型分解 clear;syms x y horner(x3-6*x2+11*x-6) horner(x2+x;y3-2*y),ans = -6+(11+(-6+x)*x)*x ans = (x+1)*x (-2+y2)*y,【例4.4.4】利用numden命令将表达式的分子和分母化简为不可约的形式并通n,d = numden(sym(6/30) % 化简 n1,d1 = numden(x/y + y/x) % 通分运算 n2,
40、d2 = numden(1/(x-y)+1/(x+y) % 通分运算,n = 1 d = 5 n1 = x2+y2 d1 = x*y n2 = 2*x d2 = (x-y)*(x+y),【例4.4.5】简化,(1)运用simplify简化(即使多次运用simplify也不能得到最简形式。) syms x;f=(1/x3+6/x2+12/x+8)(1/3); sfy1=simplify(f) sfy2=simplify(sfy1) sfy1 = (2*x+1)3/x3)(1/3) sfy2 = (2*x+1)3/x3)(1/3),(2)运用simple简化 g1=simple(f),g2=sim
41、ple(g1),g1 =(2*x+1)/x g2 = 2+1/x,【例4.4.6】简化syms x;ff=cos(x)+sqrt(-sin(x)2); ssfy1=simplify(ff) ssfy2=simplify(ssfy1),ssfy1 = cos(x)+(-sin(x)2)(1/2) ssfy2 = cos(x)+(-sin(x)2)(1/2),gg1=simple(ff); gg2=simple(gg1) ;,gg1 = cos(x)+i*sin(x) gg2 = exp(i*x),4.4.2 求函数的反函数和复合函数,【例】求 的反函数 syms x f=sin(x) ezplo
42、t(f,0,3),hold on ezplot(finverse(f),0,3),【例4.4.8】求复合函数命令compose 符合函数命令语法为: compose(f,g) compose(f,g,z) compose(f,g,x,z) compose(f,g,x,y,z) 设函数,则compose(f,g)的结果为,f(g(y),syms x y z t u; f = 1/(1 + x2); g = sin(y); h = xt; p = exp(-y/u); compose(f,g) compose(f,g,t) compose(h,g,x,z) compose(h,g,t,z) com
43、pose(h,p,x,y,z) compose(h,p,t,u,z),ans = 1/(1+sin(y)2) ans = 1/(1+sin(t)2) ans = sin(z)t ans = xsin(z) ans = exp(-z/u)t ans = xexp(-y/z),4.5 符号微分方程的解,符号求解命令dsolve求常微分方程的通解、具有初始条件或边界条件的解以及常微分方程组的解。其基本语法为: r = dsolve(eq1,eq2,., cond1,cond2,., v) r = dsolve(eq1,eq2,.,cond1,cond2,.,v) 这里: eqi: 表示某个微分方程,
44、若有多个即是求解微分方程组的解。 condi: 表示某个条件如初始条件或边界条件。 v: 表示按该自变量求解,其他变量为参数。 注意1:在符号求解微分方程的解时函数的导数用D来表示,如y用Dy,而y用D2y。 注意2:并不是所有的情况都可以求出解析解的,如果不能求解析解可以用前面介绍的微分方程的数值解方法来求解。,【例4.5.1】求 , 的通解, 的全解。,dsolve(Dy = a*y) % 注意D的表达意义 dsolve(Df = f + sin(t) dsolve(Dy)2 + y2 = 1,s) % 注意有四个解,ans = C1*exp(a*t) ans = -1/2*cos(t)-1/2*sin(t)+exp(t)*C1 ans = -1 1 sin(s-C1) -sin(s-C1),【例4.5.2】求微分方程组 的解。,S=dsolve(Dx=y,Dy=-x); disp(blanks(12),x,blanks(21),y) disp(S.x,S.y),