EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作$ O( |6 f9 @6 ]/ t
. r! n: `* e; M6.2 符号表达式和符号函数的操作- n5 i0 [# ?" O' z4 S& A! D% F' J, O
6.2.1 符号表达式的操作
) r# [! l: n" b' P
3 L" O3 C; p1 V: d k) ~【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
4 ?* W4 n& i" t- l, [$ h6 {" UEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
' H5 T- _, w i6 v% X! Rexpr1=collect(EXPR) % 默认合并 x 同幂项系数% t/ X( o/ J7 `6 o- P5 l; \
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数6 \& Q8 t& y) \. Y5 f
expr1 =
" T, u) b, J( |) k. M6 |x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
: g7 C9 V& G! R/ sexpr2 =
! J- {' t6 `7 N- Ax*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x
2 W/ L! u% f; w6 s6 D
+ A0 ~7 W; O; K5 {3 j【 * 例 6.2.1 -2 】 factor 指令的使用; H- F6 f, @: p+ d V
(1)除 x 外不含其它自由变量的情况+ E3 {! a* W* {- ?, N$ c
syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
0 N" m# l9 E, U uans = 7 o w K/ ^0 n2 V7 {
(x-1)*(x-2)*(x-3)*(x+1)$ y4 {! m! b! _8 n: r
1 A0 f$ }6 P1 c, t) T% F
(2)含其它自由变量的情况之一
" D0 l; c8 P' [0 h2 ~4 T; Vf2=x^2-a^2;factor(f2) & k/ W: P2 V# J0 @- x$ H2 {
& U1 K, `8 i0 ?4 x; \ans =
; j& X# S U3 Y4 }5 r# n9 l, ~(x-a)*(x+a), [4 O4 x5 L& E
7 K, i/ G8 i/ z5 X(3)对正整数的质数分解$ Z: P" T' R$ I* u& a' G- y! |
factor(1025)
, X/ B% W5 X$ [* a* Nans =
: {4 O5 ~; F' D* C! Q6 H D* Y/ n: N5 5 41
8 r/ M' p" g! }, V' U# v# b5 U& G/ F. b* V& T# Z. m: [, k
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解
1 b; l# j* [9 y& k7 v) q) Y# Oclear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) " Q7 V- b6 p" U
ans =
& ~1 m$ i: O4 Y# Q( E, s' X. ]-6+(5+(5+(-5+x)*x)*x)*x' [0 F9 J3 C( R
& w: s/ W$ h) e$ X8 y% O
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
9 h: B9 }; C g3 V$ z. t(1)求矩阵各元素的分子、分母多项式0 l, ?4 p. w" j/ k, g; k6 Y" C
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; - g& |5 \% E9 p" e! M- e& T1 u
[n,d]=numden(A)
1 a; Y3 p2 ?/ ^; L7 ~$ L" |pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
" {/ `) m+ U) w+ T: vn = 5 B0 \6 D8 a2 H, C
[ 3, x^3+5*x^2-3]& Q& h! ~; ]; i* Q
[ 4, 3*x+4]9 G" U0 c& B9 X
d =
9 |! v+ ~) J8 `; U& R[ 2, (2*x-1)*(x-1)]; p c; \6 |1 H: q' U9 p. i0 e4 v
[ x^2, 1]
# c* x$ B3 h, O7 X( L6 F[ 3 2 ]
* Y( I9 k' p9 ]5 n' ?[ x + 5 x - 3 ]
3 l( p' V9 h# ]/ @* @[3/2 -----------------]
- U8 ?, o8 o: d9 \3 y) s- ?6 X, F% ^* g# }7 P8 w4 i
' j; r0 D7 t2 R# R* B: P, d: V5 N5 E+ I6 r
; i% D# C4 l0 i, n' w1 p4 ?' \[ (2 x - 1) (x - 1)]7 H7 l* a) t6 K# W, m, ?
[ ]
- \" b: k2 T& R) Z' Z P[ 4 ]
8 X7 p( Z% G9 J/ E* g+ P[---- 3 x + 4 ]1 J+ G2 q, c$ n# b. Q. J
[ 2 ]
; V2 B6 ?: z3 \' Q5 w5 _0 {) ^[ x ]9 W; v* A2 y @# C5 ?0 `/ U
" r9 M0 v2 ^: H3 j. A
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
4 N# r) v' L, `6 m( g, R opretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
1 D/ P( \# W- W1 |; l[ 3 2 ]) k+ k9 J6 s( h; `! _( S
[ x + 5 x - 3 ]
& r" A+ ]/ h, j: h1 |- q[3/2 -----------------]2 N: e, w6 i o: ^" D
[ (2 x - 1) (x - 1)]
0 z4 q$ r0 W- H4 A( G# U) O[ ]
# t4 {9 s1 J. \% Z[ 4 ]
. E/ p4 Q ~; q) H3 ~[---- 3 x + 4 ]0 h' \. [$ n8 j( Y
[ 2 ]( `. J8 y' s' v1 w p$ r
[ x ]
* ]: s% u6 j- o* n1 L7 t7 [2 m/ U9 h
, i) g6 p2 \8 W) M9 `) N5 N( Y! }【 * 例 6.2.1 -5 】简化
; m1 E" D$ o h# Y6 K" c0 t3 Q* |(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)8 O. @9 f" [. E! r, j
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 6 u# b$ S' A! w1 u# x- b. B
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
# `- ?) Y2 C( a3 M6 d: C$ q: D, c/ b9 X7 O' j: ?8 x
sfy1=simplify(f),sfy2=simplify(sfy1)
0 h/ }, k1 k: c! j: J. Msfy1 =
: B2 N. Y# g5 F$ q' H((2*x+1)^3/x^3)^(1/3)+ T, n* g& q. E6 ~
sfy2 =8 L! ~' L' X: X1 ^- w0 l' Q
((2*x+1)^3/x^3)^(1/3)0 R2 [; R1 q+ j2 Q7 j
# |- L; ? r' I( _(2)运用 simple 简化. O; ?$ y9 n/ o- h, @. c1 C
g1=simple(f),g2=simple(g1) 7 r( N* N) e$ n( \; X
g1 = 6 R j9 R+ `6 c( X% k/ b6 v& x: b
(2*x+1)/x4 Q1 T8 C1 Q3 c3 v
g2 =
Q" b* B8 x9 P0 \/ y- \) S7 d2+1/x$ {, l: X: Y$ O% W" C. R8 Q1 g
( E* V8 L7 I6 b& z
, K! u. \1 H! I, v7 F/ o【 * 例 6.2.1 -6 】简化 : ]" K5 S( w6 Y9 R/ T; [
syms x;ff=cos(x)+sqrt(-sin(x)^2); $ G1 }' b2 l6 w
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)( ?- v! V7 h% G2 e% u4 V$ S2 g
ssfy1 =
& ~ C2 o& d, X, U* T3 ^cos(x)+(-sin(x)^2)^(1/2)# q# @6 T3 k7 u2 i0 I
ssfy2 =! V/ [% Z: y9 V# @, {
cos(x)+(-sin(x)^2)^(1/2)
$ k9 x" k% o# b; S; H* D1 ?gg1=simple(ff),gg2=simple(gg1)
: ?& A+ z6 `, U# J0 Wgg1 =
3 |. K" U6 n \/ j9 ~. j& J- p3 acos(x)+i*sin(x)
6 c* Q6 y: [2 Bgg2 =
; c" a5 j8 t/ ^* {7 W% yexp(i*x)3 H. ?( e( L, ]: z) x+ H- A
7 k6 ?, b$ X* Y8 f3 y0 y
, w% d, V Z) a1 Q6.2.2 符号函数的求反和复合
" `! G& J7 W! c! a; p8 { 2 O" a1 [1 N& G/ x5 {7 [
6 h: @9 [+ o4 y6 _0 [5 M! I' u% L6 C1 y: l- E1 J! k; }
【 * 例 6.2.2 -1 】求 的反函数* }3 D ^0 f- c
syms x;f=x^2;g=finverse(f) , D1 u- N8 l5 \; U t
Warning: finverse(x^2) is not unique. 7 A. {4 a" g2 ]/ ^: a
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43) X1 D( b9 {0 k. M2 o
g =! F: b% _( M+ a5 `8 ?7 s
x^(1/2) 4 C$ U$ P5 b- K y v6 N
. o f7 J3 e& c, \
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
* v+ V; C4 D7 o4 x6 _1 x! _fg =
( x3 _7 C1 i5 ^# Ix 3 F1 D+ ^! a, l b) f
# R) y, x: q- Y. Q1 M
【 * 例 6.2.2 -2 】求 的复合函数
* C+ A2 i" x0 }" M. P* `$ D5 Q4 @5 v; q( k" \
(1)自变量由机器确定( ~0 m. d) X0 X# ?7 I/ `
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
( R: \/ h ?7 `. C. c* Z# ^fg1 = # Q- O+ y5 a3 {. L7 k
cos(y+fai)/(1+u^2)3 {; ?% n4 a6 O
2 `7 n! s* H9 S# ^4 d V(2)指定自变量
" I7 W1 V' \! u' u4 j; l: j" v3 i8 C/ E, T+ @6 x/ d6 j
fg2=compose(f,g,u,fai,t)
9 k+ t( G, f4 z& _' F+ b8 d1 ?fg2 =0 D# ?, \, G* r* o; l
x/(1+cos(y+t)^2)
0 q, Y. F7 k) H/ o$ ?6 j; E( S0 Y2 g+ q
+ @1 B' F6 ~' u6.2.3 置换及其应用% |: }8 j5 I8 L$ M
6.2.3.1 自动执行的子表达式置换指令* {+ t9 q6 }' T4 u6 r- S, |' T" `
& D) u8 W* n3 @ ^* U: Q5 N
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
7 i* b4 l7 A1 j4 E1 F5 Z9 f' T! Q3 kclear all,syms a b c d W;[V,D]=eig([a b;c d]);
% \7 U5 r9 H1 { f[RVD,W]=subexpr([V;D],W) %<2>
% `( x$ N8 v" n0 F! y4 mRVD =
0 w5 Y- T+ \& @+ S+ A[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]
d5 Y" h. M) Y( U( k6 Y9 ?[ 1, 1]
. o6 O9 V' G# q7 M& N6 W[ 1/2*d+1/2*a+1/2*W, 0]
; X) u% V$ J6 ^* N( R- X[ 0, 1/2*d+1/2*a-1/2*W]1 \4 W% L! m( G) I- n# h* [8 j* G
W =
# Q$ e# C7 t0 }( M9 n1 C9 P* b9 V(d^2-2*a*d+a^2+4*b*c)^(1/2)% R3 G7 Y# D/ \6 Q4 Z& J
: v4 P! E- V& ?3 M9 C7 U
* N; l4 b+ z; I* G
6.2.3.2 通用置换指令' e" T) c& K# E0 P6 Z
2 k- S% i- a$ z+ ~【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。1 S' p. r1 o: Z1 @* \! [
(1)产生符号函数; o- R3 x/ l5 {% s# ^ f& i+ Z4 [
syms a x;f=a*sin(x)+5;
: D5 l6 s T) h( H1 b: W5 T! N
# o0 U6 D9 x* Y. W" F7 T& u(2)符号变量置换4 K% L! w9 Y9 p' u* v
f1=subs(f,'sin(x)',sym('y')) %<2>
. x0 U3 e$ V* m/ _5 |. V
3 I3 E: l4 v) W: Q; F: H/ z; Qf1 =
+ B9 G3 @# d8 Q/ [6 s; R9 P) wa*y+5
* H1 O$ S( x6 q: p7 O5 q) p6 N; T1 K; {
(3)符号常数置换
$ I4 s- K+ @! D! @f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
- ^6 q* N( a1 o- g+ y5 [5 Qf2 =
' D; ]( u+ n- V; a3 d3^(1/2)+5( H& N' y+ }" e5 e8 q+ x
9 O5 [3 o) c% w2 o/ S7 b: x5 \
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
; t" ?8 b# y5 n+ E6 q; u5 bf3=subs(f,{a,x},{2,pi/3}) %<4>
; W9 p% [+ }, v. O) _f3 = % h: `, n4 b3 S2 R( a
6.7321 / G$ j; [5 m& U- e: p; t7 a- [
/ `) J2 P$ o, c1 C \5 |0 z(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )" m+ |" i9 A; Q2 a) n6 O9 s
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> ( f- B& O" ?3 m& I9 B* @
f4 =
* w% i h0 x# a5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
- l" w) A1 _$ r% o% V; i2 A: A6 B
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
/ z9 Q% U" o T+ ~f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
5 G! i: K; Q( N9 u, L$ Df5 = ' N" \ S- R4 k
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
& I, }$ U% g$ W# A! y7 E
0 S6 ]$ Q8 M" [1 B4 ?" p: M- O3 C1 U' l% S* E
6.2.4 符号数值精度控制和任意精度计算
6 ~" e% ]0 q: G8 O5 P$ E |6.2.4.2 任意精度的符号数值
1 R: Z I0 d+ x( a. ^* a% a! \- O6 J+ a
【 * 例 6.2.4 .2-1 】指令使用演示。8 i" c. X+ u+ H4 J1 i
digits % 显示省缺符号数值计算相对精度2 L& J2 G# ^8 X4 ~! L
Digits = 32 ' D3 x: G! x& R( y1 w- l4 {
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
- A- x) }* m9 ?5 T$ m' Fp1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
5 c) ~" n ?" @2 h8 y) Pe01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差1 m3 I" R) f8 e
p1 =
; E: k4 B& X; g& Y) n7286977268806824*2^(-52)5 e4 E3 k# @2 K9 r! r
e01 =% z8 B2 S% o) a5 D# U% w( @
.543211520368250e-16
3 G6 s, }$ [' p7 vp2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
8 h2 A7 K! c. u! Ae02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
# o# l: h3 K _% m2 h( Rp2 =
/ ^0 e% G& l) t: W- w: N1.6180339887498948482045868343657
, x- t( v9 w8 k9 e/ Ze02 =
1 F" m/ p$ t! x* c.61882279690820194237137864551377e-31/ s8 U2 h6 g* ]: b; j1 q6 a
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
/ n( [; f% m* C) [1 e+ T; VDigits = 32
6 N) E' N: ]+ C1 C+ z( x+ ]; l6 Q9 @: L- Z3 @* Y
' K/ s7 ` b$ Y6 u) X6.2.5 符号对象与其它数据对象间的转换7 F! A5 r" a5 n' ^! N9 i: {$ h
/ k- q4 g4 M) Y0 S
6 l4 c5 q" X* F% K
【 * 例 6.2.5 -1 】符号、数值间的转换。
; R+ E; V# H, U0 m: ephi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数 t+ t* I+ c3 G0 Y
double(phi) % 把符号常数转换为双精度存储的数值" N/ j% {/ X, L! u+ _
phi =
" A1 G5 E. D" l3 _6 x) F2 M1 B7286977268806824*2^(-52); j. ?7 A8 y& h m1 D
ans =
* `% `, N. D; y) H/ n0 {1.6180) V: b3 j3 C5 Y# \
- K0 \! Y8 {6 _1 m& d
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换$ G, }! s+ O" ~* U8 q( m
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
+ L' n. Z# n& |: l1 L0 Q! ?+ Gsy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
# G4 Q! L \( Gp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式+ U/ _: z! t, {; x ?% r8 B
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式
; o- C& O% m# r8 \pretty(f,'x') % 显示符号多项式的易读表示形式
* B5 z1 A% y G/ Q; `, O. zsy2p =
" A3 J) K X, e' |5 C1 2 -3 5) k. ?* a! A5 X3 M+ s, n
p2st =
: \8 ^1 d; N% `5 n2 J* d. t& Cx^3 + 2 x^2 - 3 x + 5) P/ ]. x( Z* B2 j; q) f2 P
p2sy =8 K; P! l7 ~& j
x^3+2*x^2-3*x+5
) { W" w2 a- D7 Y2 x3 2
, m! `3 c$ n- y5 M/ O' gx + 2 x - 3 x + 5
& F( D" p' u9 K" e; f& d' \' o" I- t' J
|