EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作
! W" \' e" o# S8 w7 [- E2 m, a( y" t# Z; i% T( H* u7 O
6.2 符号表达式和符号函数的操作 M) \# {; b+ `' T) W
6.2.1 符号表达式的操作# e2 p( `4 J3 s1 \
% b; n! R- ]& x- o7 @7 ]( z |【 * 例 6.2.1 -1 】按不同的方式合并同幂项。/ B2 X0 E ?- d- G% u( k. p
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); 1 N- u1 C2 r6 d3 r+ ~9 @
expr1=collect(EXPR) % 默认合并 x 同幂项系数+ R7 b% r1 m( q* ~; w
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
: k( q; D7 K& V8 Nexpr1 =
, |1 d# K4 r5 Z- c) rx^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)8 ?. G. u2 P0 z9 F$ e+ {
expr2 =4 C' U! n. x) B; f6 r
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x1 r+ ]4 X5 b h& M& R
" l* W* Y' S4 i5 T7 \
【 * 例 6.2.1 -2 】 factor 指令的使用
% F5 T+ v! t' A- }( Y, k/ x2 C(1)除 x 外不含其它自由变量的情况
7 ?6 I0 L4 N3 e. Bsyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
+ ~. b, ~3 b# B: w$ gans =
) @7 ?, k- { }6 ?0 h(x-1)*(x-2)*(x-3)*(x+1)
1 q4 X6 w3 ?% r2 q9 i
; C; h7 F2 C- H; X2 e(2)含其它自由变量的情况之一) c/ A# _4 ~8 J0 q7 a% E$ J Y
f2=x^2-a^2;factor(f2)
! J+ N) b8 e: U& m# V( _
# y, }' z; v1 Cans = h+ i: N3 ]' ]2 E7 t' Z$ }
(x-a)*(x+a)5 o2 |7 i' v3 w* m
% P& c5 W' N; S# W3 @(3)对正整数的质数分解* V3 J* h; ^, u1 ]& }/ ?: q+ M
factor(1025) $ u0 C5 T- g$ N: f
ans =
2 |- i: ?& H. H9 O4 x/ e' S5 5 41
3 C5 r+ l) @+ ?, L8 B! R" A9 a6 J1 t8 H& E5 y3 u: r8 l6 r5 U) z
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解, h: }4 T' \; {& u
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
6 y7 @) y: i! w l& nans =
( U* P* k0 O1 u( b7 b2 m) c6 G-6+(5+(5+(-5+x)*x)*x)*x7 S! I6 W* i% Q0 C, }/ l! M
2 K. d4 u' U y. N【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
( a- X1 [" A5 ]1 g* M(1)求矩阵各元素的分子、分母多项式( {( c$ a' t* {) }( v5 |4 R: o' B) W" c
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; 5 D2 u3 E: d' Q6 }% z( _
[n,d]=numden(A)$ H. q! S5 q$ J& o
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>. X. P8 [# E) U5 k4 a* H. Q& G
n =
. F9 B% e8 \- U8 h[ 3, x^3+5*x^2-3]
* W! v9 x1 ]* ^0 f[ 4, 3*x+4]3 m9 X( B( j0 y% B4 \! w
d =
6 S$ S. y. V& x" @5 N[ 2, (2*x-1)*(x-1)]* r) H4 ]* u( v4 a6 o) H1 f! V
[ x^2, 1]5 t- g7 h3 ~) Y: g1 q
[ 3 2 ]
2 B* \' w# L F[ x + 5 x - 3 ]
1 ?7 G/ O$ J7 \) z+ V5 R/ u. w[3/2 -----------------]+ D3 {' j. a1 Z+ X( u. c- K5 p
' C k6 W- x9 {9 x6 T" H* e
8 X+ b, \' S( M% r2 l; [8 G" I, @# M) l4 H& ^5 R3 K
[ (2 x - 1) (x - 1)]- Z/ ~, h7 c0 T8 }* U; Y
[ ]- z- a( \; ?7 e0 i5 m2 \ f
[ 4 ]
, l7 z% P$ p# _6 i/ V& Y; ][---- 3 x + 4 ]
4 M2 ~! p. q$ h3 m3 j: M[ 2 ]
" R |- A/ j7 O[ x ]
3 q" A/ }% x; D, G4 F3 N& b( R. S8 R W, x8 q% Y! k! n
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
$ t, _# E4 }+ ~pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
/ k' f+ g! B( y0 b2 u- [% N[ 3 2 ]1 j- ]' o) h* X# K+ l1 r, r
[ x + 5 x - 3 ]0 r; Y; ~ D- T
[3/2 -----------------]6 O8 c2 ]. r- B$ ?+ k7 Z
[ (2 x - 1) (x - 1)]
6 X+ x5 {- z" U! o[ ]
0 W3 `9 f$ s$ N9 L4 l' ~& X[ 4 ]' J& F6 B+ J% s* r% ]" X/ W2 x
[---- 3 x + 4 ]; ?( r2 v9 [0 O6 `. ^3 _5 q% N) b2 r9 q
[ 2 ]
# d7 K. ?: D: ]5 a! H/ T2 e[ x ]6 v- }) [7 E. N$ [
! O: J* r9 ~% H! U2 g7 d/ F, G, ]
- v5 T0 ?! s8 M$ O0 x; z
【 * 例 6.2.1 -5 】简化 6 X9 d- p3 C+ P4 k. x
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)8 [. a5 u6 V9 U; X0 _0 m. I! D3 a- f
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); # h6 s2 k$ v G. Z0 c, N
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
' F% F% B: B' P! b6 B' H+ E/ z& q/ b# f
sfy1=simplify(f),sfy2=simplify(sfy1)& [8 ?4 ?: Q; B' g( G! @
sfy1 =
m7 D! P' O, \ W/ M; Z5 V((2*x+1)^3/x^3)^(1/3)+ {7 W: _, Q f. l$ _2 y8 ?4 M
sfy2 =
, n5 M- |+ e# [+ n((2*x+1)^3/x^3)^(1/3)
) ? r4 T; u0 l1 }
% G9 M& m6 ` h8 T(2)运用 simple 简化3 U2 I& w0 r9 f' K# D% ~) m1 s Z
g1=simple(f),g2=simple(g1)
) r+ K. ^6 r0 h' D/ dg1 =
9 L! G: \; r. \. o+ R- u- |7 Z(2*x+1)/x3 s1 o' b3 T `8 B1 _1 p$ o
g2 =
1 f. t6 w3 r. z5 R5 l2+1/x
5 F! k4 r A9 e8 q% @# K
q- e$ |( Z, _
; @% c8 K* R; w* a) ` G+ r【 * 例 6.2.1 -6 】简化
( u% _5 r$ k# a' \7 y: Msyms x;ff=cos(x)+sqrt(-sin(x)^2);
# i" O4 A" @& {% l$ ]+ R9 Dssfy1=simplify(ff),ssfy2=simplify(ssfy1)
/ p$ i" r5 ]9 d, j9 G7 G" e+ L1 Jssfy1 =
3 f& }4 z9 [2 Wcos(x)+(-sin(x)^2)^(1/2)% |8 ^( {6 G, f" \; a* `/ A1 _
ssfy2 = G$ o2 A/ X3 |
cos(x)+(-sin(x)^2)^(1/2)
' {/ \+ F# ^( y& w% fgg1=simple(ff),gg2=simple(gg1)
) p A$ Q+ Q* {! N5 i$ [1 o6 m5 agg1 = 0 I2 K+ ^% H' ?4 {/ @
cos(x)+i*sin(x)% D6 t. `! X/ p2 Q, w$ b( ]
gg2 =5 i" P. r; U' b- S' A+ M
exp(i*x)
6 k* G W$ ~% U6 [9 y2 K* M4 m5 G) b4 F6 e7 H* O
# b' I' m% o& K6 g
6.2.2 符号函数的求反和复合 , k0 K+ S$ A2 A7 N$ |9 P9 i z- h' G
1 |) U% v% G2 ^$ G4 W {$ @+ i
: b# X+ F; I) n/ g2 O0 T0 m7 i7 a7 Z! h) V
/ D7 h6 y) ~0 V3 Y0 p& R; o" w z【 * 例 6.2.2 -1 】求 的反函数8 p8 M) N5 X+ l a6 \! H/ f
syms x;f=x^2;g=finverse(f)
" R( d& G& y+ A( e5 _Warning: finverse(x^2) is not unique.
( A# u- C3 J8 c2 q3 I) D! S> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
& R: e5 Z* K( o( M( A4 xg =
) V: |8 a6 I" E: `+ x, u6 Y0 Ox^(1/2) 8 f1 m; E1 U3 P, K' w0 \+ Q# x9 }5 [
6 l( L5 f. p' `# F( s
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x8 P$ K# W( b4 d) {0 J$ H
fg = ' r* b4 `5 l4 m- z' J) }# n& ?
x 3 y( B! [( p1 v) M5 V* A, N
3 m6 [( {1 w' a
【 * 例 6.2.2 -2 】求 的复合函数) H1 Z$ @6 _6 w* H M5 o; H
8 {! G0 B) g4 H8 B# p; ~1 |(1)自变量由机器确定
( \, n% F- `+ K4 z7 |- dsyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) ( f$ y" A* B5 |* i
fg1 =
W+ b5 F5 N9 ]9 w' w0 r. Qcos(y+fai)/(1+u^2)
5 ^$ j4 t" M, ?# F. t& ?
$ r5 D. h' f7 ~4 w, q) w(2)指定自变量
) m. D2 ~& H% ~, n, p5 H: e% A1 N% E7 ^( F# D4 [. C
fg2=compose(f,g,u,fai,t) F$ {4 j0 W+ a3 W( O' j# U# t
fg2 =
# p; E4 p9 [2 v; g$ G4 P. Rx/(1+cos(y+t)^2)6 i/ @6 }1 n) q
- w+ \3 R* |7 `, ~% Z9 c# ^* c1 o% G( ^ U% K
6.2.3 置换及其应用
# H$ O# r8 b% C, ?4 Z+ ~! g( m6.2.3.1 自动执行的子表达式置换指令& N4 I/ z: O" o$ R" d" \5 Y; E+ u
; b, F1 G: z* u/ i7 j【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。) Q0 X% A; F0 K: Y
clear all,syms a b c d W;[V,D]=eig([a b;c d]); ( K) X# B' u+ P# q0 M5 Y
[RVD,W]=subexpr([V;D],W) %<2>
, p F1 C. e7 P( Z4 M- c) iRVD =& s9 ^1 _6 k0 `7 ~+ z
[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]- E' J% z+ C- d+ S# m
[ 1, 1]
. c0 Q" l" ^- w7 ~- a[ 1/2*d+1/2*a+1/2*W, 0]
5 V4 M! p) R" @. M3 I2 E( k[ 0, 1/2*d+1/2*a-1/2*W]
2 C/ A% W) r; K) _W =
; ]' S s$ X5 N% _% z# a* V2 U(d^2-2*a*d+a^2+4*b*c)^(1/2)
" v' Q! v+ y0 H2 m/ i
0 Z8 g' p2 Q; T
1 I) y! B& L" @8 l& b9 C1 z; E6.2.3.2 通用置换指令
, B2 k a- q. q9 v2 u$ g" m6 @/ N) V i/ ~, h) `1 l6 {% x
【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。+ m _; D# L. c; k7 R3 B+ \
(1)产生符号函数) t, v; z3 P0 d) g6 F
syms a x;f=a*sin(x)+5;
+ s; x8 u- k' r: [! r
$ s/ i% V4 `3 N- k$ r8 N4 b( K(2)符号变量置换
- a- I8 T1 X1 ]- m$ ~f1=subs(f,'sin(x)',sym('y')) %<2> 2 P4 x$ T' j/ t+ F
: f! W8 ~' A/ q& }+ l7 l! Uf1 =
; c2 X' \0 u" E6 Qa*y+5% \8 t: j" `# J
. y# a5 g7 N$ z! r- m S0 o3 W
(3)符号常数置换6 d8 _6 ?+ ^' E3 Q' W% Y5 |
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
7 ^- j3 p. T% I0 t3 `: u) ^f2 = , ]$ s+ [' h. i( z/ y& F
3^(1/2)+52 t6 s8 p( Z; y" d" Z* f
3 o3 T0 X' F$ A8 k' J(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
/ r: B8 l( X9 @# J- Pf3=subs(f,{a,x},{2,pi/3}) %<4> & Y3 D& T* Q7 E9 N2 H
f3 =
7 U) {+ T% W' T' T6.7321
! d: a% S. a% {* F+ l$ K+ K
8 q) A! F/ ]6 ?8 b( b' s(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi ), U3 f- n+ t6 ~+ J0 {9 ]2 Q' o
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
8 G9 `, |2 T3 ~& w" _2 ]f4 =
3 e' l+ r2 o4 M5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 , b0 _, T M. G# g
% s$ a+ W. N; ~( b! F* Z* d' w
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )) ]/ ]8 I3 v i+ k% A% L! d
f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> ) s' K# |1 d( q' A( s, Q+ G
f5 = 6 j8 K0 j1 l+ x" D) l, V4 }
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000% F6 ?3 k) ?% `( i/ ]
- S% W `) q4 x& `1 x% }
/ c, _; I. ~6 w( |2 L* t3 U4 {6.2.4 符号数值精度控制和任意精度计算
Z! {5 U6 s9 Y p- r% _. ], x6 T6.2.4.2 任意精度的符号数值" b7 D& B+ |9 }# U, o+ A9 K
+ Y4 k9 Q* S1 E3 t% R7 T
【 * 例 6.2.4 .2-1 】指令使用演示。$ Z; A7 B6 b: X. W
digits % 显示省缺符号数值计算相对精度
9 N( @! C p5 N/ T$ i7 JDigits = 32 8 f" H( K3 R2 p
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值 L4 |8 C8 [! h9 ?% k; y
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值2 I+ X8 ^& K" A" E: E" Q
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
3 f4 g0 _# P8 M7 V- dp1 =
" ~, m& W) d" r" a! m/ i7286977268806824*2^(-52)
! u1 C I; B7 B% k9 g1 v3 u, O. w2 ?e01 =
5 m4 G9 Z% w% o$ \7 v" W% [.543211520368250e-16" @9 d& b' ]6 y( W& K/ I+ [
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
% G) t; V, E4 E2 B# G( {e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差- a6 y" t1 q6 C9 w3 `( q- V
p2 = 8 g1 i! }2 K6 c0 m) J1 O, I
1.6180339887498948482045868343657
) y: A9 K& [' E/ le02 =
/ _4 g% F0 Z G K0 D.61882279690820194237137864551377e-31
6 j; v. g6 D( \( I1 s4 bdigits % 验证 vpa 变精度计算不影响全局的符号数值计算精度* L9 R7 \! i8 Q- Y' q
Digits = 32 ; d' F1 S& K- {* i1 d
$ a! A5 Y8 [ _& d8 h% V$ J# `# \
- E, m% r c" V4 `6.2.5 符号对象与其它数据对象间的转换7 v0 h' Y' r- p' o) S: p6 R
9 O; N% s0 v- E6 F
$ f( j6 R4 J6 z& G! k8 ~
【 * 例 6.2.5 -1 】符号、数值间的转换。# g: j0 z. N# `& h- `+ `$ f
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
- b, a8 E: h+ i4 F. z3 ~double(phi) % 把符号常数转换为双精度存储的数值# B% L9 F" ]/ T4 }( ]) A& G3 `
phi =
; E& N. k& E: c% o/ M4 `7286977268806824*2^(-52)
F. o/ H6 j: Aans =
# i$ w' N) k7 @6 B9 }$ Y# |1.6180
6 J4 G; B7 K4 ]% _: q2 B- [ o7 j0 D2 m2 M
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
4 [7 a4 T9 l0 v$ h# J8 |syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式) }0 Y$ D( Y. e
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
7 G5 `6 D2 Z" ip2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式7 W6 Y9 s0 \' N9 r9 h) `' S1 K
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式- D( B1 U% I T/ K! a# A1 k
pretty(f,'x') % 显示符号多项式的易读表示形式4 J0 t* f/ Y7 p6 F. l
sy2p = , {% c# i1 e. [3 \3 ^9 N
1 2 -3 5; y6 X! D3 D% g+ O+ _
p2st =, w9 @3 x" k+ \- V2 S) ^
x^3 + 2 x^2 - 3 x + 5
8 ^: O5 a- \4 A/ @5 O4 f2 fp2sy =
) ?! P! X4 f; n) F6 m6 E4 C6 l$ mx^3+2*x^2-3*x+5
7 D% t% k+ V: k! L3 m9 Y' E. f3 2) r( Z2 O) ^2 o3 m6 [; `
x + 2 x - 3 x + 5
5 h3 {9 z" r& I( O) b9 Y+ p' K- t$ [! F
|