MATLAB与数学建模2014-第6章符号计算.ppt_第1页
MATLAB与数学建模2014-第6章符号计算.ppt_第2页
MATLAB与数学建模2014-第6章符号计算.ppt_第3页
MATLAB与数学建模2014-第6章符号计算.ppt_第4页
MATLAB与数学建模2014-第6章符号计算.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

2012级 MATLAB与数学建模 第6章 MATLAB符号计算 主要内容: 6.1 符号计算基础 6.2 符号导数及其应用 6.3 符号积分 6.4 级数 6.5 代数方程的符号求解 6.6 常微分方程的符号求解 2012级 MATLAB与数学建模 6.1 符号计算基础 MATLAB中符号计算函数是数值计算函数的重载, 符号计算工具箱采用的函数和数值计算的函数有一部 分同名,为得到准确的在线帮助,应该用 help sym/函数名 例如: help sym/inv 2012级 MATLAB与数学建模 6.1 符号计算基础 6.1.1 符号对象 1. 建立符号变量和符号常数 (1)sym函数 sym函数用来建立单个符号变量和符号表达式,例如 ,a=sym(a) 建立符号变量a,此后,用户可以在表达式 中使用变量a进行各种运算。 rho = sym(1+sqrt(5)/2) f = rho2-rho-1 rho = (1+sqrt(5)/2 f = (1/2+1/2*5(1/2)2-3/2-1/2*5(1/2) 2012级 MATLAB与数学建模 例6.1 考察符号变量和数值变量的差别。 在 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 det(A) %计算符号矩阵A的行列式 det(B) %计算数值矩阵B的行列式 A = a, b c, d B = 10 5 -8 11 ans = a*d-b*c ans = 150 2012级 MATLAB与数学建模 例6.2 比较符号常数与数值在代数运算时的差别。 pi1=sym(pi); k1=sym(8); k2=sym(2); k3=sym(3); % 定义符号变量 pi2=pi; r1=8; r2=2; r3=3; % 定义数值变量 sin(pi1/3) % 计算符号表达式值 sin(pi2/3) % 计算数值表达式值 sqrt(k1) % 计算符号表达式值 sqrt(r1) % 计算数值表达式值 sqrt(k3+sqrt(k2) % 计算符号表达式值 sqrt(r3+sqrt(r2) % 计算数值表达式值 ans = 1/2*3(1/2) ans = 0.8660 ans = 2*2(1/2) ans = 2.8284 ans =(3+2(1/2)(1/2) ans = 2.1010 2012级 MATLAB与数学建模 6.1 符号计算基础 (2)syms函数 syms函数的一般调用格式为: syms var1 var2 varn 函数定义符号变量var1,var2,varn等。用这种格 式定义符号变量时不要在变量名上加字符分界符(), 变量间用空格而不要用逗号分隔。 syms a b c d v符号计算的结果是符号或符号表达式,如果其中的符 号要用具体数值代替,可以用subs函数,例如将A中 的符号a以数值5代替,可以用 B=subs(A,a,5) 2012级 MATLAB与数学建模 clear; syms a b c d; A1=a,b;c,d; A2=det(A1); A3=subs(A2,a,1); A3=subs(A3,b,2); A3=subs(A3,c,3); A3=subs(A3,d,4) 例6.3 计算行列式 ,当 时计算A 的数值结果。 A3 = -2 2012级 MATLAB与数学建模 6.1 符号计算基础 2. 建立符号表达式 例6.4 用两种方法建立符号表达式。 在MATLAB窗口,输入命令: U=sym(3*x2+5*y+2*x*y+6) %定义符号表达式U syms x y; %建立符号变量x、y V=3*x2+5*y+2*x*y+6 %定义符号表达式V 2*U-V+6 %求符号表达式的值 U = 3*x2+5*y+2*x*y+6 V = 3*x2+5*y+2*x*y+6 ans = 3*x2+5*y+2*x*y+12 2012级 MATLAB与数学建模 例6.5 计算3阶范得蒙矩阵行列式的值。设A是一 个由符号变量a,b,c确定的范得蒙矩阵。 syms a b c U=a,b,c A=1,1,1;U;U.2 %建立范得蒙符号矩阵 det(A) %计算A的行列式值 U = a, b, c A = 1, 1, 1 a, b, c a2, b2, c2 ans = b*c2-c*b2-a*c2+a*b2+a2*c-a2*b 2012级 MATLAB与数学建模 6.1 符号计算基础 例6.6 建立x,y的一般二元函数。 在MATLAB命令窗口,输入命令: syms x y; f=sym(f(x,y) f = f(x,y) 2012级 MATLAB与数学建模 6.1.2 基本的符号运算 1. 符号表达式运算 (1) 符号表达式的四则运算 例6.7 符号表达式的四则运算示例。 在 MATLAB命令窗口,输入命令: syms x y z; f=2*x+x2*x-5*x+x3 %符号表达式的结果为最简形式 f=2*x/(5*x) %符号表达式的结果为最简形式 f=(x+y)*(x-y) %符号表达式的结果不是x2-y2,而是 %(x+y)*(x-y) f =-3*x+2*x3 f =2/5 f =(x+y)*(x-y) 2012级 MATLAB与数学建模 6.1 符号计算基础 (2)因式分解与展开 factor(S) 对S分解因式,S是符号表达式或符号矩阵。 expand(S) 对S进行展开,S是符号表达式或符号矩阵 。 collect(S) 对S合并同类项,S是符号表达式或符号矩阵 。 collect(S,v) 对S按变量v合并同类项,S是符号表达式 或符号矩阵。 2012级 MATLAB与数学建模 例6.8 对符号矩阵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的每个元素分解因式 A = 2*a2*b3*x2-4*a*b4*x3+10*a*b6*x4, 3*x*y- 5*x2 4, a3-b3 ans = 2*a*b3*x2*(5*b3*x2-2*b*x+a), -x*(-3*y+5*x) 4, (a-b)*(a2+a*b+b2) 2012级 MATLAB与数学建模 例6.9 计算表达式S的值。 syms x y; s=(-7*x2-8*y2)*(-x2+3*y2); expand(s) %对s展开 collect(s,x) %对s按变量x合并同类项(无同类 项) factor(ans) % 对ans分解因式 expand(cos(x+y) ans =7*x4-13*x2*y2-24*y4 ans =7*x4-13*x2*y2-24*y4 ans =(8*y2+7*x2)*(x2-3*y2) ans =cos(x)*cos(y)-sin(x)*sin(y) 2012级 MATLAB与数学建模 6.1 符号计算基础 (3)表达式化简 MATLAB提供的对符号表达式化简的函数有: simplify(S) 应用函数规则对S进行化简。 simple(S) 调用MATLAB的其他函数对表达式进 行综合化简,并显示化简过程。 例: syms x y; s=(x2+y2)2+(x2-y2)2; simple(s) %MATLAB自动调用多种函数对s进行%化简 ,并显示每步结果 ans = 2*x4+2*y4 2012级 MATLAB与数学建模 6.1 符号计算基础 2. 符号矩阵运算 transpose(S) 返回S矩阵的转置矩阵。 2012级 MATLAB与数学建模 6.1.3 符号表达式中变量的确定 MATLAB中的符号可以表示符号变量和符号常数。findsym可以 帮助用户查找一个符号表达式中的符号变量。该函数的调用格式 为:findsym(S,n) 函数返回符号表达式S中的n个符号变量,若没有指定n,则返回 S中的全部符号变量。 在求函数的极限、导数和积分时,如果用户没有明确指定自变量 ,MATLAB将按缺省原则确定主变量并对其进行相应微积分运算 。可用findsym(S,1)查找系统的缺省变量,事实上,MATLAB按 离字符x最近原则确定缺省变量。 syms a x y z t findsym(sin(pi*t) ans = t findsym(x+i*y-j*z) ans = x, y, z findsym(a+y,1) returns y. 2012级 MATLAB与数学建模 6.2 符号导数及其应用 6.2.1 函数的极限 limit函数的调用格式为:limit(f,x,a) limit函数的另一种功能是求单边极限,其调用格 式为:limit(f,x,a,right) 或 limit(f,x,a,left) 数学表达式命令格式 limit(f) limit(f,x,a)或limit(f,a) limit(f,x,a,left) limit(f,x,a,right) 2012级 MATLAB与数学建模 例6.10 求极限。 在MATLAB命令窗口,输入命令: syms a m x; f=(x(1/m)-a(1/m)/(x-a); limit(f,x,a) %求极限(1) f=(sin(a+x)-sin(a-x)/x; limit(f) %求极限(2) limit(f,inf) %求f函数在x(包括+和-) %处的极限 limit(f,x,inf,left) %求极限(3) f=(sqrt(x)-sqrt(a)-sqrt(x-a)/sqrt(x*x-a*a); limit(f,x,a,right) %求极限(4) 2012级 MATLAB与数学建模 6.2 符号导数及其应用 6.2.2 符号函数求导及其应用 MATLAB中的求导的函数为: diff(f,x,n) diff 函数求函数 f 对变量 x 的 n 阶导数。参数x 的用法同求极限函数limit,可以缺省,缺省值与 limit相同,n的缺省值是1。 2012级 MATLAB与数学建模 例6.11 求函数的导数。 syms a b t x y z; f=sqrt(1+exp(x); diff(f) %求(1)。未指定求导变量和阶数,按缺省规则处理 f=x*cos(x); diff(f,x,2) %求(2)。求f 对x的二阶导数 diff(f,x,3) %求(2)。求f 对x的三阶导数 f1=a*cos(t); f2=b*sin(t); diff(f2)/diff(f1) %求(3)。按参数方程求导公式求y对x的导数 (diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/(diff(f1)3 %求(3)。求y对 x %的二阶导数 f=x*exp(y)/y2; diff(f,x) %求(4)。z对x的偏导数 diff(f,y) %求(4)。z对y的偏导数 f=x2+y2+z2-a2; zx=-diff(f,x)/diff(f,z) %求(5)。按隐函数求导公式求z对x的偏导 数 zy=-diff(f,y)/diff(f,z) %求(5)。按隐函数求导公式求z对y的偏导 数 2012级 MATLAB与数学建模 6.2 符号导数及其应用 ans = 1/2/(1+exp(x)(1/2)*exp(x) ans = -2*sin(x)-x*cos(x) ans = -3*cos(x)+x*sin(x) ans = -b*cos(t)/a/sin(t) ans = -(a*sin(t)2*b+a*cos(t)2*b)/a3/sin(t)3 ans = exp(y)/y2 ans = x*exp(y)/y2-2*x*exp(y)/y3 zx = -x/z zy = -y/z 2012级 MATLAB与数学建模 6.2 符号导数及其应用 例6.12 在曲线y=x3+3x-2上哪一点的切线与直线 y=4x-1平行。 命令如下: x=sym(x); y=x3+3*x-2; %定义曲线函数 f=diff(y); %对曲线求导数 g=f-4; solve(g) %求方程f-4=0的根,即求曲 线%何处的导数为4 ans = 1/3*3(1/2) -1/3*3(1/2) 2012级 MATLAB与数学建模 6.3 符号积分 6.3.1不定积分 在MATLAB中,求不定积分的函数是int,其调 用格式为:int(f,x) int 函数求函数 f 对变量 x 的不定积分。参数x可 以缺省,缺省原则与diff函数相同。 2012级 MATLAB与数学建模 例6.13 求不定积分。 x=sym(x); f=(3-x2)3; int(f) %求不定积分(1) f=sqrt(x3+x4); int(f) %求不定积分(2) g=simple(ans) %调用simple函数对结果化简 ans = 27*x-1/7*x7+9/5*x5-9*x3 ans = -1/48*(x3+x4)(1/2)*(- 16*(x2+x)(3/2)+12*(x2+x)(1/2)*x+6*(x2+x)(1/2)- 3*log(1/2+x+(x2+x)(1/2)/x/(x+1)*x)(1/2) g = 1/3*(x+1)*x)(1/2)*x2+1/12*(x+1)*x)(1/2)*x- 1/8*(x+1)*x)(1/2)+1/16*log(1/2+x+(x+1)*x)(1/2) 2012级 MATLAB与数学建模 6.3.2 符号函数的定积分 定积分在实际工作中有广泛的应用。在MATLAB中,定 积分的计算使用函数:int(f,x,a,b) 例6.14 求定积分。 x=sym(x); t=sym(t); int(abs(1-x),1,2) %求定积分 (1) f=1/(1+x2); int(f,-inf,inf) %求定积分(2) int(4*t*x, x, 2, sin(t) %求 定积分(3) f=x3/(x-1)100; I=int(f, 2, 3) %求定积分(4) double(I) %将上述符号结 果转换为数值 ans = 1/2 ans = pi ans = 2*t*(sin(t)2-4) I = 97893129180187301565519001875382615 /11929783739711853203721384063601213 44 ans = 0.0821 2012级 MATLAB与数学建模 6.3 符号积分 例6.15 求椭球的体积。 命令如下: 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 2012级 MATLAB与数学建模 例6.16 轴的长度为10米,若该轴的线性密度计算公式是 f(x)=6+0.3x千克/米(其中x为距轴的端点距离),求轴的质量。 (1)符号函数积分。在MATLAB命令窗口,输入命令: sym x; f=6+0.3*x; m=int(f,0,10) (2)数值积分。 先建立一个函数文件fx.m: function fx=fx(x) fx=6+0.3*x; 再在MATLAB命令窗口,输入命令: m=quad(fx,0,10,1e-6) 6.3 符号积分 2012级 MATLAB与数学建模 6.3 符号积分 6.3.3 积分变换 1. 傅立叶(Fourier)变换 在MATLAB中,进行傅立叶变换的函数是: fourier(fx,x,t) 求函数f(x)的傅立叶像函数F(t)。 ifourier(Fw,t,x) 求傅立叶像函数F(t)的原函数f(x)。 例: syms x t; y=abs(x) Ft=fourier(y,x,t) %求y的傅立叶变换 fx=ifourier(Ft,t,x) %求Ft的傅立叶逆变换 y = abs(x) Ft = -2/t2 fx = x*(2*heaviside(x)-1) 2012级 MATLAB与数学建模 6.3 符号积分 2. 拉普拉斯(Laplace)变换 在MATLAB中,进行拉普拉斯变换的函数是: laplace(fx,x,t) 求函数f(x)的拉普拉斯像函数F(t)。 ilaplace(Fw,t,x) 求拉普拉斯像函数F(t)的原函数 f(x)。 2012级 MATLAB与数学建模 6.3 符号积分 例6.19 计算y=x2的拉普拉斯变换及其逆变换. 命令如下: x=sym(x); y=x2; Ft=laplace(y,x,t) %对函数y进行拉普拉斯变换 fx=ilaplace(Ft,t,x) %对函数Ft进行拉普拉斯逆变换 Ft = 2/t3 fx = x2 2012级 MATLAB与数学建模 6.3 符号积分 3. Z变换 对数列f(n)进行z变换的MATLAB函数是: ztrans(fn,n,z) 求fn的Z变换像函数F(z) iztrans(Fz,z,n) 求Fz的z变换原函数f(n) 例6.20 求数列 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 2012级 MATLAB与数学建模 6.4 级数 6.4.1 级数的符号求和 函数symsum用于对符号表达式求和,调用格式为: symsum(a,n,n0,nn) 对表达式a的符号变量n从n=n0到n=nn求和 例6.22 求级数之和。 命令如下: n=sym(n); s1=symsum(1/n2,n,1,inf) %求s1 s2=symsum(-1)(n+1)/n,1,inf) %求s2。未指定求和变量 ,缺省为n s3=symsum(n*xn,n,1,inf) %求s3。此处的求和变量n %不能省略。 s4=symsum(n2,1,100) %求s4。计算有限级数的和 2012级 MATLAB与数学建模 6.4 级数 6.4.2 函数的泰勒级数 MATLAB中提供了将函数展开为幂级数的函数taylor,其调 用格式为: taylor(f,x,a,k) 将函数f对x在x=a处泰勒展开到k-1项。 例6.23 求函数在指定点的泰勒展开式。 命令如下: x=sym(x); f1=(1+x+x2)/(1-x+x2); f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/3); taylor(f1,x,5) %展开到x的4次幂时应选择k=5 ans =1+2*x+2*x2-2*x4 2012级 MATLAB与数学建模 6.4 级数 例6.24 将多项式表示成x+1的幂的多项式。 命令如下: x=sym(x); p=1+3*x+5*x2-2*x3; f=taylor(p,x,-1,4) f = -8-13*x+11*(1+x)2-2*(1+x)3 2012级 MATLAB与数学建模 6.5 代数方程的符号求解 求解方程组的函数是solve,调用格式为: solve(eqn1,eqn2,eqnN,var1,var2,varN) 例6.28 解方程。 命令如下: x=solve(1/(x+2)+4*x/(x2-4)=1+2/(x-2),x) %解方程(1) f=sym(x-(x3-4*x-7)(1/3)=1); x=solve(f) %解方程(2) x=solve(2*sin(3*x-pi/4)=1) %解方程(3) x=solve(x+x*exp(x)-10,x) %解方程(4)。仅标出方程的左端 2012级 MATLAB与数学建模 例6.29 求方程组的解。 x y=solve(1/x3+1/y3-28,1/x+1/y-4,x,y) %解方程组(1) x y=solve(x+y-98,x(1/3)+y(1/3)-2,x,y) %解方程组 (2) Warning: Explicit solution could not be found. In C:MATLABR11toolboxsymbolicsolve.m at line 136 x = empty sym y = 对方程组(2)MATLAB给出了无解的结论,显然错误,请看完全 与其同构的方程组(3)。输入命令如下: u,v=solve(u3+v3-98,u+v-2,u,v) %解方程组(3) 2012级 MATLAB与数学建模 6.6 常微分方程的符号求解 MATLAB的符号运算工具箱中提供了功能强大的求解常微分方 程的函数dsolve。该函数的调用格式为: dsolve(eqn1,condition,var) 该函数求解微分方程eqn1在初值条件condition下的特解。参 数var描述方程中的自变量符号,省略时按缺省原则处理,若 没有给出初值条件condition,则求方程的通解。 dsolve在求微分方程组时的调用格式为: dsolve(eqn1,eqn2,eqnN,condition1,conditionN, var1,varN) 函数求解微分方程组eqn1、eqnN在初值条件 conditoion1、conditionN下的解,若不给出初值条件, 则求

温馨提示

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

评论

0/150

提交评论