1 / 34

Matlab 符号运算介绍

Matlab 符号运算介绍. Matlab 符号运算(二). Matlab 符号运算是通过符号数学工具箱( Symbolic Math Toolbox ) 来实现的。. 符号对象的建立: sym 和 syms. 例:. <==>. >> x=sym( ‘ x ’ ) ; >> y=sym( ‘ y ’ ) ; >> z=sym( ‘ z ’ ) ;. >> syms x y z. 符号对象建立时可以附加属性: real 、 positive 和 unreal. Matlab 符号运算(二). 表明 x 是实的.

nairi
Download Presentation

Matlab 符号运算介绍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Matlab 符号运算介绍 Matlab 符号运算(二) • Matlab符号运算是通过符号数学工具箱(Symbolic Math Toolbox)来实现的。 • 符号对象的建立:sym 和 syms 例: <==> >> x=sym(‘x’); >> y=sym(‘y’); >> z=sym(‘z’); >> syms x y z

  2. 符号对象建立时可以附加属性:real、positive 和unreal Matlab 符号运算(二) 表明 x 是实的 >> x=sym('x','real') >> k=sym('k','positive') 表明 k 是正的 去掉 x 的附加属性 >> x=sym('x','unreal')

  3. 符号表达式的建立 Matlab 符号运算(二) >> syms x >> f1=sin(x)+cos(x) 推荐! >> f2=sym(’sin(x)+cos(x)’) 用这种方法创建的符号表达式对空格很敏感,不要在字符间随意添加空格! >> f3=’sin(x)+cos(x)’ • 符号变量与符号常量 >> a=sym(‘a’); >> b=sym(‘5’); >> c=sym(5); b、c有区别吗?hint:help sym

  4. 相关函数 Matlab 符号运算(二) • findsym: 查找符号表达式中的符号变量 findsym(f)按字母顺序列出符号表达式 f中的所有自由变量findsym(f,N)列出 f中距离 x最近的 N个自由变量(i,j 除外) 例: >> a=sym('a');x=sym('x');k=sym('3'); >> f=k*x+a; >> findsym(f) ans=a,x 默认自变量=findsym(f,1)

  5. 相关函数 Matlab 符号运算(二) • subs:符号替换 subs(f): 用当前工作空间中存在的变量值,替换 f中所有出现的相同的变量,并进行简化计算。 subs(f,x,a):用 a替换 f 中的 x ;a是可以是 数/数值变量/表达式 或 符号变量/表达式。 若x与a为相同大小的向量或矩阵,则用a中相应的元素替换x中的元素; 若f,x为标量,而a是向量或矩阵,则f与x将扩展为与a相同形状的向量或矩阵。

  6. 例: Matlab 符号运算(二) >> syms x y >> f=2*x+y; >> x=3,y=4; >> subs(f) >> subs(f,x,’a’) ans=10 ans=2*x+y >> syms x y a b >> f=2*x+y; >> subs(f,[x,y],[3,4]) >> subs(f,{x,y},{3,4}) >> subs(f,x,[1:3]) >> subs(f,{x,y},{[1:3],[5:7]})>> subs(f,{x,y},{a+b,a-b}) >> subs(f,{x,y},{x+y,x-y}) ans=10 ans=[2+y,4+y,6+y] ans=[7 10 13] ans=3*a+b ?

  7. 符号矩阵 Matlab 符号运算(二) • 使用sym函数直接生成 >> A=sym(’[1+x, sin(x); 5, exp(x)]’) • 将数值矩阵转化成符号矩阵 >> B=[2/3, sqrt(2); 5.2, log(3)] >> C=sym(B) 能否用sym(‘B’)? • 符号矩阵中元素的引用和修改 >> A=sym(’[1+x, sin(x); 5, exp(x)]’) >> A(1,2) >> A(2,2)=sym(’cos(x)’)

  8. 符号矩阵的基本运算 Matlab 符号运算(二) 符号矩阵的基本运算与数值矩阵的基本运算相类似。 1) 基本运算符:+、-、*、\、/、^、.*、.\、./、.^、’、.’ 2) 三角函数与反三角函数:sin、cos、tan、… … 3) 指数、对数函数:sqrt、exp、log、… … 4) 复数函数:real、imag、conj、 abs 5) 矩阵函数:det、inv、rank、 … … (没有norm) 6) 矩阵元素的抽取:diag、tril、triu

  9. 六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 因式分解:factor >> syms x >> f=x^6 +1 >> s=factor(f) s =(1+x^2)*(x^4-x^2+1) factor 也可用于正整数的分解

  10. 大整数的分解 Matlab 符号运算(二)

  11. 展开函数: expand Matlab 符号运算(二) • 多项式展开 该函数经常用于多项式展开,也常用于三角函数、指数函数和对数函数的展开中。 三角函数展开

  12. 合并同类项: collect Matlab 符号运算(二) • collect(f,v): 按指定变量 v的次数合并系数; • collect(f): 合并 f 中的默认自变量的各项系数。 findsym(f,1)

  13. 简化函数: simple 和simplify Matlab 符号运算(二) • simple(f): 对 f 尝试多种不同的算法简化, 返回其中最短的简化形式; • [R,HOW]=simple(f): R为f的最短简化形式,HOW中记录的为简化过程中使用的主要方法。 simple函数示例

  14. Matlab 符号运算(二) • simplify(f): 简化函数 注:多次 使用 simple 可以达到最简表达。

  15. Matlab 符号运算(二) 例:化简

  16. 分式通分: numden Matlab 符号运算(二) [N,D]=numden(f): N为通分后的分子,D为通分后的分母

  17. horner多项式:嵌套形式的多项式 Matlab 符号运算(二) 例:

  18. 六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 limit(f,x,a): 计算 limit(f,a): 计算默认自变量趋向于a时f的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,’right’):右极限limit(f,x,a,’left’):左极限

  19. 例:求极限 Matlab 符号运算(二) >> syms h n x >> L=limit((log(x+h)-log(x))/h,h,0) >> M=limit((1-x/n)^n,n,inf) L=1/x M=exp(-x) >> syms x >> L=limit(abs(x)/x,x,0,’left') >> R=limit(abs(x)/x,x,0,’right') L=-1 M=1

  20. 六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 diff(f,’v’): 计算 f关于变量 v的导数 diff(f): 计算 f 关于默认自变量的导数 diff(f,n),diff(f,’v’,n),diff(f,n,’v’): n次求导

  21. 例:设 y=sin(ax),求 Matlab 符号运算(二) >> syms a x >> y=sin(a*x) >> A=diff(y,x) >> B=diff(y,a) >> C=diff(y,x,2) >> D=diff(y,a,2) A=cos(a*x)*a B=cos(a*x)*x C=-sin(a*x)*a^2 D=-sin(a*x)*x^2

  22. 六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 • 计算积分 int(f,v,a,b):计算定积分 int(f,a,b): 计算 f 关于默认自变量 的定积分 int(f,v):计算不定积分 int(f):计算 f 关于默认自变量 的不定积分

  23. 例:求积分 Matlab 符号运算(二) >> syms x >> f=(x^2+1)/(x^2-2*x+2)^2; >> I=int(f) >> g=cos(x)/(sin(x)+cos(x)); >> J=int(g,x,0,pi/2) >> h=exp(-x^2); >> K=int(h,x,0,inf) I=3/2*atan(x-1)+1/4*(2*x-6)/(x^2-2*x+2) J=1/4*pi K=1/2*pi^(1/2)

  24. 六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 • 计算积分 • 符号求和 symsum(f,v,a,b): 求和 symsum(f,a,b): 关于默认自变量 求和。

  25. 例:求级数 ,以及其前10项的部分和。 Matlab 符号运算(二) >> syms n >> S=symsum(1/n^2,n,1,inf) >> S10=symsum(1/n^2,n,1,10) S=1/6*pi^2 S10=1968329/1270080 例:求函数级数 >> syms n x >> S=symsum(x/n^2,n,1,inf) S=1/6*x*pi^2

  26. 六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 • 计算积分 • 符号求和 • 解代数方程和微分方程(见实验三、六)

  27. 其它运算 Matlab 符号运算(二) • 复合函数计算:compose compose(f,g): 返回f(g(y)),其中f=f(x),g=g(y), x,y 分别是 f 和 g 的默认自变量。 compose(f,g,z):返回f(g(z)),其中x,y 分别是 f,g的默认自变量,最后用符号变量z代替y。 compose(f,g,v,z):返回f(g(z)),v为f中指定的自变量,令v=g(z),代入 f=f(v)。 compose(f,g,v,w,z):返回f(g(z)),其中v,w分别为f,g的指定自变量,即将v=g(w)代入f(v),最后用z代替w。

  28. 例: Matlab 符号运算(二) >> syms x y z u t >> f=cos(x/t); y=sin(y/u); >> compose(f,g) >> compose(g,f) >> compose(f,g,z) >> compose(f,g,x,z) >> compose(f,g,t,z) >> compose(f,g,t,y,z) >> compose(f,g,t,u) >> compose(f,g,t,u,z) ans=cos(sin(y/u)/t) ans=sin(cos(x/t)/u) ans=cos(sin(z/u)/t) ans=cos(x/sin(z/u)) ans=cos(x/sin(y/u)) ans=cos(x/sin(y/z))

  29. 其它运算 Matlab 符号运算(二) • 复合函数计算:compose • 计算反函数:finverse finverse(f): 返回f关于默认自变量的反函数, 若f的反函数g存在,则有g(f(x))=x。 finverse(f,v): 返回f关于自变量v的反函数g, 即 g(f(v))=v。

  30. 例: Matlab 符号运算(二) >> syms x t >> f=x^2+2*t; >> finverse(f) >> finverse(f,y) Warning: finverse(x^2+2*t) is not unique ans=(-2*t+x)^(1/2) ans=-1/2*x^2+1/2*t

  31. 作业: Matlab 符号运算(二) >> syms a b x X Y >> k=sym(’3’); >> z=sym('c*sqrt(delta)+y*sin(theta)'); >> f=a*z*X+(b*x^2+k)*Y; exp(i*x)? 1.化简 2. 试写出下面命令的结果,上机验证,并说明理由: >> findsym(f) >> findsym(f,1) >> findsym(f,2) >> findsym(f,3)

  32. 作业: Matlab 符号运算(二) >>syms a b t u v x y; >>A=[a+b*x,sin(t)+u; x*exp(-t),log(y)+v]; 3.设A是一个符号矩阵(定义如下),试指出findsym(A,1)的输出结果,并由此得出结论: findsym 确定自由变量时,是对整个矩阵进行的,还是对各个矩阵元素分别进行? 4.(1)设 求复合函数 f(g(z)); (2)设 求复合函数 f(g(z))。 思考:本题除了用compose函数外,是否有其它方法?

  33. 作业: Matlab 符号运算(二) >> a=sym(‘12345678901234567890’); >> b=sym(12345678901234567890); 5.设a、b定义如下,试上机输出factor(a)和factor(b)的结果,并指出那个结果才是12345678901234567890的因式分解,为什么?

  34. 作业: Matlab 符号运算(二) syms a x; f=a*sin(x)+5; f1=subs(f,'sin(x)',sym('y')) f2=subs(f,{a,x},{2,sym(pi/3)}) f3=subs(f,{a,x},{2,pi/3}) f4=subs(subs(f,a,2),x,0:pi/6:pi) f5=subs(f,{a,x},{0:6,0:pi/6:pi}) 6.替换函数subs的使用。 (1)试指出下面程序中的f1、f2、f3、f4、f5的值。 (2)试指出下面替换的结果,并说明理由。 >> syms x y; f=2*x+y; >> subs(f,{x,y},{x+y,x-y})

More Related