EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作4 `/ t. V6 E( l4 U+ U0 {
y6 o& m+ T- e: o2 m" p6.2 符号表达式和符号函数的操作
( X, H9 H+ \- O5 C& ]) Q6.2.1 符号表达式的操作) J# F# F* N2 R& U z6 I
9 f Z# J0 H# G- \$ u' ]+ ?【 * 例 6.2.1 -1 】按不同的方式合并同幂项。5 O @6 O; j( y# _' G+ W
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
5 ?6 n' j" ]/ iexpr1=collect(EXPR) % 默认合并 x 同幂项系数. z' p0 p; u4 y+ g! D( A
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数2 S5 F( r4 b9 F4 L
expr1 = ( H3 O' `6 @ `* q M
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
. u. D" t- o" ^7 q! {# q: K; H. W+ |expr2 =9 O4 Q3 R/ s/ t: g1 \9 B6 ?& G
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x% b$ v8 [& s' z
) T7 @5 S0 O; z
【 * 例 6.2.1 -2 】 factor 指令的使用
9 r% D- i8 G4 y" ~(1)除 x 外不含其它自由变量的情况& J8 s" j$ @8 h0 J! l* |! t) N. h
syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) + r" x! _8 T* e
ans =
* q F+ M. E; x2 h% |! ~0 M(x-1)*(x-2)*(x-3)*(x+1)
4 B9 p z0 u6 X- I
' o0 P: f# _) m& _; h ?(2)含其它自由变量的情况之一3 r. P; G8 M- k
f2=x^2-a^2;factor(f2)
: l1 h8 b5 _8 ^8 _- f& s# b9 {. c k4 Q4 m8 S6 b, T
ans = 7 i4 L4 ?" b2 p8 H: @
(x-a)*(x+a)
; {9 c4 P: L) i9 Q; V7 j& Z: Q
9 @* u. J; ]0 v7 ]1 c(3)对正整数的质数分解
/ Q2 O3 s: \& d* Pfactor(1025) 8 ?3 l- s$ ~9 G1 n1 `
ans =
7 Z$ f% R' q9 B* r, T5 5 41
. a: {: Q' ~! Q$ n4 R2 a* i
4 L2 V1 b7 Y( J【 * 例 6.2.1 -3 】对多项式进行嵌套型分解
8 e# m3 j" q$ _7 }( Dclear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) 7 T% e4 S! g- v
ans =
9 t% a: z' m' v2 Y! N. {; q-6+(5+(5+(-5+x)*x)*x)*x
' u& S& d( N- x( m. ]0 ]" K1 Z+ t6 t: Z5 \* w5 i
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
: l3 P7 P) V0 L$ W/ M( V# p7 J; ](1)求矩阵各元素的分子、分母多项式
8 u& e3 Q$ b4 |7 G8 lsyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
/ C( P# R N* B9 J8 p) d5 I[n,d]=numden(A)
& C- Z* m3 @" E4 ppretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>; x$ x. w4 p! m f2 ~
n =
; Q4 i9 G9 |) @+ U& A! X[ 3, x^3+5*x^2-3]) w1 y* l6 v1 F- i" {* \
[ 4, 3*x+4]( J1 Y9 q( L* X7 N1 O' J9 H# d
d =! N0 Y0 Y4 \8 c. N: `
[ 2, (2*x-1)*(x-1)]
5 r: `- \. o m) w0 ]4 r[ x^2, 1]0 L3 N& R4 A9 ]: R) Z
[ 3 2 ]/ x4 O: v! w7 D
[ x + 5 x - 3 ]1 m; O% E2 Q; _* i+ ~2 q
[3/2 -----------------]
1 {" A. k5 [* y6 l9 w" S8 z- }2 C$ t) M
/ Q9 E! h5 `5 M [1 c
% h+ [7 u/ K% a
[ (2 x - 1) (x - 1)]
. L/ | W5 K M! o0 x[ ]
0 \9 G6 N% V, C3 i[ 4 ]
" e" g% ?: t; r" q[---- 3 x + 4 ]0 A; G- |$ N+ U; y2 P# [) b
[ 2 ]/ I' R9 [& L% j9 ~' @! e) c
[ x ]
! T5 K: n* p6 e
$ u& J8 ^4 Y% u+ F# S1 V(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
7 i$ R' p1 N: |2 X, \, C6 H& Jpretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”0 o. @9 h1 `. J3 F. [: p* {
[ 3 2 ]6 Y: G0 A: h$ D$ t
[ x + 5 x - 3 ]. d( ~. c3 {- M8 c4 ~( B
[3/2 -----------------]
+ ^: {/ @ B: n. [* J[ (2 x - 1) (x - 1)]
3 k& f, e" ]0 b' s2 c[ ]0 _5 F" a7 \- k( @/ t" j0 ^
[ 4 ]
( q% C J5 Y. b8 R' @+ e, s, ~" @; E[---- 3 x + 4 ]
4 j( B+ {# z. R' ]- E5 n[ 2 ] p* V8 _6 [: t
[ x ]. [$ M$ ]9 u. T* m5 P
7 K( C" Y6 J2 \; P8 p7 J
+ u$ ]* Y8 x$ P0 k- K【 * 例 6.2.1 -5 】简化
4 h [0 R( X [) F/ t! P(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)% U: _8 p( S; M* H
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); $ |! ^" Y8 S3 v1 _' l D
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
1 ?1 G3 L+ c4 B, g+ D; ?% N% i" j% Y7 s9 t8 W1 C- W. @" i
sfy1=simplify(f),sfy2=simplify(sfy1)
3 H, e) T) ^ _# g2 F/ L, e8 q; s! ksfy1 = % @8 V& G* [# i% M: r6 y* E4 U# X/ u$ @" ~
((2*x+1)^3/x^3)^(1/3)
0 z i' O+ }3 }8 Rsfy2 =
4 s; p. H8 ?4 \4 q8 M# R) v$ X5 ^/ R((2*x+1)^3/x^3)^(1/3)
. P1 t3 I( }2 c7 f& x3 T
% D" J* V. }1 k" L1 x1 E4 ` L' J(2)运用 simple 简化' A. j. ~6 i6 Q8 O' P
g1=simple(f),g2=simple(g1) : y6 P' W, p o8 M% D5 o* F! g
g1 = % l8 K0 d* v- Z# { j
(2*x+1)/x
% v) Q; ~* v* `: f6 Fg2 =; ]( k6 A! g$ }
2+1/x
/ d; V! G' A# m& [$ d
; G1 ]+ K" N% r1 i+ O( I0 i6 N$ J. c2 r
【 * 例 6.2.1 -6 】简化
* v' P# g% ` I2 h$ D; s7 jsyms x;ff=cos(x)+sqrt(-sin(x)^2); p6 ]) V1 I; T
ssfy1=simplify(ff),ssfy2=simplify(ssfy1): }- C9 F2 F9 W: m
ssfy1 =
0 x) a" h' D8 g# Icos(x)+(-sin(x)^2)^(1/2)' _, e H% H0 O3 A+ ~" | q
ssfy2 =
! U2 S/ }! B( v* M0 pcos(x)+(-sin(x)^2)^(1/2)/ Y, s$ r+ H- Y1 P, z0 j1 F8 B
gg1=simple(ff),gg2=simple(gg1) : ^& V% S8 D3 b1 Y1 [, g
gg1 =
( E; s) `( W8 e, zcos(x)+i*sin(x)6 H$ q; \4 Z$ r3 s h. W5 Y% ~
gg2 =1 l9 U5 e3 c0 G
exp(i*x)
' b: V$ k: ~1 l' h m
) ^ T! ^1 g0 s9 f
: s3 w2 F3 m8 C2 A v7 N6.2.2 符号函数的求反和复合 # T9 i3 a+ k0 g; D' B* C( E, \
2 r2 Q' y9 A9 s2 r5 d N& b
/ h3 d, o+ S4 Q% ?* K% }3 ]0 [* e, M
; o) `* o+ s# z0 o/ G7 }2 D【 * 例 6.2.2 -1 】求 的反函数
5 X0 c1 Q G* }" c J7 Hsyms x;f=x^2;g=finverse(f)
6 z' ]7 s Y) E9 K* I7 }. OWarning: finverse(x^2) is not unique. 6 \/ c8 y4 F/ V0 p+ Z
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
: k8 }! v% q* y7 T& ag =
2 K4 a8 S$ G7 b7 K9 w9 S0 Ax^(1/2) 9 Q/ M. H1 r3 s& c8 j" D: A
% `7 w- K) n1 E4 K8 b0 Tfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
$ E, C, m# F: q, {" y0 ?4 m+ `, Ffg = , B+ |: O! x! G. L2 x" u" h) a
x 8 w4 s; B% T- I6 f- [4 }
" w' N8 v7 h7 L3 f X. m- }$ Y【 * 例 6.2.2 -2 】求 的复合函数
& p7 F1 z! Y2 [# R \5 t$ G: V3 ]$ g2 L
(1)自变量由机器确定- G1 P3 w$ X8 G0 w
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
2 M' W; I+ r# D$ H. K1 Wfg1 =
4 [& M$ h: t" Pcos(y+fai)/(1+u^2)
7 l$ m- {. o. W4 X& w9 }$ M c4 t. w$ g0 x* y4 t2 q
(2)指定自变量/ w2 p+ f) A& @$ M) u
1 S* L7 F+ U' r& n& ffg2=compose(f,g,u,fai,t) 2 x+ Y+ o" y5 G2 G1 {
fg2 =
/ v5 ^& p, l' P* Ox/(1+cos(y+t)^2)7 g4 E, m, [! y! _1 _, ?
* v8 C- u0 t0 S; j; V4 A
9 Y1 t2 F2 ^5 \ g( f8 w( A
6.2.3 置换及其应用
: `" i7 I" g6 k0 m6.2.3.1 自动执行的子表达式置换指令
8 I; M# r7 y- z# t. F) w O& O# M
* t* w7 K! @6 X$ e: m7 F; M【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。! i7 E5 L3 z6 O% ^8 [
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
! N( h9 y/ y3 {7 _7 J- Y[RVD,W]=subexpr([V;D],W) %<2>
0 t; ?+ P8 P' z& {6 ^RVD =
1 J; m, V3 k4 K5 i/ i9 U[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]- B' \+ q5 e; f- U8 x3 d7 r
[ 1, 1]& M9 c' G& C+ H; j# `9 V: T
[ 1/2*d+1/2*a+1/2*W, 0]
" x1 c( O5 t! n$ c[ 0, 1/2*d+1/2*a-1/2*W]
: l% ^2 g# l9 D' P1 ^W =6 c% g, G. M1 q. {
(d^2-2*a*d+a^2+4*b*c)^(1/2)2 k/ J4 {! }; I) T- s2 C
1 U* u3 @( k+ A" L1 T0 F9 `$ g+ S8 _
' H |* f) y8 V F6.2.3.2 通用置换指令2 J, P4 ?5 H' D) m y
O. o- C: L9 C/ ^1 v r( K【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。* M+ r7 d, m B \, h
(1)产生符号函数
( J" [; q6 a. D- x+ isyms a x;f=a*sin(x)+5; % Q4 P8 L, R; K# ~0 h P
! f$ v c" y1 @& E(2)符号变量置换
0 u, `. n% l7 F( S' ~9 vf1=subs(f,'sin(x)',sym('y')) %<2>
3 O: W9 A2 h/ R$ G( a; \+ }6 R( ^3 K) |1 H n2 Q9 p5 j
f1 =
9 g) G O& c9 R0 [/ ca*y+5+ p$ o1 w( s: Z8 s
3 j* k& ?0 Y; Y4 \# W8 J' t(3)符号常数置换+ q1 J# v" i9 I& @) o; A& v5 v
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3> % W. s# l( V6 {
f2 =
3 Z3 K6 z1 C3 C C2 r u3^(1/2)+54 C7 F/ W: E/ W1 d
4 Y# G) k& S b4 l(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )8 m7 A$ q' Q, J; _$ M; }
f3=subs(f,{a,x},{2,pi/3}) %<4> 0 w9 L: j; @, _( B3 T, C1 z% Y
f3 = ' P$ Y9 _" y5 S' r' t
6.7321 2 J4 `( d; r3 h# v( Y! {* R
6 D2 b4 `( X& P4 o1 i0 C(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )
# P2 ]) r, E* p3 ?/ b, R6 yf4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
4 h* S. Y4 g- Cf4 =
5 b: b8 ^. ^3 X; T5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
, U3 u2 q0 ]/ t% V* s6 k9 d/ ]" S$ E& u9 x
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )3 j0 m# Q& x, H* L
f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> . e9 p& h8 V) M' j5 N& k) I6 ]- K
f5 = % H7 v; Y% r B$ v( L9 I
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
; r8 R, N* s: T& F, a) R) n* G% f* T7 T
T! m! ^- R d' d
6.2.4 符号数值精度控制和任意精度计算
7 J( I& K8 g7 K; p$ ^" F6.2.4.2 任意精度的符号数值* {( A) u" F' B/ j# Z$ C
. f/ T; i8 e5 A0 }1 S( c K) {' A
【 * 例 6.2.4 .2-1 】指令使用演示。/ Z: v7 p3 v5 D" s3 H5 G. F
digits % 显示省缺符号数值计算相对精度
; x" B6 c" e" }( ]3 LDigits = 32 5 L/ o" U( P5 T5 a
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值" p4 w, \: T: |4 L! n
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值( @6 Q' L8 S$ i
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差7 v: m* U2 ?) t7 M8 r
p1 = 0 F+ X2 i; t) V
7286977268806824*2^(-52)( O2 K# ?9 G" d% P
e01 =
2 g: W) P C) A1 Z3 f& L# B, U.543211520368250e-16
: K( @% p3 {( {& ^p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似# q( P5 D5 V4 D c* Q; r
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
6 x" Q" D7 I V0 V" z- Z# qp2 = d* M! `7 }4 c0 Q* o4 j" d9 ~
1.6180339887498948482045868343657" \* W) D0 [: F- j: w# ^
e02 =
8 r' H% F" S( P* i.61882279690820194237137864551377e-31' I, n+ E5 ]& K2 Y8 D" n# t
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
3 V5 Q9 C+ ~3 H q: HDigits = 32
6 H ?) O; y0 n4 h8 E1 R. G. a% e
1 @4 y* w( p5 l' O Q
$ y# t' S+ M1 \6.2.5 符号对象与其它数据对象间的转换4 F0 L* n+ y; I9 p7 k8 T
( A6 ~" T7 K K5 w. N# r R9 O2 z
; |. Z9 _* T# V- F- ]【 * 例 6.2.5 -1 】符号、数值间的转换。
) Z" U' Q. Z- Y% K- K; rphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数$ A1 ]- Q0 R, H. a5 m. ^5 S
double(phi) % 把符号常数转换为双精度存储的数值. Z5 x- m5 X+ ~
phi =
6 l9 O( L& F) l$ M% H! S: D! j/ }2 {7286977268806824*2^(-52)
( l& x+ d$ o) {& z2 H0 A5 yans =
3 l$ P( i. i% s$ t" C0 ?/ Z7 n1.6180
3 W6 i( y' Y& `( U( f0 p1 L# d N2 j* M' g1 P6 s/ ]2 W) m$ G
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换( N; o' Y* [. B3 K4 ^( s/ R" y- s
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
4 L% N2 ?: D1 msy2p=sym2poly(f) % 由符号多项式产生数值系数行向量: X5 o+ u* z p/ j
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式3 U4 p: R _; m9 I. u
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式; ]& p+ V4 n+ k9 g7 K3 e
pretty(f,'x') % 显示符号多项式的易读表示形式* A; ^. n/ E! y3 z8 b+ X
sy2p =
6 H0 J5 g, |9 N6 H! y1 2 -3 5 J4 {- ]/ A1 ?6 y% L5 A: x0 {
p2st =6 M) J) c& B* I4 t8 N d$ M9 |
x^3 + 2 x^2 - 3 x + 5 Q- E- _& W4 i7 n' a
p2sy =
% { |/ m3 j5 `) Mx^3+2*x^2-3*x+5
' d- W+ K' K" k9 t6 }( X7 P3 2" w/ ?. k8 \: V
x + 2 x - 3 x + 5
2 i; D8 y- W4 f5 ~: y* a
% E* t2 G' d3 D( P4 C |