matlab 符号运算介绍

34
Matlab 符符符符符符 Matlab 符符符符符符符符符符符符符符 Symbolic Math Toolbox 符符符符Matlab 符符符符 符符 () 符符符符符符符sym 符 syms >> syms x y z >> x=sym(‘x’); >> y=sym(‘y’); >> z=sym(‘z’); <== >

Upload: nairi

Post on 16-Mar-2016

280 views

Category:

Documents


3 download

DESCRIPTION

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 是实的. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Matlab  符号运算介绍

Matlab 符号运算介绍 Matlab 符 号 运 算 是 通 过 符 号 数 学 工 具 箱( Symbolic Math Toolbox )来实现的。

Matlab 符号运算(二)

符号对象的建立: sym 和 syms例: >> syms x y z >> x=sym(‘x’);>> y=sym(‘y’);>> z=sym(‘z’);

<==>

Page 2: Matlab  符号运算介绍

符号对象建立时可以附加属性: real 、 positive 和 unreal

>> k=sym('k','positive')

>> x=sym('x','real')

>> x=sym('x','unreal')

表明 x 是实的

Matlab 符号运算(二)

表明 k 是正的去掉 x 的附加属性

Page 3: Matlab  符号运算介绍

符号表达式的建立

>> f2=sym(’sin(x)+cos(x)’)

>> syms x>> f1=sin(x)+cos(x)

>> f3=’sin(x)+cos(x)’ 用这种方法创建的符号表达式对空格很敏感,不要在字符间随意添加空格!

Matlab 符号运算(二)

推荐!

符号变量与符号常量>> a=sym(‘a’);>> b=sym(‘5’);

>> c=sym(5); b 、 c 有区别吗?hint : help sym

Page 4: Matlab  符号运算介绍

相关函数 findsym: 查找符号表达式中的符号变量

findsym(f)按字母顺序列出符号表达式 f 中的所有自由变量findsym(f,N)列出 f 中距离 x 最近的 N 个自由变量( i , j 除外)

默认自变量= findsym(f,1)

Matlab 符号运算(二)

>> a=sym('a');x=sym('x');k=sym('3');>> f=k*x+a;>> findsym(f)

例:ans=a ,x

Page 5: Matlab  符号运算介绍

相关函数 subs :符号替换

Matlab 符号运算(二)

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

Page 6: Matlab  符号运算介绍

例:>> syms x y>> f=2*x+y;>> x=3,y=4;>> subs(f)>> subs(f,x,’a’)

Matlab 符号运算(二)

>> 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=10ans=2*x+y

ans=10

ans=[2+y,4+y,6+y]ans=[7 10 13]

yxxf 2)(

ans=3*a+b?

Page 7: Matlab  符号运算介绍

符号矩阵 使用 sym 函数直接生成

Matlab 符号运算(二)

>> A=sym(’[1+x, sin(x); 5, exp(x)]’) 将数值矩阵转化成符号矩阵

>> B=[2/3, sqrt(2); 5.2, log(3)]>> C=sym(B)

符号矩阵中元素的引用和修改>> A=sym(’[1+x, sin(x); 5, exp(x)]’)>> A(1,2)>> A(2,2)=sym(’cos(x)’)

能否用 sym(‘B’)?

Page 8: Matlab  符号运算介绍

符号矩阵的基本运算符号矩阵的基本运算与数值矩阵的基本运算相类似。1) 基本运算符: + 、 - 、 * 、 \ 、 / 、 ^ 、 .* 、 .\ 、 ./ 、 .^ 、’ 、 .’2) 三角函数与反三角函数: sin 、 cos 、 tan 、… … 3) 指数、对数函数: sqrt 、 exp 、 log … … 、

4) 复数函数: real 、 imag 、 conj 、 abs

5) 矩阵函数: det 、 inv 、 rank … … 、 (没有norm )

Matlab 符号运算(二)

6) 矩阵元素的抽取: diag 、 tril 、 triu

Page 9: Matlab  符号运算介绍

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

因式分解: factor>> syms x>> f=x^6 +1>> s=factor(f)

s =(1+x^2)*(x^4-x^2+1)

factor 也可用于正整数的分解

Page 10: Matlab  符号运算介绍

大整数的分解

Matlab 符号运算(二)

Page 11: Matlab  符号运算介绍

展开函数: expand 多项式展开

Matlab 符号运算(二)

三角函数展开该函数经常用于多项式展开,也常用于三角函数、指数函数和对数函数的展开中。

Page 12: Matlab  符号运算介绍

合并同类项: collect collect(f,v): 按指定变量 v 的次数合并系数; collect(f): 合并 f 中的默认自变量的各项系数。

Matlab 符号运算(二)

findsym(f,1)

Page 13: Matlab  符号运算介绍

简化函数 : simple 和 simplify simple(f): 对 f 尝试多种不同的算法简化,

返回其中最短的简化形式; [R,HOW]=simple(f): R 为 f 的最短简化形式,

HOW 中记录的为简化过程中使用的主要方法。

Matlab 符号运算(二)

f R HOW2*cos(x)^2-sin(x)^2

3*cos(x)^2-1 simplify

(x+1)*x*(x-1) x^3-x combine(trig)

x^3+3*x^2+3*x+1

(x+1)^3 factor

cos(3*acos(x)) 4*x^3-3*x expand

simple 函数示例

Page 14: Matlab  符号运算介绍

simplify(f): 简化函数

Matlab 符号运算(二)

注:多次 使用 simple 可以达到最简表达。

Page 15: Matlab  符号运算介绍

