EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作
+ h6 A5 c+ v. e% _+ A8 P5 s }; ^! X2 j& r" ?+ \- M" Y3 `
6.2 符号表达式和符号函数的操作. \' a% t2 t% y
6.2.1 符号表达式的操作
! h8 D2 M3 O Z6 q L/ F& t
5 x% N. T. B* F" q) S8 {! Q5 ?【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
# p4 u- w4 P- `4 m8 I1 ?4 @4 MEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
+ O( H6 h$ t9 Y% ?expr1=collect(EXPR) % 默认合并 x 同幂项系数
) t7 a1 J. y, hexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
4 W) A* O. N. }4 p, ?6 n6 Bexpr1 = ; y6 \( P$ T9 ]# X& h4 }- J& p, F
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)/ T% S. j+ e) y' U
expr2 =' j; |* P( j; y4 n' @" Q. D
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x
' r1 g2 j3 b8 k' E5 N% h5 H
/ g7 y M) d8 d; d. k+ D【 * 例 6.2.1 -2 】 factor 指令的使用
+ A0 y7 [) s; z(1)除 x 外不含其它自由变量的情况
% k/ C& U" }- i) @9 O/ `syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) 6 I. }5 @& S) i
ans = 8 t- c' @/ y v* o
(x-1)*(x-2)*(x-3)*(x+1)% Z1 W0 T$ r& o, F" `8 Q9 G/ ?
( x# \( U$ z; I% ?2 q6 J* L7 }
(2)含其它自由变量的情况之一
0 R) s( n5 z$ w' Hf2=x^2-a^2;factor(f2)
' t9 T! i6 e' E! H8 R8 o8 v" o6 h. L3 k. I5 ~- _) N& K( }
ans = c. H. O2 o# V% u4 T
(x-a)*(x+a)
1 k6 |. i7 ]8 p4 \0 t" q, [* T" |4 y: s& f3 L* Q
(3)对正整数的质数分解
1 x' o7 \4 q' X$ Gfactor(1025) / |. w3 X& Q z% H# {- ~
ans =
7 O8 p3 |' t1 t4 @. l( h2 ?5 5 41
& o' H. C& D! W. f6 k
# @. C. M) t4 F7 z/ u1 g【 * 例 6.2.1 -3 】对多项式进行嵌套型分解; ]- N i' x- f! K. u8 f
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
4 P. F* Y% }- wans = # k( ~0 D% @) i5 D+ A, w' K1 K) K; n
-6+(5+(5+(-5+x)*x)*x)*x
# D% z! _+ x9 i- s. N0 f s. H \" h/ Z e" Q% V
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式3 K" [4 L5 N1 [9 s+ d1 V- \
(1)求矩阵各元素的分子、分母多项式9 O$ h6 U$ r# `+ V. t+ N4 L
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; 5 V" Y$ p) t2 D& G8 N
[n,d]=numden(A)7 S8 h1 l4 Y+ ~+ Z5 a: N, I5 o, T
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
! W i" F" a8 on =
/ r4 `( D+ u3 }- x" [- R( g[ 3, x^3+5*x^2-3]6 J" {( V' w1 `$ M' ?: C- g
[ 4, 3*x+4]5 v( K7 j7 `8 t, P# t1 V+ `
d =$ X4 z N0 a. U( l4 c0 i
[ 2, (2*x-1)*(x-1)]/ S, E( f( g" U7 C1 o4 B
[ x^2, 1]7 J% z% K" f* r& ]) x
[ 3 2 ]
. Q9 u( G$ ~( B. n[ x + 5 x - 3 ], d/ m7 C, \( o, ]
[3/2 -----------------]" W1 c" B" ?6 p# _/ U5 |
* {& x4 v" x$ D8 I7 h; g' B8 ~ P. p3 C) ~) E8 u4 c
2 p' p% s4 L3 q- s& L. C
[ (2 x - 1) (x - 1)]
( D0 v4 g) K7 ~, }3 i6 H[ ]
3 p [$ F3 d$ p1 G[ 4 ]. ~% x* C# d6 q) \# Y3 U& Y* A
[---- 3 x + 4 ]
8 N* g4 E3 A& U% N$ z[ 2 ]
6 I5 ~- t8 N4 [7 M* T9 |% q[ x ]
+ k" P0 l' @8 P2 B& p- y( g( I2 e% a- X, ^
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
8 d1 b5 z% n# N ppretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”) |& g9 H+ ]5 V7 t/ c
[ 3 2 ]
8 W. r( t" H7 [8 I x! H[ x + 5 x - 3 ]
1 r" c f2 @( A- h/ ]( J[3/2 -----------------] n! n9 M$ F' R0 b* |4 C
[ (2 x - 1) (x - 1)]
; c: H W7 A( O/ {& b; x: w, g; \[ ]) @: d+ b0 M+ `6 p" J' [( x( i4 R
[ 4 ]
7 u% f8 r D% e( d9 B/ P/ P; M[---- 3 x + 4 ]
+ w; I# R0 f% M[ 2 ]
2 s1 A& h1 L4 i" V8 D, e[ x ]. M5 s& m% u/ z
+ ]" S! L; D" M5 I! n
* T5 T) n- p+ e7 b【 * 例 6.2.1 -5 】简化
$ b/ K" F" Q8 s' F' ^(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)/ Q- C% ~6 }9 ^" C6 U3 E
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 0 Y" j0 I+ C( z- e9 y+ ^% M0 ?
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网 8 k {: |& M, b; h% _7 h
6 X6 }7 @7 j0 G5 _) jsfy1=simplify(f),sfy2=simplify(sfy1)
. y- ~5 A; j+ j3 Z. Osfy1 = & T! c5 M( Y% ], Y/ O5 T
((2*x+1)^3/x^3)^(1/3)
1 Y7 o! M0 H& y1 p/ Q; Asfy2 =
7 }& ]6 P9 y# A( N0 k# h% ^# H((2*x+1)^3/x^3)^(1/3)
* |. r8 ^& B% r9 N; p& Y& U5 F
& |" F& F% E8 K/ C- S& p* k+ e+ D(2)运用 simple 简化9 w* O' A+ T( h) x# U6 E
g1=simple(f),g2=simple(g1)
( z5 u5 x! O8 h$ D' D& gg1 = $ z) j) c, R& K5 o
(2*x+1)/x7 \) M: y2 | k7 P4 P1 M' |
g2 =. }1 | \( L, i
2+1/x
9 o) h8 o ], L8 Y; F
' t" n* O# m0 s/ N0 K5 U/ l8 N, }
9 c. Q7 u, A# Z: `【 * 例 6.2.1 -6 】简化
' ^! b: [4 p9 i! |2 vsyms x;ff=cos(x)+sqrt(-sin(x)^2);
7 w- @$ C, m: o- v# Qssfy1=simplify(ff),ssfy2=simplify(ssfy1), a: V- U* z6 K0 ^
ssfy1 = 4 O3 Q" a+ V8 D- u) x3 z/ ` C
cos(x)+(-sin(x)^2)^(1/2)9 T+ ~2 K4 T+ \+ p* Q
ssfy2 =
) l& D. ]1 F7 M8 N5 ?5 K& rcos(x)+(-sin(x)^2)^(1/2)5 X) C) q7 O7 q4 L" f- r
gg1=simple(ff),gg2=simple(gg1) 6 p; f5 c' l1 u6 T
gg1 =
R u+ h+ u- U; n: i7 @cos(x)+i*sin(x)
& @0 @! q( U" ?+ L: F8 }gg2 =
8 `- {# s( d8 U' f& Oexp(i*x)
% x8 T8 o, w) P$ b! ?
9 m( P+ j [6 g) o8 i9 f& O5 c+ [: W( P/ `. d
6.2.2 符号函数的求反和复合
5 |# C: s9 e- p% L e( c' W - g; H& J9 s" B* j- W+ m. y
7 [5 K# l. _8 {1 R# s/ n: |) W( y6 X/ U* ^* [% d! D, E
【 * 例 6.2.2 -1 】求 的反函数( O' Q( N0 v% X, s
syms x;f=x^2;g=finverse(f)
1 ?8 m2 w2 p1 x* F* u* lWarning: finverse(x^2) is not unique.
- Y" B7 b% h% o> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
5 A9 A- ~) i0 j7 rg =
6 n! ^5 m, F; C' L9 v( B7 Ix^(1/2) - A. @& J; R& W+ \3 L! \& _0 x
! W2 e1 h7 E5 F% ?" V" [3 Jfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
( D" Y3 b$ \% J5 y) N9 [+ m4 mfg =
& |- ^; y( ?7 I% L7 ?x 9 x w3 Q9 {1 A/ o. y/ M
' Q* O& V( J9 K1 n, r. L! u( i
【 * 例 6.2.2 -2 】求 的复合函数3 P! @9 o& x$ i" [' N% c/ \ _
( S& X$ P& k! q
(1)自变量由机器确定
+ H/ E C' G! D3 W Gsyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
E9 |& q- T% q; q* @fg1 =
0 Q8 N% Z) n' W. B+ V9 Acos(y+fai)/(1+u^2)8 U( o2 A$ |6 Z/ g0 r0 N
3 W$ I3 c8 s) T9 b) e6 B( U(2)指定自变量
& A9 M5 P4 W/ g9 V {. s4 y% j8 n! N3 w5 H. ?& O. M
fg2=compose(f,g,u,fai,t) # Z: r; F( U0 x5 t+ x
fg2 =
# k3 Y& T, m& C; K: }; J0 Ux/(1+cos(y+t)^2)# e4 D. H8 }6 r& |" X; A" c
# h1 H7 h2 J' \8 `" K+ l m" W Z: c# N$ ~+ K$ M6 L5 t
6.2.3 置换及其应用+ d0 e7 g6 F( q+ Q- Y
6.2.3.1 自动执行的子表达式置换指令
8 |$ J' n( l! L7 V- H) ^/ _, `4 Y- Q# z, g" `0 L* }
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。: ^7 z" t. p$ S9 v: u1 x; \: _
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
; d7 m5 s6 G1 n, c[RVD,W]=subexpr([V;D],W) %<2>0 G0 x+ g0 E2 w0 [
RVD =
0 g; I5 L) B0 |+ w, Z( x3 [" B0 V[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]& v1 I5 D4 u4 {2 A/ n
[ 1, 1]+ F" A- k5 `' V2 C( S4 N
[ 1/2*d+1/2*a+1/2*W, 0]
# d/ h( D% l$ F4 R( @[ 0, 1/2*d+1/2*a-1/2*W]+ L- m' W# X2 l1 }6 e
W =
U1 ~/ Y# B) B9 n3 x- t# Q+ w! [; M(d^2-2*a*d+a^2+4*b*c)^(1/2)
+ f+ T- H( g( R, ~+ [, z0 O) f% D( S1 g3 e" d* J" S& M5 G$ c3 O8 e* L
% E: Q9 u4 Y7 U
6.2.3.2 通用置换指令
' v: F3 z7 L! c3 i; _ c
1 u9 R6 Z: r8 A$ M【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
7 q3 I, F/ G/ t/ f(1)产生符号函数8 h! o- } W- p8 g/ ~' N
syms a x;f=a*sin(x)+5;
7 X! V* ?0 Z# ^! a+ {8 H5 |
; g$ x1 Y. D# @# {+ i3 ^(2)符号变量置换
. E$ K5 h$ q1 ^f1=subs(f,'sin(x)',sym('y')) %<2>
6 w- f3 J% B5 x6 N3 \: G# c9 c* X+ r) E. }/ G$ _! O
f1 =
3 `) r! M3 e6 U- k$ Pa*y+5
0 N1 _2 U9 ^8 ~6 T$ |1 M
/ t5 s1 ^9 R- A# w+ \1 Z3 ?(3)符号常数置换
, r6 J) [/ Q, m5 Ef2=subs(f,{a,x},{2,sym(pi/3)}) %<3> ; y4 h3 I6 n2 _9 o
f2 = 6 } ^, h0 V$ J
3^(1/2)+53 q6 g1 a: ~- s% s
, j" h) l2 z. @5 Q* R7 i
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )5 [1 E( C4 s. G* s7 l
f3=subs(f,{a,x},{2,pi/3}) %<4> . l' ~ i8 [9 o7 ]
f3 =
: e$ R! Q% V6 T* @6.7321
( N9 e0 ^ t& v7 ]. C0 `/ x& ^% |5 G
(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )5 o# F; Z, k% L5 i9 F3 C% N
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
; ^% q3 y7 O7 D# e% ]f4 =
$ H0 |9 r' p+ j9 X z2 f6 b5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
2 ~9 I; n5 \* W+ ^
$ [' K4 k, D3 ]4 K(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi ). u/ U8 c5 u+ s& }2 V
f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> ^& v% P) t6 x2 i0 L. D: r7 j8 ]
f5 =
. f1 I5 V0 L u; K4 Q5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000) N0 F3 [9 Y8 D; [
5 U9 n2 C. E- d, B' H8 x" o
7 m% X( A( X6 B# r% k) x6.2.4 符号数值精度控制和任意精度计算 f' F7 R: n9 A7 o6 s3 w
6.2.4.2 任意精度的符号数值! x. F, S5 j, e8 ?% b4 p6 s0 N4 n
k$ z0 t/ m$ D* Y& G" P
【 * 例 6.2.4 .2-1 】指令使用演示。
9 w# G" V2 e4 [( c& ~digits % 显示省缺符号数值计算相对精度9 c$ p" T: T" k1 g7 ?. Q7 g
Digits = 32 ; V! L+ g- d0 B. p& q
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
/ x0 Q& g) G' E# M7 g& z4 V* Up1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值- ^' d( `, u. c2 a- V% C% D) X
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
, y( s8 }+ r4 t- c+ `p1 = ' X _" y. q' [# j( E
7286977268806824*2^(-52)
2 g( s" A' y8 w5 a; |: we01 =7 A$ Z. g6 O) `8 F
.543211520368250e-16
. D7 ?" @; w2 B; e) r, Pp2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
: w3 y" w' |7 \" ne02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差: R1 d) [5 H6 i! K4 G
p2 = # I" P( e9 m0 z( W# l; Q' ^
1.61803398874989484820458683436576 H5 l7 |! \+ P+ w
e02 =
! o0 J3 U6 x9 u9 |.61882279690820194237137864551377e-31
" e9 O8 k4 i( j4 u# ]* o* I' ]" Cdigits % 验证 vpa 变精度计算不影响全局的符号数值计算精度) E" `$ c) a. `3 }
Digits = 32
- z$ S/ v8 ]1 }# C# z' ^* Z+ N5 i' I0 f2 U" {, |! N* U) J2 ]
$ I5 M4 Y+ m: v. ^* z, z6.2.5 符号对象与其它数据对象间的转换
" K" U; W" a( B0 J U9 G3 s3 ^- I' ^! W5 i
. A9 O4 l2 E4 {. M2 { D' D
【 * 例 6.2.5 -1 】符号、数值间的转换。
7 A$ V# w$ k: o/ k, ]' qphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数8 M& v; G K" h& g/ U- u
double(phi) % 把符号常数转换为双精度存储的数值- V" b. E) ^! B; G5 s" z. U
phi =
! O+ ~1 V2 k& G# e2 U. [1 @7286977268806824*2^(-52)
) B" O$ U& ]% g. eans =
% d! g( `) B+ v: K- D: K& ?# W1.6180! s7 U$ V1 t7 p
4 k, m$ M! L; e7 S; B
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换; t' K- @! R) y# p/ |6 m5 o
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式+ _) V+ O1 V" M6 T( {6 V
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量1 b" @) G* P; z0 D1 h& e
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式. K. L: U+ V9 q' W, p
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式
# d& i' ]/ D1 d) npretty(f,'x') % 显示符号多项式的易读表示形式
' X, Q S% ~: M+ K; _ Jsy2p =
$ |0 x |+ p% M1 2 -3 5
6 N1 @7 R. b; Z: O: \" D4 |p2st =
/ r1 l P" b6 Px^3 + 2 x^2 - 3 x + 50 F) a2 H; B5 B0 i1 c( ?2 J" \/ K$ x
p2sy =
}% ?+ u; s2 i* R- {. Ox^3+2*x^2-3*x+5
* F% R# c) [8 g- v6 v3 2
# J- x3 [% x( `- x- r z$ rx + 2 x - 3 x + 5
; b% x6 W) R. J
7 ~& \/ m) Y4 F7 r |