EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作% p4 h% z; a0 b1 I% U$ D9 u6 C x
' v0 ]$ U. B7 m) e y* ]6.2 符号表达式和符号函数的操作, L1 `; \+ c9 Z/ a: ?, B C/ E) B
6.2.1 符号表达式的操作0 P. {: @) J# ]: Z+ x$ C
: {) i1 |0 w: Q3 F【 * 例 6.2.1 -1 】按不同的方式合并同幂项。+ L& P$ @+ d& ]
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
' ~" K' q! } x& jexpr1=collect(EXPR) % 默认合并 x 同幂项系数
! f+ x) b& M+ m zexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
5 K0 p0 @# N' i3 V mexpr1 =
7 S/ U- ^% S0 H! z# ^x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
& ]; x, I X4 ~8 d; K4 P; fexpr2 =
3 f3 S0 i5 {: V$ t9 Ux*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x2 i6 n c+ r. i) j3 B; ]1 |
: m" {+ H, ~# [3 V8 P; A/ J4 D
【 * 例 6.2.1 -2 】 factor 指令的使用
, B; s* w9 B2 Q: z! z$ B/ r(1)除 x 外不含其它自由变量的情况
% \# F$ t; K, U* F7 isyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
0 p% [+ A" J* S, cans = , R: Z1 _$ ]0 ^- v7 }4 r6 U" G
(x-1)*(x-2)*(x-3)*(x+1)
: Y0 b: M. j: }
7 [- ]0 Z- u, [. n# Q' x(2)含其它自由变量的情况之一) b; m/ J( ^& [) }$ a
f2=x^2-a^2;factor(f2)
5 S& T5 d, P* `. N
+ w0 A2 a2 m S9 n& S5 Z5 N8 u3 Xans =
0 S: w; F" l2 D" T+ M6 {$ T: t, h% J(x-a)*(x+a)
' R9 ^5 `" F# g1 B( m( i5 y/ a" s" |0 D- n7 j1 }
(3)对正整数的质数分解# @: Q: K& P$ ~
factor(1025)
% H# F$ d3 J. I# wans =
9 U1 M3 C: u; e$ h" n5 5 41
6 S- z, |7 Z% t0 `+ a4 _5 M, e) D o8 l/ \% J0 I3 h
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解: G3 m- ^: H8 h
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
, U7 y; @( s/ r% b$ vans = ; j+ U7 V) }+ N8 h. W2 N
-6+(5+(5+(-5+x)*x)*x)*x
7 t8 E/ G5 y5 z# _2 i) A$ Y8 N" \( u2 M6 k( f
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式7 h( D5 O$ z9 I8 x+ \1 r
(1)求矩阵各元素的分子、分母多项式" w' a D. L, h
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; 8 a# ]6 ]7 |' ?& N! J$ h
[n,d]=numden(A)
5 a9 W% w7 e1 T) hpretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
/ [7 C% t4 Q) B! e) Zn =
( G; _- I- {2 {8 L% T5 s[ 3, x^3+5*x^2-3]& E0 V* \" s ~* v7 b2 o$ |
[ 4, 3*x+4]
( I/ k# j1 R1 O, dd =
# t( l }9 k; t' L9 D/ v[ 2, (2*x-1)*(x-1)] R8 b+ S' V" _8 }% ~
[ x^2, 1]
+ ~' @- ^" b0 N4 S4 o[ 3 2 ], o w+ o+ P& e+ j; Q
[ x + 5 x - 3 ]2 F7 p, @9 o) O0 q& M, {) a
[3/2 -----------------]
9 w8 M; U: @" a; I! D5 ^6 L( e& P6 [# {
9 \9 A/ F0 o) M/ b# O+ o
6 ?2 i# N& i$ ]- p( u[ (2 x - 1) (x - 1)]
. N' s3 O5 O0 M[ ]
2 h7 K+ C: d5 b% T% U; S) m4 T[ 4 ]! N* K0 P( [' g; a2 X5 u
[---- 3 x + 4 ]
. K# u( O( [& ?6 v4 m[ 2 ]
3 n' S5 K; Y" w! _) P/ W[ x ]5 k% L3 C* b- `6 l7 u3 y
8 E6 R' a" |. R
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。+ f' I* B Q2 a6 e5 v6 d# @ h
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”) a+ k! p* \" Y2 Y
[ 3 2 ]
/ |0 s6 c0 H& E' o7 n% }" o[ x + 5 x - 3 ]% F4 f$ D- t; g: ?% \& |$ ~' O8 Y
[3/2 -----------------]
6 H, \ P; y* F1 ~, w[ (2 x - 1) (x - 1)]
8 Z S/ y, U4 f* @7 o# q[ ]/ X1 L0 D1 s8 D6 d1 N
[ 4 ]
, m _. p' Z! O/ P1 n+ \[---- 3 x + 4 ]* H& M$ u3 m$ S8 Y
[ 2 ]
/ f, P0 m, L. y' U! o[ x ]
9 w( B: a# D" p* g$ \ z3 V% A& u
8 \6 v6 T; K3 Z _0 z- L* C' k! V' A; I1 Z4 d8 Z' x
【 * 例 6.2.1 -5 】简化 . s0 j( T0 q- q; B1 U# h
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)& j* C. a* e+ Q: {# v
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 5 M1 s) d5 J1 d' B
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
# u3 T1 _$ h' ^( v/ a6 y+ f+ B9 H0 h" w% ~4 ^: Q( B" p) ^
sfy1=simplify(f),sfy2=simplify(sfy1)
( `: H* ~' }8 I# L2 |: W' @sfy1 = ' u" ]9 E( U0 x2 L* a
((2*x+1)^3/x^3)^(1/3)
( ~3 K0 n0 B5 G6 W2 Asfy2 =7 x& ?2 v& Q7 }4 [
((2*x+1)^3/x^3)^(1/3)
" }- r' P, l' d/ f, H' ?& J! ~9 Q, O2 b$ X- e3 w
(2)运用 simple 简化
3 K+ W+ N, ], l, ]g1=simple(f),g2=simple(g1) 0 Z0 G2 c5 ~3 G9 N, c0 O$ I
g1 =
: C/ m, [8 m) |( q1 i& f(2*x+1)/x2 C) A- T) S% i' X
g2 =
) a; D2 ]4 J& j2+1/x
# r% C/ }1 c( ^/ h
]4 p- K+ M6 w) K$ w! m" y+ U$ f
【 * 例 6.2.1 -6 】简化 " ?) d+ A( ~# t
syms x;ff=cos(x)+sqrt(-sin(x)^2);
: q5 c2 ?% H% O! f& hssfy1=simplify(ff),ssfy2=simplify(ssfy1)9 N1 x# O- b8 z' l
ssfy1 = + p: g+ I% J- P/ ]* k: c3 Q) }' M: w, {/ D
cos(x)+(-sin(x)^2)^(1/2)
* s5 y1 V# q0 O$ u' ]ssfy2 =
* g" V$ D# Z' c. Xcos(x)+(-sin(x)^2)^(1/2)4 W/ O4 X4 X+ {. s8 z) S
gg1=simple(ff),gg2=simple(gg1)
& K" K; p" p7 Wgg1 =
" X9 G4 g9 D& }8 i& c. ^cos(x)+i*sin(x)) J+ g! t Y' P) H: p, }
gg2 =
: E. B* Z i1 w3 y: x2 \, e6 kexp(i*x)& ~9 ^( z% {2 m# l2 z% k. m7 m- H3 B
7 H; G: @ C0 Z
$ P7 @ p! @# T; A6.2.2 符号函数的求反和复合 ( t9 l5 E' D( N- I
1 ~0 k, ] h$ Z8 h5 g+ D1 |% ?' i7 s) G
% @1 s5 q# u* l
【 * 例 6.2.2 -1 】求 的反函数" }* F6 c( C9 ~0 v9 w7 }" @- {
syms x;f=x^2;g=finverse(f) 8 T- W1 V6 M: J3 ~2 h
Warning: finverse(x^2) is not unique. & s- S5 ]+ v- @/ ^, \* r9 i$ W
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
+ _4 h4 H0 P3 ~5 T+ L1 Rg =$ X0 G. O" E1 ~
x^(1/2) % g T1 f/ H; L! z# n, B/ a9 B
4 E8 H/ @1 v* _. a0 ?6 J2 K
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
+ O v) m& Y2 N Qfg = 6 M0 ?- t/ _% W
x 2 }0 F5 E8 f5 a9 ^
# \3 ^( B% E' T2 j3 h2 M, p. `
【 * 例 6.2.2 -2 】求 的复合函数8 O6 \6 o, G1 ~
. N/ y6 X& \% {+ m5 t(1)自变量由机器确定4 B, g4 A2 m7 d: [ ^
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
9 N ~, s$ Q) q1 e# E& `# L; vfg1 = & b. o" a8 n7 S
cos(y+fai)/(1+u^2)5 w: k; F- W5 F8 O; O9 f7 T
: _/ X7 b( }) `5 |(2)指定自变量 c5 H- m( _ v. }3 M
2 T5 ?& m$ a u2 ]! n' Y. Gfg2=compose(f,g,u,fai,t) 1 u! a( D% S" ?" e6 L" D' M
fg2 =( }9 u7 k# o; ?. e9 j6 `0 e
x/(1+cos(y+t)^2)9 P* l1 s/ F* ~4 `. U& Z+ T
7 O5 A/ q! n# l8 i
, b- \3 B5 p6 q9 s/ v" o1 ]6.2.3 置换及其应用& I6 J; R/ Q( G
6.2.3.1 自动执行的子表达式置换指令
; [2 v. p, C8 O8 g# N# x4 [( i
+ c0 }4 \) [- V" _- j【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
+ `: K3 _, E6 e/ w$ xclear all,syms a b c d W;[V,D]=eig([a b;c d]); 2 {/ T; e" A" E9 F4 V5 }5 U
[RVD,W]=subexpr([V;D],W) %<2>
) G4 }" V, X! |3 K/ Q+ b+ CRVD =8 x) B2 m2 q R% S& y& h
[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]
- l4 K& m' F/ X1 F% k[ 1, 1]
* y R3 @2 A4 @6 m+ U% d3 p[ 1/2*d+1/2*a+1/2*W, 0]
9 R& K% V( v1 Q1 U* Z[ 0, 1/2*d+1/2*a-1/2*W]
% \$ R$ ?$ b4 J8 x7 o# D: ?W =
8 C- I, M8 w# ~) l- {( A5 T: C, [7 k3 X(d^2-2*a*d+a^2+4*b*c)^(1/2)* ?7 w- ?+ t6 `4 m
* T% L% M4 W6 i! d) J; i( f
. S0 S, W. y/ q1 X6.2.3.2 通用置换指令
3 h, ~. L( O6 Q. l6 y) L: J4 L$ E
( A& }9 ]% F: V2 |( ]【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
# C% a. @0 j6 r: B; V( K(1)产生符号函数* Q5 I/ {7 s n: I3 r/ m1 I; X
syms a x;f=a*sin(x)+5; " i4 g9 s3 m0 M
; w+ Z: h% _) j
(2)符号变量置换
2 K' e, Q7 q t/ u0 ~0 pf1=subs(f,'sin(x)',sym('y')) %<2>
; ] x6 y! N, F# V5 \; E* a
0 B9 ]* S- }5 D9 S1 s! K0 _f1 = # B* @# d6 O8 A1 q+ O G' w# I4 E
a*y+55 R$ K; A% ^1 V' o
7 \' H% T0 @. d" l
(3)符号常数置换
; Q' u! P: H8 X7 N, vf2=subs(f,{a,x},{2,sym(pi/3)}) %<3> ) Q5 C C1 b* Y& @
f2 =
. `: X% |0 N p: `" ~1 f3^(1/2)+5
) Z! `7 c& A5 V- i, c. Q" |& q( `# ^" G) M2 y7 A* m1 K8 {# l
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 ): n, |1 U4 Q5 C2 y. ? x4 u
f3=subs(f,{a,x},{2,pi/3}) %<4> 4 q/ m' _( A( v' ]
f3 = $ x8 _; M2 O/ s" t/ H
6.7321
( `1 g3 e; F5 b& v* [0 W& b
& f7 Y' j" r7 J1 N(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )4 m5 N. l6 |" A$ {: _
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> 8 S' L' P R, H. {
f4 = ' x# l8 C1 q M7 O' H* l0 o6 K8 `
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
6 M/ B* O2 x9 x$ `3 a. }$ P, K2 Y+ R4 m! ~% @9 {( P9 h7 r
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
, m' R0 `: Y' a2 `f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> 0 t# B# v' I' S/ G( Z" u" i% z1 q
f5 =
% I4 x& s+ M2 x3 F7 s5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
* l* V6 U6 \6 G3 b9 n
( R7 N+ c( a' c q$ p+ A* _4 Q$ |, ^: }
6.2.4 符号数值精度控制和任意精度计算
0 [' d, Y/ X# y7 o* d* l6.2.4.2 任意精度的符号数值/ w E' X% d3 t* T7 l" N
% i z6 l5 Q( o3 t' Z* V/ M【 * 例 6.2.4 .2-1 】指令使用演示。
; m S$ @4 B9 W4 P& e7 K: Pdigits % 显示省缺符号数值计算相对精度
1 J1 J/ R: T- X' uDigits = 32 / H& X# L# o j! U' B3 s. u9 {" K) u/ N
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值/ O1 p* @6 [. n& r
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
4 Q9 T" _2 e5 ^/ [# Ye01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
1 _& e) k2 c. C* m* Z5 l1 Lp1 =
' v9 ?0 j; B n" I3 {8 P+ o2 \; Z) e7286977268806824*2^(-52)
9 F) T4 {# Y- { t% ]7 a' N7 _7 \e01 =
+ J( O0 j" L" s5 W0 I.543211520368250e-16/ |- H4 H7 N q0 n7 R+ o7 W
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似! {8 K4 h5 ~2 f
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
) X0 o3 l& k6 {2 Up2 =
- F7 @' B* E& G# ]! k# j0 a& c% s1.6180339887498948482045868343657
/ g4 z2 H& I3 i a* @; R( z4 ~. h. [e02 =3 k8 C, B* M& a* I# l7 ^
.61882279690820194237137864551377e-31
* ?. w% G0 @% X; C! n+ T9 Edigits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
) Y3 i( E% Y% u$ r8 V( `# MDigits = 32 # A( r1 H/ F* l
- ^* B. O) k s8 H0 h- e/ w P) b! ?8 L* v W" h, l5 {
6.2.5 符号对象与其它数据对象间的转换: {( `3 h6 S0 ?1 I- u
' b' K! A% b. G3 X: e
$ N& x( i& I8 @' U2 F
【 * 例 6.2.5 -1 】符号、数值间的转换。: p" d y3 \, N8 A8 |
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
. _0 ^6 G C$ S2 e1 d$ ]double(phi) % 把符号常数转换为双精度存储的数值6 {. I0 g/ o s3 z7 Q
phi =
' u# @* B2 e2 r5 {) H4 ?/ f8 u7286977268806824*2^(-52)
8 }; z0 f" x9 L. Q7 p8 f& Kans =! j6 D0 f/ }. t& N0 `# |2 J8 i
1.6180% j/ _7 R* B: ~! q% M* N
- e, p" }$ g3 u/ N: D! ~. b【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换! ?1 ^1 Z4 @* S5 `& q
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
9 j) `4 H. ]3 qsy2p=sym2poly(f) % 由符号多项式产生数值系数行向量8 |6 d) l1 z4 I2 ^8 U. y6 P" b
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式
5 ?: g+ k. j; S8 Ap2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式+ ~+ {8 d- W/ q( E$ E
pretty(f,'x') % 显示符号多项式的易读表示形式
8 q* e% f' [7 q8 \sy2p =
2 r$ P" [* d* H$ w: h% }1 2 -3 5- S3 m( l; _; c( y2 }
p2st =- Z9 D6 e' [9 B. a& W8 T
x^3 + 2 x^2 - 3 x + 5) B; M& A6 ?* D# X8 g: e( e
p2sy =$ Z0 I+ A3 c# l/ h* x. ]
x^3+2*x^2-3*x+5
$ M+ T& O8 Q W7 ^2 Y) X/ y3 2/ R/ C9 R( G1 y! S% t. z
x + 2 x - 3 x + 5
( v0 p; I1 @5 i& D L3 S f' k9 Z O) ~/ z0 o8 m
|