例:化简

Matlab 符号运算(二)3

23 81261)( xxxxf

Page 16: Matlab  符号运算介绍

分式通分: numden[N,D]=numden(f): N 为通分后的分子, D 为通分后的分母

Matlab 符号运算(二)

Page 17: Matlab  符号运算介绍

horner 多项式:嵌套形式的多项式

Matlab 符号运算(二)

1))1)1((( 1)( 1

xxxx

xxxxf nn例:

Page 18: Matlab  符号运算介绍

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

计算极限 limit(f,x,a): 计算 )(lim xf

ax

limit(f,a): 计算默认自变量趋向于 a 时 f 的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,’right’) :右极限

limit(f,x,a,’left’) :左极限

Page 19: Matlab  符号运算介绍

例:求极限

>> syms h n x>> L=limit((log(x+h)-log(x))/h,h,0)>> M=limit((1-x/n)^n,n,inf)

Matlab 符号运算(二)

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

hxhxL

h

)ln()ln(lim0

n

n nxM

1lim

Page 20: Matlab  符号运算介绍

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

计算极限 计算导数

diff(f): 计算 f 关于默认自变量的导数 diff(f,’v’): 计算 f 关于变量 v 的导数

diff(f,n),diff(f,’v’,n),diff(f,n,’v’): n 次求导

Page 21: Matlab  符号运算介绍

例:设 y=sin(ax),求>> 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)

Matlab 符号运算(二)

A=cos(a*x)*a

B=cos(a*x)*x

C=-sin(a*x)*a^2

D=-sin(a*x)*x^2

2

2

2

2

, , ,daydD

dxydC

dadyB

dxdyA

Page 22: Matlab  符号运算介绍

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

计算极限 计算导数 计算积分

int(f,v,a,b): 计算定积分 int(f,a,b): 计算 f 关于默认自变量 的定积分 int(f,v) :计算不定积分 int(f) :计算 f 关于默认自变量 的不定积分

b

advvf )(

dvvf )(

Page 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)

Matlab 符号运算(二)

,)22(

122

2

dxxx

xI

2/

0,

cossincos

dxxx

xJ dxeK x

0

2

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)

Page 24: Matlab  符号运算介绍

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

计算极限 计算导数 计算积分 符号求和

symsum(f,v,a,b): 求和 symsum(f,a,b): 关于默认自变量 求

和。

b

av

vf )(

Page 25: Matlab  符号运算介绍

例:求级数 ,以及其前 10 项的部分和。 >> syms n>> S=symsum(1/n^2,n,1,inf)>> S10=symsum(1/n^2,n,1,10)

Matlab 符号运算(二)

S=1/6*pi^2

S10=1968329/1270080

1

2

1n n

S

例:求函数级数

1

2n nxS

>> syms n x>> S=symsum(x/n^2,n,1,inf)

S=1/6*x*pi^2

Page 26: Matlab  符号运算介绍

六大常见符号运算 因式分解、展开、合并、简化及通分等

Matlab 符号运算(二)

计算极限 计算导数 计算积分 符号求和 解代数方程和微分方程(见实验三、六)

Page 27: Matlab  符号运算介绍

其它运算 复合函数计算: compose

Matlab 符号运算(二)

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 。

Page 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)

Matlab 符号运算(二)sin(y/u)g ),/cos( txf

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))

Page 29: Matlab  符号运算介绍

其它运算 复合函数计算: compose

Matlab 符号运算(二)

计算反函数: finverse

finverse(f): 返回 f 关于默认自变量的反函数, 若 f 的反函数 g 存在,则有 g(f(x))=x 。

finverse(f,v): 返回 f 关于自变量 v 的反函数g , 即 g(f(v))=v 。

Page 30: Matlab  符号运算介绍

例:>> syms x t>> f=x^2+2*t;>> finverse(f)>> finverse(f,y)

Matlab 符号运算(二)txf 22

ans=(-2*t+x)^(1/2)

ans=-1/2*x^2+1/2*t

Warning: finverse(x^2+2*t) is not unique

Page 31: Matlab  符号运算介绍

作业:

Matlab 符号运算(二)1. 化简 xxxf 2sincos)( exp(i*x) ?

2. >> 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;

试写出下面命令的结果 , 上机验证,并说明理由 :>> findsym(f)>> findsym(f,1)>> findsym(f,2) >> findsym(f,3)

Page 32: Matlab  符号运算介绍

Matlab 符号运算(二)3. 设 A 是一个符号矩阵(定义如下),试指出findsym(A,1) 的输出结果,并由此得出结论:findsym 确定自由变量时,是对整个矩阵进行的,还是对各个矩阵元素分别进行?

>>syms a b t u v x y;>>A=[a+b*x,sin(t)+u; x*exp(-t),log(y)+v];

作业:

4.(1)设 ),2cos()( ,1)(2

tyyguxxf 求复合函数 f(g(z));

(2)设 ),2cos()( ,1)(2

tytguxuf 求复合函数

f(g(z)) 。思考:本题除了用 compose 函数外,是否有其它方法?

Page 33: Matlab  符号运算介绍

作业:

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

>> a=sym(‘12345678901234567890’);>> b=sym(12345678901234567890);

Page 34: Matlab  符号运算介绍

作业:

Matlab 符号运算(二)6. 替换函数 subs 的使用。 (1)试指出下面程序中的 f1 、 f2 、 f3 、 f4 、 f5的值。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})

>> syms x y; f=2*x+y;>> subs(f,{x,y},{x+y,x-y})

(2)试指出下面替换的结果,并说明理由。