EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作* E3 @) G b. d+ x, _" L
; y7 E0 c4 J9 A E6.2 符号表达式和符号函数的操作
3 W. [( S& C9 \# X5 I7 ?6.2.1 符号表达式的操作& j0 {8 E" `) ?& R
* l2 f' ~: Q- k
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。) C4 h; H3 \+ z: j E: j
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); ! Y5 G/ h/ W% z7 [
expr1=collect(EXPR) % 默认合并 x 同幂项系数) U, d: S; }# B3 c6 m5 _/ w
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数: U4 K4 x* h/ Q! {1 A6 Y. w9 Y
expr1 =
3 G2 b- X1 F9 C* \, fx^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t); v6 p4 r% H( a1 V
expr2 =0 t9 }: Z6 V- V9 U+ B
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x# s; W" _8 H+ F' Q8 K
+ V1 O( [, w" M【 * 例 6.2.1 -2 】 factor 指令的使用
' W, u3 ^$ a6 Y( ~(1)除 x 外不含其它自由变量的情况
# g1 i- @4 A& usyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
" }+ _9 J( e1 d* }' \9 i& rans = 2 C8 L2 } l$ I7 c- l4 i4 }! g
(x-1)*(x-2)*(x-3)*(x+1)
/ a" c- Z0 {- w1 b h" Z; R U; L9 X' u- I. }9 w
(2)含其它自由变量的情况之一
, D, I- s: r, I* |f2=x^2-a^2;factor(f2)
5 f4 p i) n! u9 ?4 {$ P. P( F9 ]# E
ans =
1 t1 u+ C7 Z7 z' x) h$ q- ]1 U(x-a)*(x+a)/ i1 p5 \0 _' O" V
/ H, }: C$ p1 v" b
(3)对正整数的质数分解
( Z. D; B- i0 Q+ |7 D' ^# c W( wfactor(1025) 4 g g& d1 g7 b. K
ans = , I2 }$ Z0 `4 k! k3 `' \
5 5 41
1 Y0 ?' u4 Q" K9 `
& R% A8 K" [: c: q: @) m: |【 * 例 6.2.1 -3 】对多项式进行嵌套型分解' r: {7 v& l0 j; ]! ^* n
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) C% P" o) H( n: \& q" e/ z5 \
ans = - Y" j4 f# V4 C; E9 T4 H+ y
-6+(5+(5+(-5+x)*x)*x)*x0 Q) @' G0 C$ J2 v( {. ]4 F( j( [5 F0 V
) }* P3 e: o1 @. U0 s
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
% G& c" @, r3 j, a" \(1)求矩阵各元素的分子、分母多项式
& |1 [5 S D! t# f* p) J$ usyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; ) e/ W5 B$ G5 A- o1 ]7 C
[n,d]=numden(A)
; ]9 X. O( U* v' l6 p, {6 w9 |pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
3 K# C$ L3 j% ~( Cn = 3 L& A# I1 W2 X7 x% v
[ 3, x^3+5*x^2-3]
8 d) C8 a% j1 W[ 4, 3*x+4]
2 N2 W% J4 x) Xd =
( E( C/ M1 A% Y4 ?/ @[ 2, (2*x-1)*(x-1)]
0 N H6 J1 B! Z* F9 I; ?2 g* H! r[ x^2, 1]8 t! R% N! h* W
[ 3 2 ]
1 M v! c/ I" G' r& A! w+ X5 j/ e a$ j[ x + 5 x - 3 ]
5 Q3 W5 a- `- n. C! K[3/2 -----------------]
4 V/ L2 F$ ]& q6 g4 c: i1 o3 Z! x
/ ?8 o: G% o4 s6 _7 V
! c3 R: T# k4 w4 P$ J
[ (2 x - 1) (x - 1)]0 E. k$ j+ f9 I! o
[ ]5 C: ?# n' v" C v* e# `) }( c G& D
[ 4 ]
7 l# ~" |- w I8 v; z) @* o9 m[---- 3 x + 4 ]
; j% w/ @2 I% ~+ \) B4 ~[ 2 ]
2 I6 U! {2 W4 l5 y$ U3 t$ B# ~[ x ]
. ?1 [6 {: b; ? P& `; q
0 n# ]) F; C- o5 B) G3 [1 g(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。' F5 e) r( t) G& _
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
# G, @. P0 F& A, Q8 b9 q& p7 v$ C[ 3 2 ]$ J; b' a5 M) q5 [6 S) ?; G
[ x + 5 x - 3 ]& T% u6 ^2 ?' I7 y
[3/2 -----------------]
8 c8 a0 n |. O9 w[ (2 x - 1) (x - 1)], t3 h: V' v% k! Y& B; c! m8 X
[ ]
0 I2 ]* E% n3 G! l4 Y m" e[ 4 ]
9 H/ r$ x, ~! ~; l% ]. b& ~[---- 3 x + 4 ]- o6 ~. }* S) X3 _$ H1 [
[ 2 ]9 S5 ` s, G# n3 K: |8 z
[ x ]2 ]# m% y- K' j
4 q1 ]8 v' @, c, ]* M" r1 `
/ d! v7 _: R9 ^: h% M( }3 t. H* {$ j【 * 例 6.2.1 -5 】简化
9 v( p1 ]( B+ b(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)( j5 C: @% h5 s; X
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
$ p% K. T% v5 B6 R" c$ T6 V* |# q; }计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
0 W" u8 q( h8 e7 P# y! O- u
: c+ d$ |. k/ ~sfy1=simplify(f),sfy2=simplify(sfy1)' }( H f7 f! R+ T. V
sfy1 = " x' F6 L6 C7 H0 j: @2 |$ v
((2*x+1)^3/x^3)^(1/3). b/ Z3 q/ ^+ g7 l% b
sfy2 =0 P( |# W% P/ w% Z4 J4 ]/ q
((2*x+1)^3/x^3)^(1/3)
" N! ?+ Q" b) |+ i
5 a& ^1 N8 f& K+ y! M(2)运用 simple 简化' c% D# Y3 m+ O5 ?+ y4 c& o- T
g1=simple(f),g2=simple(g1) 8 J/ ?% ?- _6 C& X9 N4 p" [
g1 = 8 O7 u' [8 `1 @: M% ?+ W
(2*x+1)/x% Z2 A2 }( h# c
g2 =
9 V4 t! g( s0 b3 B! Q2+1/x; l$ d1 Q# g0 e( K4 ~$ X
4 `3 K# s' V0 S
5 `2 k9 `3 H( c+ i( `. Q2 t x
【 * 例 6.2.1 -6 】简化 3 X2 P9 ]2 D/ E: o
syms x;ff=cos(x)+sqrt(-sin(x)^2); * n3 f9 H8 q) q, {4 Y; E
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
. k0 O3 Z8 h, @# F$ Y0 Ussfy1 =
! r9 U$ W$ E) J2 V- Z) Zcos(x)+(-sin(x)^2)^(1/2)+ ~: Z* }" M/ i7 H+ r
ssfy2 =
/ w8 k, D. n$ U/ H3 k; Bcos(x)+(-sin(x)^2)^(1/2)
5 }0 R6 ]2 I$ Z. l% c- Kgg1=simple(ff),gg2=simple(gg1)
0 [1 v$ F) Y) G6 a6 W- Ugg1 =
1 T' v5 F7 \5 E) E" O# ~6 qcos(x)+i*sin(x)
9 L( L6 B, B; \ \gg2 =2 L. L. r+ r. W
exp(i*x)% n8 F( |6 i, n. d" ^8 N8 L
% `: P C7 F5 {8 W
9 o! Y9 j1 U/ \7 I$ U8 U+ g6.2.2 符号函数的求反和复合
( W& N+ O2 y! x) Z* n* T 1 Y( o- Z2 C0 Y8 ?. {
3 A( o. [2 o& _ M# D
) t+ T% Y( z" H# g% P【 * 例 6.2.2 -1 】求 的反函数1 g- o1 e6 B1 o; O l4 v# Q
syms x;f=x^2;g=finverse(f) : g( O. W+ Q& w7 D
Warning: finverse(x^2) is not unique.
1 _ C4 E% C" Q% ^, J> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43! q3 K, J- Y) N, n0 y" f
g =6 l2 h* t' D) X8 y) O4 k- V
x^(1/2)
, M9 C' q; G. _! z5 _
; ^6 P! A2 ^ n# { Lfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
. N$ d/ z$ Z8 M4 xfg = 0 I5 ]# y1 n6 K5 z% @8 v
x 5 q ^. N$ y# r- Y* X
. _: V3 i+ d3 B [8 b# K+ Y4 |; M【 * 例 6.2.2 -2 】求 的复合函数
+ W5 t3 [( l; D! M$ B6 Q; R8 J: A* v1 c4 T
(1)自变量由机器确定+ O. ]: R' t& o; C/ R! g
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) * N0 ]% {" W V1 ~: F) S$ ?. T
fg1 = 4 L& y. _ S9 V9 Q4 m1 P& ^
cos(y+fai)/(1+u^2)
/ n0 S- h% Y, h7 {4 O; J9 E% ]6 T$ J P1 z- Q% x, j& `/ s5 Y. o
(2)指定自变量
1 U& ]) _* T1 i' t
! f- @* O1 w2 t4 N. G% n1 Nfg2=compose(f,g,u,fai,t)
- A7 p, E, R- ufg2 =
; h. p8 B- l/ Y- Px/(1+cos(y+t)^2)
2 A: b& H" ~7 U- i/ u! n
& c: o) h4 l( Q: |' O& ^
- d1 h+ u! `( e v: O% g, R6.2.3 置换及其应用4 u6 _1 t" e* O% `6 w8 X
6.2.3.1 自动执行的子表达式置换指令/ i+ v% t C4 B3 q( ^! T
1 m7 Z0 V8 e% Y2 Z" @1 o【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。9 L2 _" ?2 |4 F
clear all,syms a b c d W;[V,D]=eig([a b;c d]); 0 w( E2 s/ v' p6 N9 Z% V+ t
[RVD,W]=subexpr([V;D],W) %<2>3 }9 f; Z0 n, y
RVD =
$ t- T" _9 H* }. Z1 I7 b' N[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c], W5 y6 }' Q+ u# r, B; ~) w- ?# Y
[ 1, 1]- w0 d6 v4 O `; l# d
[ 1/2*d+1/2*a+1/2*W, 0]
. j4 W2 P& h9 p; u( v# _% @[ 0, 1/2*d+1/2*a-1/2*W]
& o. o8 ]% x- O0 ^/ U9 E$ N1 w1 jW =
& m' m3 q. Q+ c! }- @ }: L(d^2-2*a*d+a^2+4*b*c)^(1/2): Q+ c) U' |$ \# m [! i$ t7 ~" y
" C& M, q5 J7 x) Y$ o" N* D4 k3 M
H- } w/ [1 o$ r" B6.2.3.2 通用置换指令
7 E% }5 P3 W1 }6 v: ]! C# Z2 X5 g2 z$ E0 m$ v2 t+ y% _2 e
【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
3 y8 X, K1 I2 T4 b- n% a ]0 [(1)产生符号函数
3 U2 r) [7 g2 Z" m4 b2 J6 L* `syms a x;f=a*sin(x)+5;
% A2 B$ A; C$ V* `' r7 ?+ \
; g; K5 U, Z% Y( S(2)符号变量置换4 d' j3 F; g8 w; O9 [
f1=subs(f,'sin(x)',sym('y')) %<2>
, j# Z0 c8 h- D
0 v6 w9 `8 L _f1 =
) o; S: K* W# p5 f4 ?3 ~a*y+59 y9 V; s$ O) U+ s3 n% s
# ~& r0 D! q* F9 f, B
(3)符号常数置换
4 s! M# q! u/ I+ t: Qf2=subs(f,{a,x},{2,sym(pi/3)}) %<3> % |$ ~ R2 l# Z6 M7 F8 P
f2 =
) m. J7 y# n3 L9 k3^(1/2)+5' J1 R. [0 F5 ^2 M
& b: L! l3 x/ Y1 q3 I(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
! z& n; ~+ [' P3 d+ e) ?$ A" wf3=subs(f,{a,x},{2,pi/3}) %<4> ! L) H- o1 J( x7 O" O
f3 = & [. ^3 Q7 c. a; s7 \7 j5 V
6.7321
7 T' s7 u3 {8 |+ A
$ C# p/ u: T) `1 }3 a) A$ F(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )* s" X' A' R" a0 @, A3 c
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
, H+ i6 f, s$ Y$ P) A) Lf4 = 2 m7 {) G: s7 h6 E/ A. `
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 , I* O/ R3 g& V- O D1 d
5 b3 a3 \# B9 p9 R" T4 Y
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
' T" L$ K" U& Q4 C3 \2 m$ p9 n0 zf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> 3 G" j' }( E7 j1 P" @: T4 r" p
f5 =
9 {* a8 u/ E8 L+ @# d y5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000: t4 P( b# C9 {
# }) \% m. \6 s( V7 I3 D- q4 |# p
2 I! h2 n9 f. a5 z6.2.4 符号数值精度控制和任意精度计算- g* b- L$ p! `0 E; D0 K
6.2.4.2 任意精度的符号数值
K2 Y0 C! f5 Y' ] N# ^1 C# s: m) L2 R
【 * 例 6.2.4 .2-1 】指令使用演示。
/ m5 B. z$ \8 d* z1 Cdigits % 显示省缺符号数值计算相对精度
2 Z& B; \$ H2 i9 T. I9 ^9 ZDigits = 32 & m9 Y( c' R1 [' X( W+ r! i
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值/ ]! M. J0 S; _4 q6 h
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
" w$ g8 u( B' H6 d: De01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
. t9 a8 c# @$ v8 k5 l% g, @4 zp1 = 7 R% |7 G3 f$ ?. w* K
7286977268806824*2^(-52)
8 s$ {' w4 D- x0 K4 ?3 C @e01 =
% |% f+ o/ @+ D' ]8 f# {.543211520368250e-16
- ]/ e: v( g# Q% Ip2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
: n) ?7 r2 ~8 I% z: A) B4 Ce02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差. e1 x! k; l. W7 q" N4 \
p2 = 3 n. ?4 D8 a5 j
1.6180339887498948482045868343657
/ r6 S6 T: H% |0 |( B0 z# O8 te02 =
6 d4 ?% y) K; n N5 Q `& ]3 c.61882279690820194237137864551377e-31
1 ^7 D3 a h: _' ` k$ G# [# Xdigits % 验证 vpa 变精度计算不影响全局的符号数值计算精度7 t! h( c& w% j+ P& U
Digits = 32
' s' G. v0 `2 e3 S' z5 E0 d
: R! D. t$ e& r" k& c1 Y
1 x: g f% \) @4 q6.2.5 符号对象与其它数据对象间的转换
7 q3 h' X, a8 T4 t# m* S* M- Y( F4 R4 l0 w0 o A9 s
9 D% x/ K9 Q% t3 N
【 * 例 6.2.5 -1 】符号、数值间的转换。
5 p$ w1 S7 s8 l u3 `7 r5 Aphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数1 H" h$ x$ }+ p6 v
double(phi) % 把符号常数转换为双精度存储的数值
! K8 v* x; V9 Q. \9 k" {5 c- aphi =
' w* Y9 Y/ _) J% v- q8 X* V7286977268806824*2^(-52)/ Y3 W7 z6 I9 `. v5 y9 y
ans =# W9 P3 T# G% E
1.6180
, {8 x- W: R$ ~$ B; B; Z; W8 a6 c! K* ?( J( s4 Q; Q3 S, \- E
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换( h6 D6 g4 i d8 y! d7 k
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
9 O: P- ?/ ~" z+ zsy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
0 u( @6 r# S9 Kp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式$ Q: z# K- f7 y3 _6 B& @. ^/ X" i$ z
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式- K: V. g% g ^( H E
pretty(f,'x') % 显示符号多项式的易读表示形式8 I- E0 \, D- O/ Y0 ?7 ]0 K
sy2p =
2 _' u/ o/ _4 H& s, C! {1 2 -3 5
7 o! P/ f) A. ~p2st =$ H3 C0 N0 s* X* y
x^3 + 2 x^2 - 3 x + 5* f8 A+ s8 ]; T+ {/ F7 s. g
p2sy =& { E- a, H9 P$ Z) W, G" O# n6 e, C
x^3+2*x^2-3*x+5: I0 _. T# N! O
3 2
" g' a0 \1 h' g7 {6 q F& X: Tx + 2 x - 3 x + 5
: O5 D. s8 @: A7 {' R
- B& l1 n* [% {# Y1 P8 O* L$ [ |