三章符号运算功能.ppt
三章符号运算功能 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望(2)MATLAB还保留着maple.m mpa.m 与 Maple 接口3.1 字符串及字符串函数字符串及字符串函数 3.1.1 字符串的约定1.s=matrix laboratory s=matrix laboratory 2.字符串的每个字符(包括空格)都是矩阵相应的一个元素 size(s)ans=1 173.字符串和字符数组(或矩阵)基本上是等价的。s(3)ans=t3.1.2 字符串函数字符串函数1.字符数组的生成字符数组的生成 函数 char 可以生成字符数组或矩阵例 s3=char(s,y,m,b,o,l,i,c);s3;ans=symbolic2.字符串和数值数组之间的转换字符串和数值数组之间的转换字符串转换为数值代码 doubledouble(s3)ans=115 121 109 98 111 108 105 99字符数组转换为字符串 cellstrcellstr(s3)ans=s y m b o l i c数值数组和字符串之间的转换num2str 数字转换为字符串int2str 整数转换为字符串mat2str 矩阵转换为字符串str2num 字符串转换为数字sprintf 格式数据写为字符串sscanf 在格式控制下读字符串示例 a=1:5;b=num2str(a);a*2ans=2 4 6 8 10b*2ans=Columns 1 through 12 98 64 64 100 64 64 102 64 64 104 64 64 Column 13 106str2num(b)*2ans=2 4 6 8 103.字符串操作字符串操作MATLAB对字符串操作与C语言几乎相同4.执行字符串 函数 evald=cd;eval(d)D:matlab5.1binn=4;t=1/(i+j-1);a=zeros(n);for i=1:n for j=1:n a(i,j)=eval(t);end endaa=1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.14293.2 符号表达式的生成符号表达式的生成符号表达式:符号函数、符号方程1.创建符号函数 f=log(x)f=log(x)2.创建符号方程equation=a*x2+b*x+c=0;equationequation=a*x2+b*x+c=03.创建符号微分方程 diffeq=Dy-y=x diffeq=Dy-y=x或用 sym 命令创建f=sym(sin(x)f=sin(x)f=sym(sin(x)2=0)f=sin(x)2=0或用 syms 命令创建syms xf=sin(x)+cos(x)f=sin(x)+cos(x)3.3 符号函数的运算符号函数的运算3.3.1 复合函数的运算函数 compose compose(f,g)sym 符号定义函数syms x y z t u;f=1/(1+x2);g=sin(y);h=xt;p=exp(-y/u);compose(f,g)ans=1/(1+sin(y)2)compose(f,g,t)ans=1/(1+sin(t)2)compose(h,g,x,z)ans=sin(z)t compose(h,g,t,z)ans=xsin(z)compose(h,p,x,y,z)ans=exp(-z/u)t compose(h,p,t,u,z)ans=xexp(-y/z)3.3.2 反函数的运算反函数的运算函数 finversefinverse ,g=finverse(f),g=finverse(f,v)f=x2+y;finverse(f,y)ans=-x2+y finverse(f)Warning:finverse(x2+y)is not unique.In d:matlab5.1toolboxsymbolicsymfinverse.m at line 43ans=(-y+x)(1/2)3.4 符号矩阵的创立符号矩阵的创立3.4.1 使用使用sym函数直接创建符号矩阵函数直接创建符号矩阵矩阵元素可以是任何不带等号的符号表达式a=sym(1/s+x,sin(x)cos(x)2/(b+x);9,exp(x2+y2),log(tanh(y)a=1/s+x,sin(x),cos(x)2/(b+x)9,exp(x2+y2),log(tanh(y)3.4.2 用创建子阵的方法创建符号矩阵用创建子阵的方法创建符号矩阵仿照 MATLAB的字符串矩阵的直接输入法而设计,不必调用sym 命令,但要保证同一列的各元素字符串具有相同的长度。ms=1/s,sin(x);1 ,exp(x)ms=1/s,sin(x)1 ,exp(x)b=a;exp(-i),3,x3+y9b=1/s+x,sin(x),cos(x)2/(b+x)9,exp(x2+y2),log(tanh(y)exp(-i),3,x3+y93.4.3 将数值矩阵转化为符号矩阵将数值矩阵转化为符号矩阵a=2/3,sqrt(2),0.222;1.4,1/0.23,log(3)a=0.6667 1.4142 0.2220 1.4000 4.3478 1.0986b=sym(a)b=2/3,sqrt(2),111/500 7/5,100/23,4947709893870347*2(-52)3.4.4 符号矩阵的索引和修改符号矩阵的索引和修改b(1,2)%矩阵的索引 ans=sqrt(2)b(2,3)=log(9)%矩阵的修改 b=2/3,sqrt(2),111/500 7/5,100/23,log(9)3.5 符号矩阵的运算符号矩阵的运算3.5.1 基本运算基本运算 1.符号矩阵的四则运算符号矩阵的四则运算a=sym(1/x,1/(x+1);1/(x+2),1/(x+3);b=sym(x,1;x+2,0);b-a ans=x-1/x,1-1/(x+1)x+2-1/(x+2),-1/(x+3)ab ans=-6*x-2*x3-7*x2,3/2*x2+x+1/2*x3 6+2*x3+10*x2+14*x,-1/2*x3-2*x2-3/2*x2.符号矩阵的其它一些基本运算符号矩阵的其它一些基本运算矩阵转置()、行列式(det)、逆(inv)、秩(rank)、幂()、指数(exp,expm)3.5.2 符号矩阵的分解大多数符号矩阵分解方法与数值矩阵分解函数相同,函数 eig svd diag tril trin求解约当标准型函数 jordana=sym(1 1 2;0 1 3;0 0 2)a=1,1,2 0,1,3 0,0,2?x,y=jordan(a)%x 变换矩阵,y 约当标准型x=5,-5,-5 3,0,-5 1,0,0y=2,0,0 0,1,1 0,0,1 3.5.3 符号矩阵的简化符号矩阵的简化Symbolic工具箱提供了:矩阵因式分解、展开、合并、简化、通分等操作。1.因式分解函数 factor ,factor(S)syms xfactor(x9-1)ans=(x-1)*(x2+x+1)*(x6+x3+1)2.符号矩阵的展开符号矩阵的展开函数 expand ,expand(S)适用于:多项式、三角函数、指数函数、对数函数等展开syms x yexpand(x+1)3)ans=x3+3*x2+3*x+1 expand(sin(x+y)ans=sin(x)*cos(y)+cos(x)*sin(y)3.同类式合并同类式合并函数 collect 合并系数函数 collect(S,v)将符号矩阵S中的各元素的v的同幂系数合并。collect(S)对由findsym 函数返回的默认变量进行同类项合并。4.符号简化 simlpe 、simplify函数 simlpe simple(S)寻找符号矩阵或符号表达式的最简型。R,HOW=simple(S)P.75 表4-3函数 simplify simplify(S)符号简化函数syms c alpha betasimplify(exp(c*log(sqrt(alpha+beta)ans=(alpha+beta)(1/2*c)5.分式通分分式通分numden 求解符号表达式的分子和分母N,D=numden(A)把A的各元素转换为分子和分母都是整系数的最佳分式3.6 符号微积分符号微积分3.6.1 符号极限 limit limit(F,x,a)limit(F,a)limit(F)limit(F,x,a,right)举例syms x a t h;?limit(sin(x)/x)ans=1?limit(1+2*t/x)(3*x),x,inf)ans=exp(6*t)?limit(1/x,x,0,right)ans=inf3.6.2 符号积分int 积分函数int(S)int(S,v)int(S,a,b)int(S,v,a,b)syms x x1 alpha u t;?A=cos(x*t),sin(x*t);-sin(x*t),cos(x*t);?int(A,t)ans=sin(x*t)/x,-cos(x*t)/x cos(x*t)/x,sin(x*t)/x?int(x1*log(1+x1),0,1)ans=1/4 symsum 符号合计函数3.6.3 符号微分和差分符号微分和差分1.微分和差分函数 diff diff(S)diff(S,v)diff(S,n)diff(S,v,n)x=sym(x);?t=sym(t);?diff(sin(x2)ans=2*cos(x2)*x?diff(t6,6)ans=7202.梯度函数梯度函数近似梯度函数 gradientFX,FY=gradient(F)返回函数F的数值梯度,FX相当于dF/dx 差分值FX,FY=gradient(F,H),FX,FY=gradient(F,HX,HY)FX,FY,FZ=gradient(F)返回三维梯度用用gradient 绘制一矢量图绘制一矢量图x,y=meshgrid(-2:0.2:2,-2:0.2:2);?z=x.*exp(-x.2-y.2);?px,py=gradient(z,0.2,0.2);?contour(z);?hold on?quiver(px,py)?hold off3.多元函数的导数在MATLAB中,多元函数的导数由 jacobian 函数来实现jacobian(f,v)f 向量函数或函数、v 向量例:求函数的jacobi 矩阵 syms x y?jacobian(x2+y2;x2-y2,x,y)ans=2*x,2*y 2*x,-2*y3.7 符号代数方程求解符号代数方程求解3.7.1 线性方程组的解析解法线性方程组的解析解法linsolve solvea=sym(10-1 0;-1 10-2;0-2 10);?b=(9;7;6);?linsolve(a,b)ans=473/475 91/95 376/4753.7.2 非线性方程的解析解法函数 fsolve 以最小二乘法求解非线性方程X=fsolve(FUN,X0)FUN是待求解的函数名,以M文件的形式给出,X0 求解方程的初始向量或矩阵举例:编制函数文件fc.mfunction y=fc(x)y(1)=x(1)-0.7*sin(x(1)-0.2*cos(x(2);y(2)=x(2)-0.7*cos(x(1)+0.2*sin(x(2);y=y(1)y(2);在MATLAB的窗口中输入:x0=0.5 0.5;fsolve(fc,x0)ans=0.5265 0.5079 3.8 符号微分方程求解符号微分方程求解dsolve 常微分方程的解析解dsolve(eqn1,eqn2,)dsolve(Dx=-a*x)ans=exp(-a*t)*C1x=dsolve(Dx=-a*x,x(0)=1,s)x=exp(-a*s)3.9 符号函数的二维图符号函数的二维图1.符号函数的简易绘图函数 ezplot ezplot 绘制 f(x)的函数图 x轴的默认范围-2*pi,2*piezplot(f,xmin,xmax)ezplot(f,xmin,xmax)举例?ezplot(erf(x)?ezplot erf(x)2.绘制函数图函数 fplotfplot(fun,lims)lims=xmin xmaxfplot(fun,lims,lineSpace)subplot(2,2,1),fplot(humps,0 1)?subplot(2,2,2),fplot(abs(exp(-j*x*(0:9)*ones(10,1),0 2*pi)?subplot(2,2,3),fplot(tan(x),sin(x),cos(x),2*pi*-1 1-1 1)?subplot(2,2,4),fplot(sin(1./x),0.01 0.1,1e-3)3.10 Maple 接口直接调用命令maple mfun