340 likes | 904 Views
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 是实的.
E N D
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 是实的 >> x=sym('x','real') >> k=sym('k','positive') 表明 k 是正的 去掉 x 的附加属性 >> x=sym('x','unreal')
符号表达式的建立 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
相关函数 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)
相关函数 Matlab 符号运算(二) • subs:符号替换 subs(f): 用当前工作空间中存在的变量值,替换 f中所有出现的相同的变量,并进行简化计算。 subs(f,x,a):用 a替换 f 中的 x ;a是可以是 数/数值变量/表达式 或 符号变量/表达式。 若x与a为相同大小的向量或矩阵,则用a中相应的元素替换x中的元素; 若f,x为标量,而a是向量或矩阵,则f与x将扩展为与a相同形状的向量或矩阵。
例: 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 ?
符号矩阵 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)’)
符号矩阵的基本运算 Matlab 符号运算(二) 符号矩阵的基本运算与数值矩阵的基本运算相类似。 1) 基本运算符:+、-、*、\、/、^、.*、.\、./、.^、’、.’ 2) 三角函数与反三角函数:sin、cos、tan、… … 3) 指数、对数函数:sqrt、exp、log、… … 4) 复数函数:real、imag、conj、 abs 5) 矩阵函数:det、inv、rank、 … … (没有norm) 6) 矩阵元素的抽取:diag、tril、triu
六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 因式分解:factor >> syms x >> f=x^6 +1 >> s=factor(f) s =(1+x^2)*(x^4-x^2+1) factor 也可用于正整数的分解
大整数的分解 Matlab 符号运算(二)
展开函数: expand Matlab 符号运算(二) • 多项式展开 该函数经常用于多项式展开,也常用于三角函数、指数函数和对数函数的展开中。 三角函数展开
合并同类项: collect Matlab 符号运算(二) • collect(f,v): 按指定变量 v的次数合并系数; • collect(f): 合并 f 中的默认自变量的各项系数。 findsym(f,1)
简化函数: simple 和simplify Matlab 符号运算(二) • simple(f): 对 f 尝试多种不同的算法简化, 返回其中最短的简化形式; • [R,HOW]=simple(f): R为f的最短简化形式,HOW中记录的为简化过程中使用的主要方法。 simple函数示例
Matlab 符号运算(二) • simplify(f): 简化函数 注:多次 使用 simple 可以达到最简表达。
Matlab 符号运算(二) 例:化简
分式通分: numden Matlab 符号运算(二) [N,D]=numden(f): N为通分后的分子,D为通分后的分母
horner多项式:嵌套形式的多项式 Matlab 符号运算(二) 例:
六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 limit(f,x,a): 计算 limit(f,a): 计算默认自变量趋向于a时f的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,’right’):右极限limit(f,x,a,’left’):左极限
例:求极限 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
六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 diff(f,’v’): 计算 f关于变量 v的导数 diff(f): 计算 f 关于默认自变量的导数 diff(f,n),diff(f,’v’,n),diff(f,n,’v’): n次求导
例:设 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
六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 • 计算积分 int(f,v,a,b):计算定积分 int(f,a,b): 计算 f 关于默认自变量 的定积分 int(f,v):计算不定积分 int(f):计算 f 关于默认自变量 的不定积分
例:求积分 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)
六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 • 计算积分 • 符号求和 symsum(f,v,a,b): 求和 symsum(f,a,b): 关于默认自变量 求和。
例:求级数 ,以及其前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
六大常见符号运算 Matlab 符号运算(二) • 因式分解、展开、合并、简化及通分等 • 计算极限 • 计算导数 • 计算积分 • 符号求和 • 解代数方程和微分方程(见实验三、六)
其它运算 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。
例: 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))
其它运算 Matlab 符号运算(二) • 复合函数计算:compose • 计算反函数:finverse finverse(f): 返回f关于默认自变量的反函数, 若f的反函数g存在,则有g(f(x))=x。 finverse(f,v): 返回f关于自变量v的反函数g, 即 g(f(v))=v。
例: 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
作业: 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)
作业: 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函数外,是否有其它方法?
作业: Matlab 符号运算(二) >> a=sym(‘12345678901234567890’); >> b=sym(12345678901234567890); 5.设a、b定义如下,试上机输出factor(a)和factor(b)的结果,并指出那个结果才是12345678901234567890的因式分解,为什么?
作业: 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})