EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作& s: L, F2 }( L7 j' o, B
: J5 M, U" ]+ }- [8 v( I/ \1 N, x8 s
6.2 符号表达式和符号函数的操作
9 i0 w. g$ t! L4 ?" T6.2.1 符号表达式的操作) f6 N9 m. \ z
2 r2 _' q9 P/ Z4 O& M: r. G$ U
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
# H. G+ V2 J1 T% HEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
" y6 P, _* _3 U4 X* c2 Oexpr1=collect(EXPR) % 默认合并 x 同幂项系数
* d. m0 T0 h& }! l8 b8 mexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
0 `) S+ S, n% Z* Yexpr1 =
: ^1 t# _/ L& v5 e- Vx^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)- k, R& c' v9 [" ~! @$ d
expr2 =4 M) }* G3 y# |* H# J( w
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x
- ]% X( A2 ^; z5 g4 l
' C1 [5 c$ H* V$ O: }4 Y; I【 * 例 6.2.1 -2 】 factor 指令的使用, W& t# s9 A D7 G; ?7 S: `
(1)除 x 外不含其它自由变量的情况
, X- ~" T9 [3 W. m: H1 v3 o; f$ Usyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) & k/ k9 j8 t+ _6 z" J6 w$ j6 @, [# ]. S
ans = 9 s, Q$ T. O* f9 G* c; ~5 e. |
(x-1)*(x-2)*(x-3)*(x+1)/ Q7 d. w4 s A) K, R
4 I9 A+ G- {$ ?9 ~
(2)含其它自由变量的情况之一+ S3 D! b( v. c1 R+ Y, \4 Q7 t. J
f2=x^2-a^2;factor(f2)
6 T% f% F! P, X3 b+ S+ }
6 O, h% }, Q1 cans =
7 z+ u8 `- H& x7 E(x-a)*(x+a)) ?/ |. u, l) g$ B
[2 K* p: F0 S X: A7 t6 u# b(3)对正整数的质数分解
I, O8 V7 B( Nfactor(1025)
2 _3 N3 Y6 h6 y9 p4 |/ n# Jans =
/ S V$ c: [* n: i% c0 Q8 M2 T5 5 41
f* u- x5 m/ x4 e
" _1 O8 P: w8 D, p$ `【 * 例 6.2.1 -3 】对多项式进行嵌套型分解8 {! V8 J \3 ^' q6 H
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) * h7 [/ u0 Q5 K
ans = / W1 i, X9 o& ^: _) z; d/ |
-6+(5+(5+(-5+x)*x)*x)*x1 R: K# W, i2 C8 l
& m1 N& ~1 `( E1 c( f p& V
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
7 X! b% O" v/ a( d& N(1)求矩阵各元素的分子、分母多项式, i( B* h( F' T1 Z1 S" S5 f1 M
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; & W5 {4 u& e' b8 {/ P& [
[n,d]=numden(A)0 q+ l2 ^/ o' J/ f
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>- ]" N9 ?0 I7 A, Z/ ?8 R4 T
n = ( y/ a3 T' [4 T0 _! x& T
[ 3, x^3+5*x^2-3]
4 ] m, S# [3 s; m7 V- D) n ][ 4, 3*x+4]
1 ~# {" _& U8 i: W- |7 Md =
W$ x/ @6 X+ g3 ?[ 2, (2*x-1)*(x-1)]
$ H# [4 p5 O- H- {# H- f[ x^2, 1]) n! a# x: Y' W( s1 ]/ w
[ 3 2 ]2 X B+ A& \# _# Z' m
[ x + 5 x - 3 ]2 P: l& {/ Q! ]: x& ]+ y' D: {1 `
[3/2 -----------------]
# x, S# q3 S/ w' ]5 J, ?5 A
' E7 ~- P: o0 ^5 y, l( ]! p
# V: N' K$ d6 I- @9 m6 e- e- T6 v( u- ^
[ (2 x - 1) (x - 1)]& G+ E( W" X) R
[ ]; r; ?" ?; Q* T' Q+ `
[ 4 ]
5 K2 u5 k) Z$ G; s$ h& N2 u[---- 3 x + 4 ]& o8 q! i" C. ~) i! I4 p! k
[ 2 ]
9 b2 |) \8 ]2 K[ x ]
" z$ I# p0 C: U( ^
: ]6 R7 [ c) I) d/ M8 r$ P6 o(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。' C4 u* h( I8 p) ^
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”( q7 K$ y( s$ H, q* F) ]
[ 3 2 ]
- {. h# o/ w6 U1 z[ x + 5 x - 3 ]1 V. O; r/ _' |1 [2 x# e0 D
[3/2 -----------------]
" C, ~( ~0 z/ f) i; @[ (2 x - 1) (x - 1)]
9 L& H5 ~6 v4 M J5 l[ ]9 L) _7 H9 |. n# G& ]
[ 4 ]
: R" J% I8 R, E$ O: t+ g+ `7 h% V[---- 3 x + 4 ], _' m7 X1 u* \# z5 W
[ 2 ]$ n! H% e. N+ P( `" n. L, E3 p# U, Z
[ x ]) j$ `1 c& b6 N( I8 V
; t% L) p8 N6 K( r
; ?/ L' I% c6 S( T F
【 * 例 6.2.1 -5 】简化 8 B9 I1 |% w0 r: y/ N% Q4 c, W
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)5 J0 {) O; t* `# K
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
3 l9 l, Y3 ?4 ~$ c0 h计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
4 y4 \! ^$ T7 D; N! y% i# t5 ^4 a @
sfy1=simplify(f),sfy2=simplify(sfy1)
( i A g. n7 K8 psfy1 = ' i: X4 n4 V. v# H; b* H w" _
((2*x+1)^3/x^3)^(1/3)
4 y% `; t! d( ^1 Q' n( ^sfy2 =
) e# H+ Y6 @( Q: A# }((2*x+1)^3/x^3)^(1/3)) s7 S- G' `1 Y7 d" k. z& J3 ^
/ G- Q0 u& |2 Y
(2)运用 simple 简化
9 F) C9 X% s, @& `( Z2 H" W: r9 r" j) Rg1=simple(f),g2=simple(g1) ! U+ j0 O8 ]1 ?( G2 ?( P+ ]+ c) a
g1 = 2 K2 [6 x3 l8 e8 Q9 ^
(2*x+1)/x
* S+ v2 ]( N8 ng2 =
3 [+ I; J7 u5 c* K2+1/x
1 S& Y$ \/ Z: N0 ?7 J
5 Z1 U4 F* A5 `) n" v4 q, O: }" e- V
【 * 例 6.2.1 -6 】简化
! H* l$ J" g m% @1 R0 @* Psyms x;ff=cos(x)+sqrt(-sin(x)^2);
2 ^4 g# W. e" F8 I" ]& h: V1 j, Fssfy1=simplify(ff),ssfy2=simplify(ssfy1)
% @0 b! y: W) x' v% ?9 [- pssfy1 =
3 n; x9 r% m" Z- K# P# E" E& Xcos(x)+(-sin(x)^2)^(1/2); C, s( f; l8 r
ssfy2 =
' i0 P! d, }, V lcos(x)+(-sin(x)^2)^(1/2)3 [& S+ H! G8 f6 n8 w
gg1=simple(ff),gg2=simple(gg1) . N, f$ N2 p3 n E5 b" ^1 v: \( ]
gg1 = * W; E+ X* b& } z
cos(x)+i*sin(x)
: I8 o1 n) [9 h' e( ~/ xgg2 =
" W5 e+ E5 `7 f* U& _( aexp(i*x)
( y5 ~1 I. {# X3 k1 H& v" F) b
8 \* j) O0 v& N3 S6.2.2 符号函数的求反和复合 7 J6 A7 W, u7 G2 _4 z+ H
9 s8 j$ C1 c( e4 A0 f
- e. x0 N; V( X. N ^ U$ H M8 }% Z( W/ }+ x4 u' f, x
【 * 例 6.2.2 -1 】求 的反函数
+ z- q: a0 l& K6 C5 Osyms x;f=x^2;g=finverse(f) 6 B, H2 k) j4 W2 b# ?
Warning: finverse(x^2) is not unique. 8 y3 o. ?" V0 ?
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
2 z9 u4 x/ ?0 og =
6 L0 i/ N- I% a" }9 \: vx^(1/2)
0 w/ z7 G- }* }3 |6 `% k, K
& M3 i- y0 \( D$ Y2 h- t, d, Xfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
' y# ~; ~# X2 K7 Tfg = ! _9 U3 N) u6 {3 E- P" B, o
x ) Q L$ P# j! L; a2 K/ w2 S( \
' m7 P0 t8 s8 x& a u8 T* l9 v4 q/ D【 * 例 6.2.2 -2 】求 的复合函数% H: t6 J/ B& z
. f9 |$ C- R- Q(1)自变量由机器确定
+ n: W* `$ t: q+ gsyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) 9 i. ]* z$ U5 @
fg1 = % ^3 z% r! I9 k c7 a" k9 e- G
cos(y+fai)/(1+u^2)
A. Q2 o3 E! ~8 [2 M$ `! Z: `- e8 X6 x
(2)指定自变量8 S$ D0 c K1 `2 i8 O+ e) N
; g) ]- A5 N+ W! W5 `7 m0 M- P
fg2=compose(f,g,u,fai,t) 8 n" p( Z. G3 H+ k0 |
fg2 =
! [* s# L" _2 Zx/(1+cos(y+t)^2); l6 O3 z7 D# c0 q" n
* V; G7 M4 I3 X! ^. |' U, r
' m( S; c6 i5 k6 J( ]3 c1 J
6.2.3 置换及其应用
& H# V# ]0 z; R6.2.3.1 自动执行的子表达式置换指令 o# A0 z# ?; u1 L
K* `4 i% |7 B a【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
" u4 ~( X# K( Q! `4 aclear all,syms a b c d W;[V,D]=eig([a b;c d]);
5 a: i' y: b2 k$ Z[RVD,W]=subexpr([V;D],W) %<2>
1 l, j3 Z7 X* N$ M7 E8 m- pRVD =
0 w4 `) X+ [+ L2 K+ P0 B+ s[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]. H) T+ E( P4 Z/ [6 s
[ 1, 1]0 x$ d5 L# H( r; s0 m, l8 N+ V
[ 1/2*d+1/2*a+1/2*W, 0]
' ?! v; i# D/ _2 e[ 0, 1/2*d+1/2*a-1/2*W]7 R3 L, R3 { e) U8 C
W =
2 [6 S; J5 `( @0 c) p# l. d(d^2-2*a*d+a^2+4*b*c)^(1/2)5 U9 K* @1 d1 u! t
^: J2 q6 Z5 p+ K) s! w
7 A8 U" d, v1 `6.2.3.2 通用置换指令
7 ~2 J0 i- B' p! u8 @. l* e7 x* {- ~' c
【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
$ R1 H1 M' z7 A5 ^. ^(1)产生符号函数
9 U' d; F! j, H; c; N# f6 g8 ssyms a x;f=a*sin(x)+5;
" ]+ o. P. a# ^) c( C+ q7 C) y# j, N& Y4 ~: A
(2)符号变量置换# }* f* R/ i7 m9 L- I5 h4 ^
f1=subs(f,'sin(x)',sym('y')) %<2> , V/ V6 c4 o/ O% Y
! f; v. B3 M; X" _
f1 = ' i; C, X# l7 m9 J2 m4 { F/ Z
a*y+5
1 C+ |! l' R; C1 ~- i' O7 a* B% j' o9 d3 n! \' C% R+ P
(3)符号常数置换 j- T9 f6 o7 R4 ^' A
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
( Q2 V6 q, K6 ~3 O7 c5 lf2 = C% k* L+ o0 u* p; V/ y
3^(1/2)+5
6 d W' p0 Q4 O; A5 G4 w/ N+ D% U H9 B9 L n- O1 f
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
$ X3 ?6 N" O# Y1 D. x/ n9 Pf3=subs(f,{a,x},{2,pi/3}) %<4> 5 @% W5 i: [7 q& o7 M- a/ T- I
f3 = # o# f) u3 o: y3 S4 f
6.7321 / s) E6 c5 Y1 v
( E) F2 r. t% [( ^(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )0 u0 X1 V; w- P9 J8 S, R4 U5 v( c3 O
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
1 m. |& I! @- k! `7 S9 Rf4 = . B1 a' a9 a& U' K8 L* \
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
; G7 N T; \% G+ ?% l# R/ m1 l' l( l# f3 B) m
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )3 t8 Y, b. j. z4 Z/ L
f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> 0 ]% e: D% G1 V7 Q" ?
f5 =
% j/ t6 N$ J8 [& _ S5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000* F& K$ X4 O+ H' g( d
# ^# \" _. W7 O _6 v# N) {5 y- r4 Q/ @9 O' c9 C0 {; W5 A
6.2.4 符号数值精度控制和任意精度计算
5 Y0 Q" c0 ^$ O' k- e7 R6.2.4.2 任意精度的符号数值5 b% k) b( v+ b) G" H# R
) J% f5 @( N9 \, a* u
【 * 例 6.2.4 .2-1 】指令使用演示。
+ a T" k% ]3 V& T1 ?1 bdigits % 显示省缺符号数值计算相对精度! m3 ?* B% T$ E3 r5 ~. X+ d
Digits = 32
+ i6 y8 t H" e" \p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值, k; h$ a6 f4 L9 A* w" }4 b% U
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值) b3 m- v7 J2 m1 B
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差( R4 C8 S; U9 X8 H2 i4 b e
p1 =
+ T- R" _. I, u/ R5 O2 j9 I( [7286977268806824*2^(-52)
0 {' Y' S% ?0 \) u( {+ q8 N8 ae01 =* |# K! y1 t3 A, P. _3 Z% U; Q
.543211520368250e-16# }/ Z! U( G1 r4 I& c
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
3 T! d$ c' [6 l \9 d$ Me02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差$ F2 q4 j5 @! D: f9 r q6 ^
p2 = # v* F. q. ^- o8 i% }) h
1.6180339887498948482045868343657
; n: w. M) G4 u6 f6 xe02 =
8 b1 ^) S! N6 D.61882279690820194237137864551377e-310 o+ _5 k7 ~4 Y# Z+ p+ s; O; c. r4 A- h
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度; \$ a5 C# I5 A! n2 O) }& o
Digits = 32
3 \, T }4 w% y, D6 C$ u; F$ i G6 \
$ H' B2 W3 F0 y. E5 M! X
6.2.5 符号对象与其它数据对象间的转换
5 q: o& h& e( E* a( ?
8 n) y! [; B4 ~
; L! i' v& a! s【 * 例 6.2.5 -1 】符号、数值间的转换。
0 P% j. R1 i# j l' T& S9 J9 uphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
: D( J! k. ~9 k* [$ Y' Jdouble(phi) % 把符号常数转换为双精度存储的数值
* q1 `% V. @9 y) }$ Tphi = ( x! V, F U9 }# a3 K, b
7286977268806824*2^(-52)# e; L1 m8 U0 a q5 q
ans =& }' `# @$ s$ R/ v/ r7 Y, X
1.6180: q H+ N; q" q$ W1 q5 Q% l; Z
0 s$ n2 k- N4 y
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
& y# O7 p. X4 S9 X/ d9 ^8 k" Ssyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式! h [$ w g8 ^! x/ c7 B* N) X( `. q" c' |
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
, O3 C* k u6 E; P( N6 E6 Zp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式) D2 ~& v J! b- C0 z; B3 a
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式, ^3 ~7 S/ M: H4 A
pretty(f,'x') % 显示符号多项式的易读表示形式
- @( ?2 r6 e) c- `sy2p =
) D, q( {9 c2 C( ~0 J2 Y1 2 -3 5
& t$ A' h6 f/ Q2 {: Bp2st =
~9 b; X: T* T5 Rx^3 + 2 x^2 - 3 x + 5
* ^/ y3 L( d. \6 Lp2sy =6 J( r$ K6 W8 ]1 a4 A
x^3+2*x^2-3*x+5* Z' e$ `$ h. ^5 {' p3 {6 s& a0 ]
3 22 Y! X8 u' P, t5 n. @! V: l
x + 2 x - 3 x + 5 8 v ~' E& E: Z
5 L9 @; { a+ f' ^5 n |