[高等教育]第三讲 符号计算.ppt_第1页
[高等教育]第三讲 符号计算.ppt_第2页
[高等教育]第三讲 符号计算.ppt_第3页
[高等教育]第三讲 符号计算.ppt_第4页
[高等教育]第三讲 符号计算.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

1,2,第三章 符号计算,3,1. 什么是符号运算? 与数值运算的区别 数值运算中必须先对变量赋值,然后才能参与运算。 符号运算无须事先对独立变量赋值,但是必须预先定义,运算结果以标准的符号形式表达。,一 符号计算基础,符号运算重点用于解决自然科学理论中,各种公式、表达式以及相应的推导问题,4,特点: 运算对象可以是没赋值的符号变量 可以获得任意精度的解 Symbolic Math Toolbox符号运算工具包通过调用Maple软件实现符号计算的。 maple软件主要功能是符号运算, 它占据符号软件的主导地位。,5,2. 符号变量与符号表达式,f = sin(x)+5x f 符号变量名 sin(x)+5x 符号表达式 符号标识,6, 的内容可以是符号表达式,也可以是符号方程。 例: f1=ax2+bx+c 二次三项式 f2= ax2+bx+c=0 方程 f3=Dy+y2=1 微分方程 符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算,7,3.1. 建立符号变量和符号常数 (1)sym函数 sym函数用来建立单个符号量,例如,a=sym(a)建立符号变量a,此后,用户可以在表达式中使用变量a进行各种运算。,3. 符号对象,8,例 考察符号变量和数值变量的差别。 在 MATLAB命令窗口,输入命令: a=sym(a);b=sym(b);c=sym(c);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 A_d=det(A) %计算符号矩阵A的行列式 B_d=det(B) %计算数值矩阵B的行列式,9,运行结果: A = a, b c, d B = 10 5 -8 11 A_d = a*d-b*c B_d = 150,10,例 比较符号常数与数值在代数运算时的差别。,在 MATLAB命令窗口,输入命令: pi2=pi ; % 定义数值变量 pi1=sym(pi); % 定义符号变量,sin(pi1/3) % 计算符号表达式值 ans = 1/2*3(1/2),sin(pi2/3) % 计算数值表达式值 ans = 0.8660,11,k1=sym(8); k2=sym(2);k3=sym(3); % 定义符号变量 r1=8; r2=2;r3=3; % 定义数值变量,sqrt(k3+sqrt(k2) ans = (3+2(1/2)(1/2 ),sqrt(k1) ans = 2*2(1/2),sqrt(r3+sqrt(r2) ans = 2.1010,sqrt(r1) ans = 2.8284,12,符号对象建立时可以附加属性: real、positive 和 unreal, k=sym(k,positive), x=sym(x,real), x=sym(x,unreal),表明 x 是实的,表明 k 是正的,去掉 x 的附加属性,13,例:利用符号变量验证,var=sym(x,positive); %定义正的积分变量 upper=sym(b,real); %定义积分上限 lower=sym(a,real); %定义积分下限 integral=int(1/(var),lower,upper),integral =log(b)-log(a),14,(2)syms函数,syms函数的一般调用格式为: syms var1 var2 varn 函数定义符号变量var1,var2,varn等, 用这种格式定义符号变量时不要在变量名上加字符分界符(),变量间用空格而不要用逗号分隔。,例: Syms var1 var2 varn Syms var1,var2,varn,3.2. 建立符号表达式 例 用两种方法建立符号表达式。 利用sym函数: U=sym(3*x2+5*y+2*x*y+6) %定义符号表达式U 利用syms函数 syms x y; %建立符号变量x、y V=3*x2+5*y+2*x*y+6 %定义符号表达式V U-V %求符号表达式的值 ans =0 2*U-V+6 ans= 3*x2+5*y+2*x*y+12,16,例 计算3阶范得蒙矩阵行列式的值。设A是一个由符号变量a,b,c确定的范得蒙矩阵。 命令如下: syms a b 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,17,例 建立x,y的一般二元函数。 在MATLAB命令窗口,输入命令: syms x y; f=sym(f(x,y);,f = f(x,y),18,3.3.符号矩阵的创建 数值矩阵A=1,2;3,4 A=a,b;c,d 用matlab函数sym创建矩阵(symbolic 的缩写) 命令格式:A=sym( ) 符号矩阵内容同数值矩阵 需用sym指令定义 需用 标识,19,例如:A = sym(a , 2*b ; 3*a , 0) A = a, 2*b 3*a, 0 注意:符号矩阵的每一行的两端都有方括号,这是与 matlab数值矩阵的一个重要区别。,20,用字符串直接创建矩阵,模仿matlab数值矩阵的创建方法 需保证各行元素包含的字符串有相 同的长度。,例:A = a,2*b; 3*a, 0 A = a, 2*b 3*a, 0,21,符号表达式的修改,a.直接修改 可用、 键找到所要修改的表达式,直接修改 b.指令修改 用R=subs(S, old, new)来修改 将符号表达式中的符号变量old用数值型变量或表达式new替换,22,例如:, syms x y f=x2*y+5*x*sqrt(y) f = x2*y+5*x*y(1/2) subs(f,x,3) ans = 9*y+15*y(1/2) subs(f,y,3) ans = 3*x2+5*x*3(1/2), findsym(f) ans = x, y findsym(f,1) ans = x findsym(f,2) ans = x,y,23,将数值矩阵转化为符号矩阵 函数调用格式:sym(A) 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,符号矩阵与数值矩阵的转换,24,将符号矩阵转化为数值矩阵 函数调用格式: numeric(A) A = 1/3, 5/2 10/7, 2/5 numeric(A) ans = 0.3333 2.5000 1.4286 0.4000,25,4. 基本的符号运算,符号运算的运算符与函数和数值计算几乎完全相同 基础运算符: +,-,*, /等 关系运算符 三角、双曲函数 指数、对数函数 复数函数 矩阵代数命令,26,4.1. 任意精度的数学运算,在symbolic中有三种不同的算术运算: 数值类型 matlab的浮点算术运算 有理数类型 maple的精确符号运算 vpa类型 maple的任意精度算术 运算,27,浮点算术运算 1/2+1/3 (定义输出格式format long) ans = 0.83333333333333 符号运算 sym(1/2)+(1/3) ans = 5/6 精确解,28,任意精度算术运算 digits(n) 设置可变精度,缺省32位 vpa(x,n) 显示可变精度计算 digits(25) vpa(1/2+1/3) %在digits指定精度下,给出结果 ans = .8333333333333333333333333,29,vpa(5/6,40) %在40位精度下给出计算结果 ans = .8333333333333333333333333333333333333333 a=sym(1/4,exp(1);log(3),3/7) a = 1/4,exp(1) log(3), 3/7 vpa(a,10) ans = .2500000000, 2.718281828 1.098612289, .4285714286,30,4.2. 符号表达式运算 (1)符号表达式的四则运算:同数值运算 例 符号表达式的四则运算示例。 在 MATLAB命令窗口,输入命令: syms x y z; 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),31,(2)因式分解与展开 MATLAB提供处理符号表达式和符号矩阵的操作命令,例如因式分解、展开和化简等 若S为符号表达式或符号矩阵。 factor(S) 对S分解因式 expand(S) 对S进行展开 collect(S) 对S合并同类项 collect(S,v) 对S按变量v合并同类项 simple(S),simplify(S) 将S化简,32,例 对符号矩阵A的每个元素分解因式。 命令如下: syms a b x y; A=2*a2*b3*x2-4*a*b4*x3+10*a*b6*x4,3*x*y-5*x2;4,a3-b3 factor(A) %对A的每个元素分解因式,33,A = 2*a2*b3*x2-4*a*b4*x3+10*a*b6*x4, 3*x*y-5*x2 4, a3-b3 ans = 2*b3*a*x2*(5*b3*x2-2*b*x+a), x*(-5*x+3*y) 4, -(b-a)*(b2+b*a+a2),34,在有理数范围内对多项式 进行因式分解,其中n是1,8范围内的整数,syms x y n=1:8; p=x.n-y.n; f=factor(p),f = x-y -(y-x)*(x+y) -(y-x)*(y2+x*y+x2) -(y-x)*(x+y)*(y2+x2) -(y-x)*(y4+y3*x+y2*x2+y*x3+x4) -(y-x)*(x+y)*(y2+x*y+x2)*(y2-x*y+x2) -(y-x)*(y6+y5*x+y4*x2+y3*x3+y2*x4+y*x5+x6) -(y-x)*(x+y)*(y2+x2)*(y4+x4),35,例:将符号矩阵元素展开,syms alpha theta a b x y r1=expand(sin(alpha+theta); r2=expand(2(x+y); r3=expand(a+b)3); r=r1;r2;r3 r = sin(alpha)*cos(theta)+cos(alpha)*sin(theta) 2x*2y a3+3*a2*b+3*a*b2+b3,36,例 计算表达式S的值。 命令如下: syms x y; s=(-7*x2-8*y2)*(-x2+3*y2); expand(s) %对s展开 collect(s,x) %对s按变量x合并同类项(无同类项) factor(ans) % 对ans分解因式,37,s=(-7*x2-8*y2)*(-x2+3*y2); %原始符号表达式 运算结果: ans = 7*x4-13*x2*y2-24*y4 %展开 ans =7*x4-13*x2*y2-24*y4 %合并同类项(无) ans =(8*y2+7*x2)*(x2-3*y2) %因式分解,38,collect(S,v)及collect(S)的用法: syms x y collect(x2*y+y*x-x2-2*x) ans = (y-1)*x2+(y-2)*x collect(x2*y+y*x-x2-2*x,x) ans = (y-1)*x2+(y-2)*x collect(x2*y+y*x-x2-2*x,y) ans = (x2+x)*y-x2-2*x,39,(3)表达式化简 MATLAB提供的对符号表达式化简的函数有: simplify(S) 应用函数规则对S进行化简。 simple(S) 调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。 例 化简公式 命令如下: syms x y; s=(x2+y2)2+(x2-y2)2; simple(s) %MATLAB自动调用多种函数对s进行化简,并显示每步结果,40,simple(s)执行过程中调用的函数 simplify: 2*x4+2*y4 radsimp: 2*x4+2*y4 combine(trig): 2*x4+2*y4 factor: 2*x4+2*y4 expand: 2*x4+2*y4 combine: (x2+y2)2+(x2-y2)2 convert(exp): (x2+y2)2+(x2-y2)2 convert(sincos): (x2+y2)2+(x2-y2)2 convert(tan): (x2+y2)2+(x2-y2)2 collect(x): 2*x4+2*y4 mwcos2sin: (x2+y2)2+(x2-y2)2 ans = 2*x4+2*y4,41,R, how=simple(s) R = 2*y4+2*x4 how = simplify,42,4.3. 符号矩阵运算,关于矩阵代数运算、数值运算和符号运算几乎相同 1、符号矩阵的四则运算 符号矩阵的四则运算与幂运算可直接用:+、*、.*、/、./、.、.实现。, B=sym(a,b;c,d); C=sym(x,y;z,w); B*C ans = a*x+b*z, a*y+b*w c*x+d*z, c*y+d*w,43,2、符号矩阵的其他运算,(1)转置运算:、., B=sym(a,b;c,d); B %求转置共轭 conj(a), conj(c) conj(b), conj(d) B. %求转置 a, c b, d,B = a, b c, d,44,(2)行列式运算:det,(3)求逆:inv(A)或A(-1),(4)求秩:rank(A),(5)求特征值:V,D=eig(A), A=sym(1,2;3,4) eig(A),A = 1, 2 3, 4 ans = 5/2+1/2*33(1/2) 5/2-1/2*33(1/2),45,4.3 符号表达式中变量的确定 MATLAB中的符号可以表示符号变量和符号常数。findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为: findsym(S,n) 函数返回符号表达式S中的n个符号变量,若没有指定n,则返回S中的全部符号变量。 在求函数的极限、导数和积分时,如果用户没有明确指定自变量,MATLAB将按缺省原则确定主变量并对其进行相应微积分运算。 可用findsym(S,1)查找系统的缺省变量,事实上,MATLAB按离字符x最近原则确定缺省变量。,46,二、符号微积分,47,表达式的极限是微分的基础 求表达式极限的命令用“limit”,基本用法见下表,1. 符号极限运算,48,例 求函数f (x) = ax2+bx+c的极限。,解 输入及结果如下:,f2 = a*x2+3*x+c,syms a b c x,f = a*x2+b*x+c,f1 = limit (f,x,2),f1 = 4*a+2*b+c,f2 = limit (f,b,3),49,例 求函数f (x) = axy+bx+cy+d的极限。,解 输入及结果如下:,f2 = 3*a*x+b*x+3*c+d,syms a b c d x;,f = a*x*y+b*x+cy+d;,f1 = limit (f,x,3),f1 = 3*a*y+3*b+c*y+d,f2 = limit (f,y,3),50,例 用导数定义求函数 f (x)=cos(x)的导数。,解 输入及结果如下:,ans = - sin(x),syms t x,limit ( (cos (x+t)-cos (x) )/ t, t,0),51,求导数用命令“diff”,相关的语法见下表,2. 符号微分运算,52,例、求函数f (x) = ax2+bx+c的导数。,解 输入及结果如下:,f4=0,syms a b c x,f1=diff(a*x2+b*x+c) %缺省对x求微分,f1=2*a*x+b,f2=diff(a*x2+b*x+c,2) %对x求二次微分,f2=2*a,f3=diff(f,a) %对a求微分,f3=x2,f4=diff(f,a,2), f=a*x2+b*x+c,53,运用命令“ int ”可以求函数式的积分但是,函数的积分不可能都存在,即使有时存在,也可能限于软件无法顺利表达出来当MATLAB不能找到积分时,它将返回函数表达式运用“ int ”的语法见下表,2. 符号积分运算,54,解 输入及结果如下:,syms a b c x,f=a*x2+b*x+c,f1=int(f),f1 =1/3*a*x3+1/2*b*x2+c*x,例 求,55,f4=int(int(f,a),x) %双重积分,f2=int(f,x,0,2),f2 =8/3*a+2*b+2*c,f3=int(f,a) %对a积分,f3=1/2*a2*x2+b*x*a+c*a,f4 =1/6*a2*x3+1/2*b*x2*a+c*a*x,56,例 求椭球的体积。 命令如下: syms a b c z; f=pi*a*b*(c2-z2)/c2; V=int(f,z,-c,c) V = 4/3*pi*a*b*c,57,3. 符号积分变换,数学变换中通过积分运算将一类函数转变为另一种函数,使得计算分析更为简洁 三个主要积分变换: 傅里叶变换 拉普拉斯变换 Z 变换,58,(1). 傅立叶(Fourier)变换 在MATLAB中,进行傅立叶变换的函数是: fourier(fx,x,t) 求函数f(x)的傅立叶像函数F(t)。 ifourier(Fw,t,x) 求傅立叶像函数F(t)的原函数f(x)。,59,例 求函数的傅立叶变换及其逆变换。 命令如下: syms x t; y=abs(x); Ft=fourier(y,x,t) %求y的傅立叶变换 fx=ifourier(Ft,t,x) %求Ft的傅立叶逆变换,Ft =-2/t2 fx = x*(2*heaviside(x)-1) %heaviside阶跃函数,60,(2). 拉普拉斯(Laplace)变换 在MATLAB中,进行拉普拉斯变换的函数是: laplace(fx,x,t) 求函数f(x)的拉普拉斯像函数F(t)。 ilaplace(Fw,t,x) 求拉普拉斯像函数F(t)的原函数f(x)。,61,例 计算y=x2的拉普拉斯变换及其逆变换. 命令如下: x=sym(x);y=x2; Ft=laplace(y,x,t) %对函数y进行拉普拉斯变换 fx=ilaplace(Ft,t,x) %对函数Ft进行拉普拉斯逆变换,Ft = 2/t3 fx =x2,62,(3). Z变换 对数列f(n)进行z变换的MATLAB函数是: ztrans(fn,n,z) 求fn的Z变换像函数F(z) iztrans(Fz,z,n) 求Fz的z变换原函数f(n),63,例 求数列 fn=e-n的Z变换及其逆变换。 命令如下: syms n z fn=exp(-n); Fz=ztrans(fn,n,z) %求fn的Z变换 f=iztrans(Fz,z,n) %求Fz的逆Z变换,Fz =z/exp(-1)/(z/exp(-1)-1) f =exp(-1)n,64,三、符号方程和符号微分方程,65,1. 一般符号代数方程的求解,求解函数是solve,调用格式为: solve(eqn1,eqn2,eqnN,var1,var2,varN) 其中eqn1,eqn2,eqnN等为符号表达式或不带符号的字符串;var1,var2,varN 为自变量,66,例 解方程。 命令如下: x1=solve(1/(x+2)+4*x/(x2-4)=1+2/(x-2),x) %解方程(1) f=sym(x-(x3-4*x-7)(1/3)=1); x2=solve(f) %解方程(2) x3=solve(2*sin(3*x-pi/4)=1) %解方程(3) x4=solve(x+x*exp(x)-10,x) %解方程(4)。仅标出方程的左端,x1 =1 x2 =3 x3 =5/36*pi x4 =1.633506170155846384193165178978923428636,67,例 求方程组 的解。 命令如下: x y=solve(1/x3+1/y3=28,1/x+1/y=4,x,y) x = 1 1/3 y = 1/3 1,68,2. 符号线性方程组的求解,求解线性方程组的函数是linsolve,调用格式为: linsolve(A,B) 它的结果与sym(A)/sym(B)相同,69,3. 符号非线性方程组的求解,求解函数是fsolve,调用格式为: fsolve(f,X0) 以X0为初始矩阵来求解方程f 例:求解下列方程组 3x2-y2=0 3xy2-x2-1=0,70,解微分方程的基本操作命令见下表,4. 常微分方程的符号求解,71,例 求以下微分方程和微分方程组:,的特解。,72,解 输入及结果如下:,syms x y,y=dsolve(Dy=x,x),y =1/2*x2+C1,dsolve (D2y= Dy+1,x),ans =-x+C1+C2*exp(x),dsolve(D2y= Dy+1,y(0)=1,Dy(0)=0,x),ans =-x+exp(x),(1),(2),(3),73,1. 级数的符号求和 级数符号求和函数symsum,调用格式为: symsum(s,v,a,b) 符号表达式S中的变量v从a到b的有限和,四、符号级数运算,74,例 求级数 之和。 命令如下: n=sym(n); s1=symsum(1/n2,n,1,inf) %求s1 s1 = 1/6*pi2,75,函数的泰勒级数,MATLAB提供了taylor函数将函数展开为幂级数,其调用格式为: taylor(f,v,n,a) 该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。,76,例 求函数在指定点的泰勒展开式。 命令如下: x=sym(x); f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/3); taylor(f2,6) %求泰勒展开式 ans = 1/6*x2+x3+119/72*x4+239/72*x5,77,1. 函数曲线图 ezplot(F, a,b) 作函数F在a,b上的图 F可以是显函数、隐函数或参变量函数 其表示可以是字符串、函数句柄、 Inline 函数或匿名函数. a,b 缺省为-2*pi, 2*pi,五、符号分析可视化,78,例:绘出符号表达式 在0,10间的曲线,程序: syms x y=x2+exp(x); ezplot(y,0,10),79,ezpolar(F, a,b) 作极坐标函数F()在 ab上的图, a,b 缺省值为0, 2*pi ezplot3(x,y,z,a,b) 作曲线x=x(t),y=y(t),z=z(t)在atb上 的三维曲线图, a,b的缺省值为0, 2*pi,2 .函数曲面图 ezmesh(z, a,b,c,d) 作函数z(x,y)在 axb, cyd上的图,80,ezmesh(x,y,z,a,b,c,d) 作参变量函数x(s,t),y(s,t), z(s,t)在 asb,ctd上的图 函数用字符串、函数句柄、Inline函数 或匿名函数 ezmesh(, n) 网格用n2个节点, n的缺省值为60. 类似命令有ezsurf, ezcontour等,81,1、符号计算局限性 (1)许多问题没有解析解,一般无法用符号计算求解; (2)速度太慢,尤其是高维问题; (3)数值近似求解算法参数设置不够灵活,往往不能满足实际需要; (4

温馨提示

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

评论

0/150

提交评论