EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作
4 U4 i4 H8 x9 d. v8 L" e; i, e+ T) k6 t1 V9 g$ y. t7 g3 d
6.2 符号表达式和符号函数的操作# K' e# b3 S, l6 s | p$ n7 Q
6.2.1 符号表达式的操作
7 {2 ^5 `( B$ [, |* }; l Z4 A9 A# n
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。+ g+ F d/ k/ b6 f7 `, d
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); : a: [4 V; E( u( u7 b7 l
expr1=collect(EXPR) % 默认合并 x 同幂项系数
! ~& i r! T5 N: W' w0 R: X5 Cexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
- J- N6 [# X6 {, w, F: Mexpr1 = : H/ n4 ~" H4 d5 P' c, t- X1 y( t
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
8 v0 @2 ]+ }% k( ^' fexpr2 =& J5 ?) l! O; y! R8 V0 ~$ |8 S
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x" ]0 R6 [& T7 n0 r. J! v Z
0 f5 V8 K8 ~8 R4 [* v【 * 例 6.2.1 -2 】 factor 指令的使用" i, A" ]$ Y/ K" r5 G- [2 a/ N
(1)除 x 外不含其它自由变量的情况
; i7 q# c! p3 O n6 Wsyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
5 |1 R. [- b: t% _ans = # Z5 p+ ~( ?) B f& g( O
(x-1)*(x-2)*(x-3)*(x+1)
# B# j7 n4 q# J) s0 D4 N/ }9 F; J7 z
(2)含其它自由变量的情况之一
+ X Y% z. g* v7 t. uf2=x^2-a^2;factor(f2)
- b. T; U* _9 r/ v7 R: X2 J- f* [- Z0 C$ [
ans =
+ p- T+ O5 d3 a: |(x-a)*(x+a)
2 V( ]6 | O6 Q6 p- C- T5 r. |# R" w( A; \% e
(3)对正整数的质数分解$ Q- ]; R1 p! Z& L4 h7 ~5 T
factor(1025) 8 K& l: \1 @/ Q. A( o6 ]5 z! m
ans =
1 z' t' ~% n! d0 k5 5 41 6 z5 P5 a/ Q7 [8 j6 r
' e% N1 {3 V" o
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解. S1 ?7 ~2 ^" M L' R
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) ; j4 Z4 G$ _6 O& s8 J' |) d- l
ans = ( d( h; q7 H( D4 r$ O1 W
-6+(5+(5+(-5+x)*x)*x)*x/ O* b7 l8 ~+ m! r9 J
# ?( U+ p9 {8 ]* b& b% n【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
. H* n& t! N0 f: p8 Y(1)求矩阵各元素的分子、分母多项式
+ k7 f, @/ n/ s: |6 I" Gsyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
7 k) \5 u: F2 q- _! ][n,d]=numden(A)
$ f3 u% C1 |2 Ipretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>1 O6 S; d# Z6 n/ P& H0 v
n = 4 X0 U$ X9 e$ b. O& a" q
[ 3, x^3+5*x^2-3]$ P M, v! z, a9 ~5 n. P
[ 4, 3*x+4]( _% {; ]% D/ N6 e) v8 v/ @8 n) F( M
d =) i4 n* u. u. w" f: r2 W% r4 d3 x5 W
[ 2, (2*x-1)*(x-1)]
2 \$ E( v V# g* H t( z[ x^2, 1]
; _! A1 u# H) a' Q d8 n[ 3 2 ]
" |1 P* }" @* x% q! @[ x + 5 x - 3 ]1 t) Q0 i3 g9 l3 j3 U5 b7 t0 r0 Z
[3/2 -----------------]0 b! X" _/ L! p3 v' `
: D1 H1 K5 h" N% |3 L1 Y
8 m! ^* K& E8 M# r; U) E; w8 _) R7 e2 m5 R) d. G0 U. m
[ (2 x - 1) (x - 1)]
$ @5 }9 s# N- x% y/ G6 ?[ ]8 d* y6 y z0 `) A' E) ~
[ 4 ]
2 t9 H7 d+ C a: \) p& i' l4 ][---- 3 x + 4 ]5 b: S v8 x A' G& F& N
[ 2 ]
: [7 g9 F5 d$ Y5 @6 Y2 R[ x ] u5 n& Y1 I$ q( d7 |) f ~) C9 b
& h X& ~- Y7 j
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
# }( u3 R3 F ]8 Y* opretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”' y. R0 H6 Y# b* x# D
[ 3 2 ]
# @# ] A: q6 @: X" Q- J[ x + 5 x - 3 ]( _$ U9 R* m H7 H
[3/2 -----------------]; r" J, U) {2 p; c( n5 i! [
[ (2 x - 1) (x - 1)]: R! V( B. |7 y
[ ]
5 Y" }8 Q+ a3 b& ?[ 4 ]/ C! a! e, a& n' Y( `% ]6 o$ l* f
[---- 3 x + 4 ]
7 h. J# W7 e2 q$ f/ V7 ]9 J0 t[ 2 ], E3 G9 k& Z/ _1 A5 K2 B6 n
[ x ]
1 l; S- x0 B" K( [! N8 d) D; k( t8 w! {! x- {
- _, r/ H0 \7 Y. ^% I【 * 例 6.2.1 -5 】简化
9 f+ _5 ~6 M6 {: }! `(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)
- o: q6 e1 z1 G3 A* ~- J8 S% ~% u8 }syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); * |% M7 k3 E. f- I; Y& o
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
1 e. Y2 P% w' ~& e; N7 b& R2 i- `8 Q. E: j/ Y) W* \
sfy1=simplify(f),sfy2=simplify(sfy1)7 j5 w _; V$ q P! A
sfy1 = ( H8 o2 H6 r/ o+ h
((2*x+1)^3/x^3)^(1/3)
9 v& \& G! y9 @3 a2 Esfy2 =
( x2 i, w$ Z5 P/ M- i((2*x+1)^3/x^3)^(1/3)4 A! i& N! Z3 m% ?3 X5 K
/ \6 m4 a$ t# D2 ~9 u
(2)运用 simple 简化
- N8 J) Z) K8 V9 T" \! r- ug1=simple(f),g2=simple(g1) 2 ^& V, K/ _; \: ]% l9 B' e
g1 =
; i9 O1 g/ z0 X. I4 O. w(2*x+1)/x
( E( `5 {( B/ c% C5 j; ng2 =( R( Z, I! U0 I# S* P
2+1/x
' P+ T$ y# r& d: _$ H9 n
0 q% F& z) L1 y
6 X) n( x6 E4 H+ v3 I) s. A【 * 例 6.2.1 -6 】简化 9 p" d% @$ T1 n) y$ `8 j
syms x;ff=cos(x)+sqrt(-sin(x)^2);
3 p: P: V- m; K( w/ S. x( r* wssfy1=simplify(ff),ssfy2=simplify(ssfy1)
% C5 D, \+ y# h# o" V$ Rssfy1 =
- ~: u- V+ k3 A, s/ ^cos(x)+(-sin(x)^2)^(1/2)
: X# }" G3 g* k6 C- \3 jssfy2 =
1 K) N5 x: S" z, A$ x+ Mcos(x)+(-sin(x)^2)^(1/2)
0 D$ L# e2 h* ]" pgg1=simple(ff),gg2=simple(gg1)
6 S! J- R8 ]# i5 I9 Q+ ~gg1 = * \/ j: V" j |1 P2 ^3 d( F) ~
cos(x)+i*sin(x)8 ?' w+ b; _* P9 P
gg2 =( t2 g; Y6 r+ A
exp(i*x)( s6 o/ G0 B$ i! j: i8 |9 q. ^ `
0 Q7 b0 }/ ~$ E |- m, Q
8 P5 M# P+ ^/ e7 Q6.2.2 符号函数的求反和复合
]+ T& m; O" D6 \ 7 r* h z/ }# |5 s, {3 o
/ ? ?; U& C4 f7 `6 X9 {1 V2 o. E+ L$ e, [( m7 h- Z1 b; e" {- \
【 * 例 6.2.2 -1 】求 的反函数
* m. x2 r1 j- q$ {: l' zsyms x;f=x^2;g=finverse(f)
/ J; h# d# d" ?4 X' T% O6 s) E/ eWarning: finverse(x^2) is not unique.
8 Z8 R$ @, e, x, L! ~' g2 `/ |& E> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43, M" \3 m9 K. H8 U! [0 J
g =
6 q7 h6 r( [& S6 kx^(1/2)
* E& c# z6 I/ K7 H. d2 j. F( {2 h3 ]
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
' o$ z* A) Y; w: F Afg =
5 L! M& H* S# y, g4 I D8 Kx
' G( d2 H8 j7 i h- ]7 D3 ?+ r7 j. F) S2 {9 P. ^
【 * 例 6.2.2 -2 】求 的复合函数" z8 l/ M" o" t: Q; n
; T& B' ]6 a+ E; X(1)自变量由机器确定5 q- P* p; j. a" a3 n0 H$ u* ]
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
$ t5 j/ n% J& Q2 f; I- m+ Y; Cfg1 = , ~; L/ S2 }. [$ T0 @: Y& K
cos(y+fai)/(1+u^2)
8 l/ g' U* S( c3 X; V, \! c: E
- z! G/ ?4 N+ b$ c(2)指定自变量 X/ W. u8 }" I6 Z
2 w# C& d6 r; |7 P$ K/ efg2=compose(f,g,u,fai,t) / C5 n6 ~4 G) r$ [7 w8 p9 S/ U
fg2 =
; t0 g K" L M6 Tx/(1+cos(y+t)^2)2 ~' |) K7 L( V1 I4 [6 J$ K
' |, j+ w3 G. O0 u Z5 l3 B' e N
; |9 S8 Z2 h% k1 d- Z& O6.2.3 置换及其应用
7 Y! U" {4 q/ W2 ?7 z. X6.2.3.1 自动执行的子表达式置换指令
; K9 D- V0 k3 d- e2 v/ J/ |' ]
( K* t+ v/ }7 [9 v2 w, S【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。# |! H9 _- q. b* r8 J
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
' Z* ~2 z$ @; R7 C0 B[RVD,W]=subexpr([V;D],W) %<2>6 U [; E' u$ H
RVD =
% B: i, X5 E `/ Z7 o[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]
( k# N! w# T% }[ 1, 1]
# u9 H* p7 ]6 h( U3 `& N[ 1/2*d+1/2*a+1/2*W, 0]$ Z& x" o1 K' w7 Q% h( g
[ 0, 1/2*d+1/2*a-1/2*W]
. X1 {% h" F2 t5 |W =
& p6 W" P$ h3 ^6 ~% k(d^2-2*a*d+a^2+4*b*c)^(1/2)! W" Z, f# T0 C1 w) g/ j2 v( l
( n" f0 G! `# K- K/ o
! ]: E: X$ p7 e3 B) z6.2.3.2 通用置换指令& j) }! }0 W& M- f5 x. r
" y" N- W# [3 P6 H9 h; Z, C2 \" z4 C【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。% j, o# c8 b, z& ]1 E0 N1 f* l
(1)产生符号函数' |5 m- g o3 A3 V" r4 w _
syms a x;f=a*sin(x)+5; % Z8 N* y" E$ Z1 T W7 W4 Z
2 b! j2 K3 L1 c3 C! F- h(2)符号变量置换
9 S5 h7 E: Q9 c% Y$ @, Kf1=subs(f,'sin(x)',sym('y')) %<2>
" w4 }% }5 d' h$ Y: E! h7 C; ?* n
f1 =
) D. S; O) U. Y5 za*y+5/ Z% K4 y& U8 N. ~) v+ X- P, M
4 |/ S. A! B% V3 q) Z
(3)符号常数置换4 q! H H* d& j$ k" D+ |& l: f
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
) ?: X4 N, `5 Q6 z6 n2 H+ E5 jf2 = : Q8 n2 Z& p& G" x8 h
3^(1/2)+5" X) E' N L E( e4 A5 b3 `
7 _& G- E4 \" W0 T' e! `6 S7 L
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 ); _9 J7 V# m1 _, d
f3=subs(f,{a,x},{2,pi/3}) %<4>
% e# J- l6 k0 n. `& n/ jf3 =
' b6 I6 O- Q4 S8 z) K9 l6.7321
3 |( S5 H! i' m5 r) J$ p4 K3 g) c) Z/ L
(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi ): C$ |) H4 Z) h/ H- ~
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
, h% N. v2 e1 E: ~f4 = ' W$ b- @. O7 V6 }
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
( V" \: r! H' x* E
9 T! @3 g2 x8 w e(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
: t" q! O; t1 `; Hf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> 0 R4 _/ Q, y5 ?8 X
f5 = . I- {) `' \# o! r$ p6 q5 |
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
+ R8 g4 m: t- F" ^( x/ s2 S/ B. h) b* Y( w& L1 K5 e4 a
% ] W& F: S( L7 @% V6 L, @8 u8 J7 l N6.2.4 符号数值精度控制和任意精度计算
7 J+ ^% y5 e- J( }6.2.4.2 任意精度的符号数值
! i* w+ K( L9 N' t! s. n
# ?, s/ l: G, U8 T【 * 例 6.2.4 .2-1 】指令使用演示。
% O& }$ j9 B: Udigits % 显示省缺符号数值计算相对精度
9 d! ]8 `7 _5 I. G: U2 R6 b BDigits = 32 ' m: x: K) G+ H9 b3 n" t; H
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值; c: s, k6 I* T: G* F1 Z9 y
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
0 t* u- {% b+ \e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
' Q9 ~) e( {# _6 A( pp1 = 2 V% V4 t7 e) k. c3 q# M$ R4 `
7286977268806824*2^(-52)0 z( Q, C7 `8 W0 f
e01 =/ U0 _3 R* v$ F y) {
.543211520368250e-168 i7 @3 h# w7 w {" j
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
" z7 z- R6 k1 je02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
$ J, v: f# N! rp2 = 4 z4 n' D n5 a# A/ p
1.6180339887498948482045868343657, E) I4 D7 `* P- A7 P
e02 =
3 A c3 y- _, @( o.61882279690820194237137864551377e-31& P- k$ r5 b/ t! g
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度: ? ~3 v+ J$ F$ F+ w+ l
Digits = 32
+ V( m `8 F9 x/ u7 X/ K( N1 G4 Q. X+ l: K/ Y& b9 a5 e0 ]* Z
( q" F6 Z' `0 k& D2 T6.2.5 符号对象与其它数据对象间的转换+ b+ G* r2 f7 }0 C* e: u
. j5 S, H6 s7 K7 B v! l
8 x5 b* v+ J1 i; R. u6 E
【 * 例 6.2.5 -1 】符号、数值间的转换。, Y6 H/ ?8 m9 v* D, t
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数& j) F' R) r: q
double(phi) % 把符号常数转换为双精度存储的数值0 @. e( i4 \3 U' p M, I
phi = / j' U' \- I: W" O7 i f! k$ O7 o% o
7286977268806824*2^(-52); i4 W1 N C0 x) G: j
ans =6 S) E4 i& @. b1 @" N/ U
1.61809 b$ @8 O, A6 V; ?# m' T- b3 A
5 t" \5 j$ K( ?' c: H
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换2 _( \# S. D( z! P) n6 P7 L* L
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
# ~8 H8 T6 I0 m: v( Msy2p=sym2poly(f) % 由符号多项式产生数值系数行向量% o T. N( @8 T3 l6 c% A
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式. s" u, K3 X$ Y$ i
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式7 ]* ^( l6 f' Z* E& M/ u
pretty(f,'x') % 显示符号多项式的易读表示形式( t$ q a# n* z1 M* }) n) @
sy2p = J. u8 V5 L8 Q: K
1 2 -3 5
6 \3 ~ t* P: Q8 f) q% wp2st =" X8 c6 L5 z& x9 V# o* a8 e
x^3 + 2 x^2 - 3 x + 56 e6 h' Y( N% U4 D
p2sy =
7 z( Z2 ~. m1 f8 u1 F, \x^3+2*x^2-3*x+5
, G+ C5 v7 T# B' O# E2 @2 S B3 2
4 s+ l! ~# f+ r! y# M& Bx + 2 x - 3 x + 5 9 K: X, D, H" R4 O
7 U6 N3 N9 E2 j# C! M |