EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作
' M" v- ^0 {& X3 _4 D
/ n' e" _4 E6 O7 Y( k6.2 符号表达式和符号函数的操作
, R- l! ]1 ~4 O, l u# }6.2.1 符号表达式的操作
6 N0 _) Q6 |$ X/ }. b: g) O, }- g) A, g$ T3 c! b% s4 r
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
+ o2 p! r9 W/ I% J! f* B4 lEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
2 ~, c6 ?6 k' G4 X# ^: pexpr1=collect(EXPR) % 默认合并 x 同幂项系数/ `9 C* b: z* r
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
! }# O3 N0 f, L& o3 Z+ j; Gexpr1 = ' H- R8 y/ c% a
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
6 t; W: P& Z6 ?9 Q, j+ Bexpr2 =
3 v: w6 W. r U N0 u% K5 Y- t ?2 Jx*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x
7 D Y7 K: M2 V* |/ V- G: l6 V$ ^& w% t
【 * 例 6.2.1 -2 】 factor 指令的使用' u2 B9 N& R: r: }8 e* C
(1)除 x 外不含其它自由变量的情况
+ d$ _; A" c- ?+ }! Z( Usyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
( E x. n- d; S" _2 `ans = ) D: K7 S9 h7 j1 ^! i# h! W& b
(x-1)*(x-2)*(x-3)*(x+1)( B) L- a, t' Y* R6 c
) n, u' ^. Q& I" [( F' z, }
(2)含其它自由变量的情况之一, ?0 V, D% C! t
f2=x^2-a^2;factor(f2) 7 V8 o( J* c) O/ A* X
) a& b% m& v1 C' B: _, r
ans =
9 S. w: I( P f* p& z0 n(x-a)*(x+a)& z. p$ Z; m5 S4 ~, `
- Z! b1 W3 O% p. u$ Z
(3)对正整数的质数分解' M7 Q/ K) M2 m* Z( M
factor(1025) 9 Q$ Y2 Q g& {5 e
ans =
4 K/ S. z& L: }7 I, v/ u* c9 A8 D5 5 41 ' L5 Q Z! E( M+ p9 R9 X1 g7 u: A
4 P- u, ~- @3 U$ T! |) z
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解
. d) T7 X' V- v7 O$ l4 d0 q. S. `" bclear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
! `2 k( v: u0 b/ Hans = - r+ P4 T5 m+ t- {3 o
-6+(5+(5+(-5+x)*x)*x)*x
0 O( [" E* g" b0 V, R0 R8 K
3 I3 K" P! k4 S- z" h) _; t【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式* j7 |7 s& b9 Y, f' V( W& @
(1)求矩阵各元素的分子、分母多项式0 U" b. c4 ], H4 Y) U
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
, z' _- U( u1 i[n,d]=numden(A)& D3 _$ n' Z4 p; v3 r
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>8 _. S) G \! y2 K9 A+ C9 z" h( v1 _
n = 8 N/ N1 {& \0 N8 m
[ 3, x^3+5*x^2-3]
W9 b- t+ W( J( v* K[ 4, 3*x+4] Q5 G2 s- d) o: B2 q f
d =
. A8 x' P: ~" x9 e[ 2, (2*x-1)*(x-1)]
7 G6 }! G- a) U8 [5 y, X1 [[ x^2, 1]' [5 ~) z t) u2 X" `9 {, h
[ 3 2 ]
1 }7 S6 r7 t4 P/ ?[ x + 5 x - 3 ]
7 W* m. V# U: j7 s: t1 L; D* R/ b! S6 b[3/2 -----------------]+ t/ C, W- q. U$ ~/ [! w
$ j" o9 V& d% k7 o1 ] R" j( H# _1 z/ m8 ~/ l( a/ e; `; i
4 y8 }5 q5 @! ~! S* ^2 s
[ (2 x - 1) (x - 1)]
- m+ x* X0 h; d4 e, ][ ]
# r) h1 k6 W) t' c: E* n! f2 Q[ 4 ]; l7 t- b: S j4 K* ~% ^: A
[---- 3 x + 4 ]: S0 f' U. o6 k7 `8 D' c$ c6 ^
[ 2 ]( c0 m8 D2 K+ S7 g2 M, Y
[ x ]' x8 z9 L i, X# f0 r) c8 K
2 o4 \+ ~" s4 B- H(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
; c* b* k6 Z% V. m+ hpretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”1 [' L' m- w7 v6 ]
[ 3 2 ]+ T/ H. n+ q* B/ P; f9 O
[ x + 5 x - 3 ]0 W7 j% r" L: t" E
[3/2 -----------------]
c+ [2 ?$ B" j- p5 D$ g: L: b[ (2 x - 1) (x - 1)]
/ E8 }( }6 N t6 w5 o+ y( C[ ]
7 y& ^4 d/ p5 D' |) l4 r6 G+ o; S[ 4 ]. s6 V9 o4 W. \2 a: Y' m, V2 R% k, _+ P
[---- 3 x + 4 ]( Y Y+ G/ ~- o; R$ v, a
[ 2 ]& j& q2 [# @: o6 Y" x
[ x ]8 n* p, r. P! }/ H
; ^( P! q ^% C# Q n+ S* [2 K, n% B
【 * 例 6.2.1 -5 】简化 4 J- W* x' b5 p! z4 G( A9 V8 D
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)$ o1 b. j: L) P0 y2 J" F3 d1 Q
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
! Q. r" G: P0 i计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网 1 a. `& e5 v& m5 j
I9 ^6 O" F" k" y- Q, R
sfy1=simplify(f),sfy2=simplify(sfy1)
" d: S1 h- n9 L% h+ T9 R$ xsfy1 = & O/ O3 T1 C, M' z6 I' k
((2*x+1)^3/x^3)^(1/3)3 x/ S' K G/ A% A5 j- {
sfy2 =
, V5 S' T$ c* X! t' _' [+ ^. M((2*x+1)^3/x^3)^(1/3) i. \, \- n+ I+ {# u$ h$ l0 _
/ G- u) \/ P' Y- \% X/ |+ W(2)运用 simple 简化
7 Y9 @5 y7 ?& F$ z+ wg1=simple(f),g2=simple(g1) ! G( ~9 w% E% }. ?
g1 = ; k5 {* l6 L1 }* s Q; i
(2*x+1)/x7 E6 _6 w% G; T g
g2 =
O+ e) K# }& `# v2 s& I$ j9 z: y2+1/x
* P! u* u9 q9 n3 A
- g0 A: p2 `! M* G2 L$ `! S" O1 v; j- C, D
【 * 例 6.2.1 -6 】简化
& j, r4 j1 W: J* vsyms x;ff=cos(x)+sqrt(-sin(x)^2); ; m- [2 `. A) m! i8 u* Y! h
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
3 @: Y1 b2 E2 F1 S4 Y' r+ Y! Rssfy1 = 2 f7 m8 d& X1 X7 A- U' j! d1 w' N# k
cos(x)+(-sin(x)^2)^(1/2)! L% B9 X" P0 i, H) u3 @# P; u0 @* p
ssfy2 =$ {0 P4 `- z0 ~2 q
cos(x)+(-sin(x)^2)^(1/2)
9 D) J C% e z1 S: t0 Ogg1=simple(ff),gg2=simple(gg1)
% j3 k, K" g9 k) M& K9 G1 rgg1 =
7 j+ l( A: g1 Scos(x)+i*sin(x)' c6 I7 p! s4 M G
gg2 =
2 j3 F# k D2 _, Texp(i*x)" w1 P: v2 S B* @" t/ ]( J
- ?# i7 b4 B# G2 l; V% o0 A
9 i7 V$ b" W( Q6 u, a$ b0 X0 \6.2.2 符号函数的求反和复合
- X) B4 ~' V6 m* @) Q2 j
2 ]' j( k( P) g4 f6 ^' N3 G7 `* A/ M( B) s/ r; b( G
# ^3 A' O3 F. `( t
【 * 例 6.2.2 -1 】求 的反函数0 Y5 A( G+ N" p/ F% v; h' p5 ^2 {
syms x;f=x^2;g=finverse(f)
$ e1 w# g- U$ U" RWarning: finverse(x^2) is not unique.
n( {/ \7 R- D6 C7 R; j> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 430 {' a! E' z4 q, w) W
g =
3 @6 s3 l5 f, _- S# W* Px^(1/2) ) N7 Q5 {* O Q0 [
2 f; R; x$ a0 D, f1 q2 g
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
* u# o P# I$ i. G0 gfg = 9 e* a' E2 r+ x G7 z1 d
x ; q: s* c) h: K; _* d
) y3 J0 x" u! {2 L, i1 n4 `3 j& ~' r& ^ `
【 * 例 6.2.2 -2 】求 的复合函数( ^) n& [/ R. ^8 U! h
' g6 N6 B% c/ B(1)自变量由机器确定
+ O# V) _% a5 U3 B- t8 \4 p$ o4 U; K2 Qsyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) : x6 r( m$ k$ X! c" @
fg1 =
: R; g9 ]0 e# T; u% ?cos(y+fai)/(1+u^2)
9 s! K; i7 G! ~9 Y1 @
% U) _+ X( P+ D( T6 a$ h7 @(2)指定自变量
# Q/ p8 T L5 }8 t; t4 `' y$ B% n+ @! J& I) C
fg2=compose(f,g,u,fai,t)
4 T& k7 _& i. n9 m/ P0 Gfg2 =
0 Z; B+ b+ h2 ~0 R- Jx/(1+cos(y+t)^2)
! H8 D8 f) q; c, o$ w( {: t; ^& _) v% G! M+ `( _7 S: J
& o! v" ?- D% X; f" l8 M6.2.3 置换及其应用
3 `' i6 ], Y' a( a6.2.3.1 自动执行的子表达式置换指令
' X: p* [* o+ k% g- q) s9 ?9 x% ]# U( F7 X& F5 i
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。" p5 S! Z+ j+ f6 T( _- K! X9 M
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
8 G% M: U2 E% w" u/ Z! ?& Z[RVD,W]=subexpr([V;D],W) %<2>
- K: Z7 `. M8 m8 T5 U$ l$ ]RVD =
. Q$ v* V/ G. E6 t0 X8 u[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]8 {. T& M" n# `0 y8 D8 W: s
[ 1, 1]' v2 Q0 f+ L% E" } ~ S
[ 1/2*d+1/2*a+1/2*W, 0]# |: Y9 l W" x$ Y
[ 0, 1/2*d+1/2*a-1/2*W]6 U: I b4 ~; m) s% l% O& N' O
W =
; }8 M/ r/ l( \( d(d^2-2*a*d+a^2+4*b*c)^(1/2)
0 m) B2 o/ \- v0 g) Z* d9 r. v% z; f+ T4 I G
! C M. i, Y1 G( X
6.2.3.2 通用置换指令
% b& h( k4 q* J& L8 `) R: x; S
【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。& g0 ]9 B5 U& t* x) @$ t
(1)产生符号函数8 J2 }7 \0 W; K
syms a x;f=a*sin(x)+5;
+ v8 j P% ?$ d% M B$ T. S1 \2 D& f& X a
(2)符号变量置换
s- T/ |! K* ~% j0 h) ~7 s- ^4 p2 Yf1=subs(f,'sin(x)',sym('y')) %<2> 4 q# Y$ y7 Z' _- K6 r
( X( L. F! j! {1 J/ y1 J
f1 = & a8 T$ G2 M! h: V& w+ f$ _3 @
a*y+5
- t+ s* d0 T/ P2 V( A7 c4 w# j* @# B# j
(3)符号常数置换, n4 v2 q& y( i# A; t- _! h; D: o
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
5 t7 T# P6 h: X+ F( Cf2 =
; i- D' r/ g# `; [: \: u$ }, m3^(1/2)+5
9 r# ~, M( L! b5 y6 o& o& r3 [% o" k) {3 a
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )6 B, n, j; b/ T) k7 s. U4 `7 ^
f3=subs(f,{a,x},{2,pi/3}) %<4>
U" U& M" H: B% U5 `8 n, Ef3 = 2 X" @: \* p' o S, j, r2 f4 c
6.7321 0 ]# k( M0 ~1 m. `2 o: w1 B1 t$ r
9 h) _/ a: g# }+ @8 \- S6 q6 I, x(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )
w; |8 f2 j4 if4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> 0 C5 R2 t3 |$ l
f4 = 4 F& @: n2 q3 I$ k/ ~3 r: K
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
* x4 S, o4 \6 D8 Z2 O! T* g
! y4 ?3 |, \. T! A9 A& q- w! R0 P(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )) P' W- J* `7 h+ K1 b k
f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> : s& }6 `' Y7 v, X5 M
f5 =
0 T2 Z) O. c4 `5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
9 K- r$ `! B9 `
6 H3 z G+ y7 \! |' Y/ s8 {" A. B s( O5 f% V5 Z0 Q
6.2.4 符号数值精度控制和任意精度计算
# N. ^2 H6 ?0 h* Q+ e6.2.4.2 任意精度的符号数值, B/ M5 T& w- N1 r
' t: [- v" m* l2 `【 * 例 6.2.4 .2-1 】指令使用演示。1 D" v/ s% a9 _! d5 K% ~
digits % 显示省缺符号数值计算相对精度
2 l4 Z6 K- z8 {. d- sDigits = 32 k0 [0 f: j! L! O# Y
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
% V4 T& O- Z3 x* z- bp1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值. f( j: R) v: [4 [5 p) S% t t3 M
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
9 d% N9 N( n( H8 H' p5 Z' Qp1 =
& X1 u0 @: b2 d7 q4 W7286977268806824*2^(-52)
% Q& L2 t y. \ T6 i! v3 Ke01 =
4 d$ S' y' e8 h# w! C1 [) N: q.543211520368250e-16& D% e, f/ a1 Y5 h% ~
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似' X! J* J0 C! D" g6 k5 R1 B
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
# s/ ]8 N: c& o1 z# Rp2 =
# H" d+ G- j2 M: i7 `7 s, E1.6180339887498948482045868343657
, A9 L: C# o! T* le02 =
0 ?1 \7 O& {# v" \: x6 S.61882279690820194237137864551377e-31
' O$ H* C; e' ^& n' a. p) |- G; @digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度( ~" @0 d' h+ N& K1 S
Digits = 32
4 P6 D/ K3 D: k
+ M. p% i4 W }' H. u
! C. R$ c6 V3 h/ R' q5 Z6.2.5 符号对象与其它数据对象间的转换+ j: ^$ t, ^' C5 o6 Z1 G" ]
f4 c& O; a' q& j1 t8 o8 u ; k) _ k7 {" \8 y1 I' _+ ], @/ b, D
【 * 例 6.2.5 -1 】符号、数值间的转换。
1 j9 I: [; C: y2 v2 qphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数) t2 @! s) y8 W% `+ V1 @' S6 F
double(phi) % 把符号常数转换为双精度存储的数值
) P9 h9 l% [7 `- y4 R Z* ~phi =
+ d7 y# [ T3 u% B7286977268806824*2^(-52)4 u' X+ O! y4 | b/ o% O( w
ans =
4 X6 b, j, ?2 d; s, g- l1.6180' Y% t- C7 F% m
( j; z D( N# d; n: S
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换9 D9 M8 Z- W" n& u) w7 j0 X
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式) [" G: _, t, ^
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量/ F' h7 C# P/ p9 M
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式) Z% x/ r- i/ y1 r) Q, `
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式! M' b- v1 p* d+ ]! @# c& r. R
pretty(f,'x') % 显示符号多项式的易读表示形式
/ I \) F) {' Bsy2p =
7 ?5 a0 d8 f6 e0 v3 _! C1 2 -3 53 _) o' n* Q' c. `, m5 E1 r
p2st =- }4 r1 ?& s3 |4 b4 f
x^3 + 2 x^2 - 3 x + 5
5 g( J5 U0 E- p! C9 ]: k: J: k; cp2sy =
j6 i9 g& T% J% {1 c2 {7 r- M6 bx^3+2*x^2-3*x+5
f- s& I! @& Y7 g; A3 2
+ e, f, \. z% `- f$ R0 A Mx + 2 x - 3 x + 5 ! ^/ n R+ V7 s! x' R m; _
8 @8 T. k8 h* z! ] |