EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作) m" Z i+ O2 ~& W
( l. C- {, Y( W# s* W2 U8 p
6.2 符号表达式和符号函数的操作
3 N4 }& X) W* I1 C4 z4 D6.2.1 符号表达式的操作
- b/ M+ j& [* T. ]* Y
/ f& ^* k W! d5 R【 * 例 6.2.1 -1 】按不同的方式合并同幂项。- G _" {+ M! I$ S3 l7 D- ~
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); % B% B( R% B/ n! c) I# G4 A
expr1=collect(EXPR) % 默认合并 x 同幂项系数
' P& P, U1 w$ y0 n9 Jexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
) ~. I' \. A% u# E" q' n# g# pexpr1 =
6 V% T% n) j% C5 h: ~; tx^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t). M. E( }$ g1 b ~" s8 K; l
expr2 =
# r+ ~* L+ f+ B) P/ p( Ix*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x( D2 N" p9 n2 U' r' J, q) d
0 N! s% K& U8 Q- o& G
【 * 例 6.2.1 -2 】 factor 指令的使用5 d. B1 q3 _' k1 W
(1)除 x 外不含其它自由变量的情况( z0 \; u" J; [, ]
syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) " F- b+ H( `1 [+ e
ans =
+ [; H$ q. b& Z( k(x-1)*(x-2)*(x-3)*(x+1)4 n( z" w$ x6 y$ ~! v2 \, T
' q+ j8 J3 ]; A7 `; ?(2)含其它自由变量的情况之一* t+ o6 ^4 v5 Y& ~1 t
f2=x^2-a^2;factor(f2) # f( {* `: l) R
! E( l2 t7 O$ ?/ Q3 ~4 m
ans = 6 K2 c( o9 K- Y5 F$ L8 A( N+ u3 u: q
(x-a)*(x+a)
' r' Q, u3 b$ [' _' {
+ p2 c7 [9 \2 z4 d(3)对正整数的质数分解
5 M+ U3 h/ u+ V. t, Q, ~7 [factor(1025)
/ G: V- Y# b7 q! T @ans =
; W7 v( j# e- E* g5 5 41
1 ^. W# ^# ^) M! C' `, i/ ?1 r. g1 O& |/ X, w
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解
4 ~( _0 g; Y; `9 q: f0 E& |3 iclear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
- ?* P0 F' W9 K! dans =
6 B& B8 S. d8 E) Z9 _6 J-6+(5+(5+(-5+x)*x)*x)*x
1 H9 P' u7 A& y% {7 L# `9 l4 E
, G& `" ]: \- O3 B【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式1 M! h, h# `) @) ?! o
(1)求矩阵各元素的分子、分母多项式
' q: I9 S# g* i" \* r' m5 J) Wsyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
# q) i) e8 g; a! R3 ?7 x[n,d]=numden(A)" e# A; D/ v7 r4 G
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>& h" j% s9 Y+ m
n =
0 w( O1 V4 F0 q4 S! \[ 3, x^3+5*x^2-3]
4 k3 ^ |+ S; Z3 j. Q; w; @+ p5 O[ 4, 3*x+4]3 F' T& O: ~/ ^1 C5 d6 `) J
d =
6 [ I$ s* p, j+ q( s/ c/ g: a[ 2, (2*x-1)*(x-1)]% o4 \/ |3 q( x9 w* j. v8 `8 a5 u7 u; D
[ x^2, 1]
1 G7 L3 I4 W1 V" @- ~[ 3 2 ]4 `8 X2 ], g; ~6 t: H
[ x + 5 x - 3 ]
! T! [9 j$ S- f9 } h4 ?. |0 Q6 D+ G/ a[3/2 -----------------]
* l8 N+ \7 Y( ]8 P
, ^4 M C; @. v' B5 X0 g
; O* g; N+ E' k8 t# U7 d& n! Q7 z. T- V, U8 ?; O/ z& C
[ (2 x - 1) (x - 1)]
, s# A* v9 |: o4 w0 g2 ~[ ]6 x0 g: U8 A% u* n) a1 Z5 b/ w
[ 4 ]' V+ y t; c/ L- R
[---- 3 x + 4 ]6 _3 M: M9 F+ B6 l* l9 ^# R$ P8 v! n
[ 2 ]/ c# c9 R) @7 r, ]3 g
[ x ]) h, d4 `3 _0 x9 l( W
0 B3 J" `# c. v' l3 N0 V(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
; ^' ^+ L9 P; a3 @) U% ]& Ipretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
& `- L$ q+ ]% C. B! [( S5 G[ 3 2 ]4 _8 e* _; C8 f( u% M1 B* l
[ x + 5 x - 3 ]* i9 X) r# B% [4 P* _. D. [) O
[3/2 -----------------]
& _7 D; b h6 w$ @9 z% F[ (2 x - 1) (x - 1)]
7 F! v- [7 u o! ^! ~6 }( e[ ], D4 P0 e _+ v: G$ w) i
[ 4 ]
4 }2 S) y" w5 N! |% z5 ][---- 3 x + 4 ]
9 M7 Z& F3 y( g1 H& {[ 2 ]
5 ^6 F3 U9 R2 H6 `0 N7 K[ x ]2 o# u& f, E, `
4 q6 {; a7 r2 q
, }! A8 g/ ^' u【 * 例 6.2.1 -5 】简化 9 u6 v' [4 ]- @# ]
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)
6 ]- H% E/ H6 D- @" [5 [3 Jsyms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 0 |$ `: o- |, c+ e2 s
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网 8 H U( R8 H# o- m% Z9 `
# }# r; V0 G8 w2 T( D! q3 P) a
sfy1=simplify(f),sfy2=simplify(sfy1)( K d7 U3 P) [+ s! f+ c
sfy1 = - v, k9 Q2 c$ z6 `! e4 w
((2*x+1)^3/x^3)^(1/3)) H* m2 `/ T# L6 m7 J, ~: a) d& ]$ e
sfy2 =7 m# q" Q* `5 {
((2*x+1)^3/x^3)^(1/3)
3 s9 @" i2 |; k6 F& ~
5 D! T! k; |6 @" b) {(2)运用 simple 简化% t) y$ _$ x" B, z% g
g1=simple(f),g2=simple(g1) . h6 n+ B" f9 l# V3 V. Y3 X: P
g1 =
( t& h: M0 P: Y- N(2*x+1)/x' \5 C. C! w$ B
g2 =; t6 M" P# _- U6 J. r1 B1 a
2+1/x
9 _8 ^6 J$ U0 C6 ^+ b& `* N% e' i% g! }
/ I0 x7 i; d+ [5 |* `. k【 * 例 6.2.1 -6 】简化 ' X, d" O; T6 M- L! B M3 q
syms x;ff=cos(x)+sqrt(-sin(x)^2);
+ k, p. B0 R+ ]! Y% Wssfy1=simplify(ff),ssfy2=simplify(ssfy1)
4 L: ~# E( o4 e3 a issfy1 = $ j5 B$ t; h& |- a& f7 B- p6 Z5 i, w
cos(x)+(-sin(x)^2)^(1/2)
" ?8 N, \: {3 qssfy2 =
( ]; R; G6 t) I9 e; C* Wcos(x)+(-sin(x)^2)^(1/2)
: V0 w! O, p3 I7 J3 z+ Cgg1=simple(ff),gg2=simple(gg1) 4 A3 U$ M1 b; \! v6 t: ?
gg1 =
0 h1 X- {: S* Z; Jcos(x)+i*sin(x)8 d, ]1 _5 a% \/ e2 e! _
gg2 =
# ^; h5 c: z! K l6 q1 |exp(i*x)7 c" p, `: ~' U/ w
. G0 L9 {5 |* k7 ?9 Y
$ T* s; X5 w+ U2 D' }' }" i
6.2.2 符号函数的求反和复合 ; d; z8 o) ~8 m7 E0 N7 `/ m1 h
7 X& L) i7 C5 Y* N% r8 x
9 _' V, A- \4 e/ O3 k# }# W0 x) E5 b! ? X$ P. t) X
【 * 例 6.2.2 -1 】求 的反函数! N/ L9 o# T) f2 l' u7 ~3 M
syms x;f=x^2;g=finverse(f) 3 R% y; j6 H/ o; O
Warning: finverse(x^2) is not unique. . e# l* k; h2 }( |5 E. }
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 435 d6 \7 ?& C3 i. ]/ k. C; g, i0 m
g =1 ~0 _+ Y9 \$ l" ]0 G. p- T0 s
x^(1/2) - W9 K( @! @/ m, B7 {/ d& X1 V
7 j: @) W' U# s1 ~' Efg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
; x( m' Q- P( k9 o' Hfg = ; p, B G6 ^) r& J, O8 z9 A
x
' G/ y# K5 P, _2 p H8 A
# f$ C5 u: m/ q0 {, u0 \+ T; [【 * 例 6.2.2 -2 】求 的复合函数
% B5 h6 X* ~# l, H" t1 x! J
( s/ G9 n M. U1 z6 G; x8 I3 x(1)自变量由机器确定
. D) F2 n4 Q! u" D" Usyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) / { ?& r* Y5 Z7 L
fg1 =
( a5 m) `6 q8 F3 F6 q- Ycos(y+fai)/(1+u^2)- r% q* D- {: g" T5 C/ n; }, V# a
0 _. h0 C0 ^/ |- K; W(2)指定自变量! ^5 B( w: `- K
4 S: b$ `3 Q# N1 d9 X
fg2=compose(f,g,u,fai,t) 3 V4 G: a R/ u' g% h- `
fg2 =, N4 H9 q4 \2 Y1 i/ I0 H* W
x/(1+cos(y+t)^2)
( A J) l/ h5 ]# O; d
+ w) x% C9 n8 [+ R. n {, _
7 ~, Y( h; A( P8 k' T! f5 G+ S' E s6.2.3 置换及其应用( Y& i& @% S# C6 K1 A# O( R
6.2.3.1 自动执行的子表达式置换指令
' U# p- n l' I4 S4 R5 w8 C" _8 L8 r. H& U4 `8 w
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。3 `" @# M# X3 i( y1 A2 _) X
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
5 K+ b& A/ Z" d8 O; t# Q( u[RVD,W]=subexpr([V;D],W) %<2>
2 x2 a1 q& X* H' g5 t: A- t, rRVD =/ h8 u: T E0 z' Q
[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]8 r! i: N3 \# t0 T8 @, t' W8 S! s
[ 1, 1]
+ m1 @ p. l/ V. l5 T% n: b[ 1/2*d+1/2*a+1/2*W, 0]
4 D4 ~( W# c$ c F- P0 u[ 0, 1/2*d+1/2*a-1/2*W]
9 _. a& r) o3 r: T( ?W =
X6 j7 n& k" j& i8 G6 j! k( K(d^2-2*a*d+a^2+4*b*c)^(1/2)1 F- v" r7 C' ?
9 Y) z$ R5 F0 o; K$ g0 S) z3 j& y& s O3 i: D: s' |
6.2.3.2 通用置换指令
1 O2 Q! Z' s; o# B; u+ d% S
6 X9 T% k9 t5 O8 T【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。* k7 o7 Z- K+ @. A+ H, M1 B0 x$ e& i
(1)产生符号函数
* C; u9 {# S; a- m8 X7 [$ Wsyms a x;f=a*sin(x)+5;
( Y0 u% r4 N/ T* S5 J) x$ i0 c9 z5 e& K6 @
(2)符号变量置换
1 ?3 ^; ]* U3 p4 r5 u5 gf1=subs(f,'sin(x)',sym('y')) %<2>
% e$ [" i" g' T8 t
% C* }+ }6 p# s9 ]1 Zf1 = 5 @6 B8 v( h* q% K& e
a*y+5
, K# G$ n! b& `' F( n/ N* j) H+ s- G3 W
(3)符号常数置换/ ]( Y. i- l V# ~! r; r) ~) x
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
y+ Q" Z* |% x4 h0 Sf2 =
1 M" D5 l/ F2 Z# ^3^(1/2)+5
/ s3 H% Y( u7 z/ P' v" b+ i) y$ ], B* B8 }. S
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
7 i, U0 o! B- N$ W% N3 af3=subs(f,{a,x},{2,pi/3}) %<4>
2 c* _4 n7 {5 [f3 =
/ j( |" K# j8 p; g; ~6.7321
- ^/ f5 }+ [/ N3 Y
. c6 V, \" j9 F+ D# j(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )( h5 t0 H% |0 j
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
2 c; U s& E( u( I, Of4 = + ~( m0 {5 l% @) |4 r d0 n% Z
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
0 n; e/ d0 `& f$ P/ O, x' W
- g2 W, z N! D& m% h R+ E p(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )5 p. U5 Z/ U7 V
f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
/ y# {8 o# q L1 F! W" vf5 = & |# l2 f. [+ m" u& r% ^, K% Q+ V
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000) I1 {: ^/ l# y% P6 K
9 z4 u: U9 G+ [( W1 B F, B/ R
3 e' F" ~; b7 _' U- y' s3 c( s: d6.2.4 符号数值精度控制和任意精度计算' j0 H& P+ J) _/ j4 X' |4 |
6.2.4.2 任意精度的符号数值
; S5 E# [: C: x0 q5 G
( y8 s, b3 @$ r( M; k【 * 例 6.2.4 .2-1 】指令使用演示。1 ~! Y( }; m w
digits % 显示省缺符号数值计算相对精度
, O; [# Z1 v6 i+ VDigits = 32
8 T/ w9 I: y L: \: Y" h8 i* ]" @p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
3 E/ d+ N: \% d- J9 l* t( K) p$ Yp1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值+ d6 O0 m, f D5 b
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
7 [( u1 q) o7 ]p1 =
( S3 E# [6 m' ?& ^+ W7286977268806824*2^(-52)5 Z( Z5 h2 O" o3 _& y
e01 =2 c6 b1 ^( B5 j8 z; a I
.543211520368250e-16
0 ^( w, H" u& `+ s2 o4 ~p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似+ X) o ?5 p; f- v* P: a
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差1 k, r, Q8 Z6 S5 t9 A
p2 =
$ h5 t; g. Q& p1 s% K7 z1.6180339887498948482045868343657
; Y. F) H9 Q: R: R4 \/ Be02 =- B! D8 D" z( j0 c4 p
.61882279690820194237137864551377e-31! s$ _. |+ S" Q- g& P
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
! g. g7 X: ]: z4 n% d: R. rDigits = 32 . R3 G& s8 u5 D
) g/ H/ K* i( E/ q3 o
: [$ l% M" ?- I9 g
6.2.5 符号对象与其它数据对象间的转换" D3 i+ U6 t- i
$ F5 S% C2 g0 H# k2 x5 O8 M
5 I* a0 I+ D, _. B4 W【 * 例 6.2.5 -1 】符号、数值间的转换。8 o* M) l' c8 R2 h2 l2 F4 S8 x/ p
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
2 h+ D. N0 Y3 e5 Ddouble(phi) % 把符号常数转换为双精度存储的数值
% e7 g& x% s; C7 c" M% J0 ^phi =
1 S9 u' {8 j; s2 R0 r* ~# Z; P7286977268806824*2^(-52)$ n2 P" | H" _/ E7 r0 P' |
ans =9 y, m" ]# a- G8 j& I/ s- W
1.6180
; l& J B7 G& o, {
* c* `2 Q* d w2 X2 Y【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
+ ^4 t6 Y9 ^# n- y3 qsyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式1 S; N+ A3 z4 g
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量' l1 O/ r n. r9 r$ j
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式+ b, h8 e. q+ [! O L
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式: X- `( Z+ l5 W3 D) J
pretty(f,'x') % 显示符号多项式的易读表示形式
( ], X1 ]2 d* K: L; l9 m- usy2p =
" l& Q; i& A* C5 Y' I1 2 -3 5+ A% {$ K1 v9 j8 z$ s
p2st =
% \# M$ I; T, E7 T3 A) Q0 ?x^3 + 2 x^2 - 3 x + 5
* E- N" Y4 l# b7 \" l- s' s% mp2sy =% U" z; L c% x" \( d
x^3+2*x^2-3*x+5
" E( ?( [. |6 {9 f, @3 2
$ _! q; ^1 k( `2 x2 x( bx + 2 x - 3 x + 5 ) n E0 k5 [% Z r; z
2 L L5 u5 t0 E8 f5 } |