EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作2 g2 R# n: v8 g1 I
" m# k0 y4 M6 Q+ L8 u/ g H6.2 符号表达式和符号函数的操作
* P# N, g2 H7 I& U6.2.1 符号表达式的操作
2 P( ]3 a! D7 l0 {9 g) P# X8 g
* u0 y9 c4 s; @: |【 * 例 6.2.1 -1 】按不同的方式合并同幂项。2 L% L+ s! w; `) T9 F, Y7 S+ {
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
5 o) L- U4 ]8 Z( \; M2 ~) a2 Mexpr1=collect(EXPR) % 默认合并 x 同幂项系数
* |" N/ D# \, {& t# e* Hexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
) S- S1 x4 J/ ]+ r; r+ `expr1 = 6 y+ n) m& ~$ W
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
* e0 C4 {, a+ R5 m L8 m jexpr2 =; }$ |1 x1 N" k+ o/ A4 N- H, r6 h) `
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x0 b \% ]8 c3 G# k6 m# V5 s
# g0 a# S* ~7 C$ j$ |
【 * 例 6.2.1 -2 】 factor 指令的使用
0 ~5 h: x" a8 V, g/ Q(1)除 x 外不含其它自由变量的情况
% Z# @, @4 @4 Xsyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) ; [7 z8 M* S9 L3 g$ x. K
ans = 5 m* e2 P8 ^3 Z/ Y) H- Y! ?# F
(x-1)*(x-2)*(x-3)*(x+1)
2 d: j' ^, V' Y) ^ L+ I* G/ O2 L* Y6 [9 @, [
(2)含其它自由变量的情况之一
8 J. h1 v8 V+ b% [/ O* Pf2=x^2-a^2;factor(f2) + C/ ?6 U0 M+ j* i& ~8 s
) s6 C1 L: O5 Y, ?& y
ans =
3 I) x' X% x$ ^. `+ W% s(x-a)*(x+a)9 S$ t: {1 D% |5 J+ W; q5 t+ E
4 d# t) W5 I9 L9 D* B% A# T(3)对正整数的质数分解
4 q: |. I) b0 sfactor(1025) ; R w% R1 r% D2 \' H
ans =
; b+ F: E" Y- n0 S0 D5 5 41
( B7 w! v0 c' ]
2 R% R+ G! {5 u9 I D' q【 * 例 6.2.1 -3 】对多项式进行嵌套型分解' j. O: v/ u% @% Z- {+ g
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
2 q6 U/ B9 }8 f* V" m+ U yans =
% B; \9 c- b* S I$ x% }) U9 |-6+(5+(5+(-5+x)*x)*x)*x
$ y1 {5 N3 a- y
+ d( T& [9 c* x' N【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
- z, Z/ e K; D* p: m# I7 ^9 a(1)求矩阵各元素的分子、分母多项式" z( q2 t* d8 _8 X
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; - F7 V5 V* O) I1 n
[n,d]=numden(A)
! U# \% G4 r# ?7 t7 I) Dpretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
8 M9 n+ P! y. p) B2 t0 t; nn = % R! _5 t3 u6 L
[ 3, x^3+5*x^2-3]4 W7 `+ T/ ?2 R& x% F2 c1 x
[ 4, 3*x+4]
7 ^* h: |! I' _# ^9 Q' B, Ad =
! k* \: J1 O9 _) [[ 2, (2*x-1)*(x-1)]3 {8 P# z5 l9 a1 F& O
[ x^2, 1]2 [+ @( i. J% c
[ 3 2 ]" P% H/ l( A: q/ L
[ x + 5 x - 3 ]: D1 w) c- ~! a+ m: o& Y9 x$ z
[3/2 -----------------]3 P7 b5 B0 m/ Y' G- g5 i6 m5 X
5 l5 `' y9 S9 j& \* T4 P
1 J0 ]% e5 H5 v& K1 q9 q, z) s
! Q2 @1 x: w& t
[ (2 x - 1) (x - 1)]
/ y; j3 A8 O X[ ]
& R/ _% q: N3 s* m9 V. u[ 4 ]0 S5 G S0 I2 V8 m5 G
[---- 3 x + 4 ]5 Z# }6 l$ m; t2 o9 A3 T+ z
[ 2 ]
" a8 M2 e/ w, W# U+ k$ r[ x ]
# R- U1 P$ d) `" D7 `! o/ N6 N' b# m0 \7 J
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
3 L# _) n: B1 Y* a+ \8 Qpretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
& a7 }3 q3 i" \" b x% T/ C' r0 i) s[ 3 2 ]3 m$ s; ]( O; p( ]
[ x + 5 x - 3 ]8 U( L. y( o& a5 n4 h4 g8 ~, K8 X) {# E( ?6 J
[3/2 -----------------]) [ y8 L, C1 w/ Z5 U9 G0 A5 T
[ (2 x - 1) (x - 1)]3 G* z# D! ^0 ?# z
[ ]# P. p: `. U' O- D' F# Q. \- g
[ 4 ]
; g& }% l" |- Z. F3 y, e! C[---- 3 x + 4 ]+ ^2 s5 w; \* ]; }; X2 j8 M1 _
[ 2 ]# `, C4 s" c5 @# j" W
[ x ]
) K B$ f' C7 s- S$ y5 s' L4 [ {# F* y, a) K
' Q' Y7 H5 L- O; U9 g* g3 k4 `- [【 * 例 6.2.1 -5 】简化 7 y2 b2 ]3 D# p; u# o O, M
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)" [3 {4 H5 z2 v8 B3 r4 O- Y' O7 s
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
; z4 l- q1 z8 A- W! S计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网 7 m0 ~; l8 s a" C L2 u V
2 E7 L2 ^! l- l$ K/ a4 {$ Z0 M% O! v gsfy1=simplify(f),sfy2=simplify(sfy1)$ u. E4 U+ Q( X( @3 @+ M. i3 [/ f
sfy1 = 0 W7 }. N! ~8 M' _
((2*x+1)^3/x^3)^(1/3)4 [4 q& P; t, a( C) U+ X
sfy2 =
: X' u9 U& R' c0 q' U((2*x+1)^3/x^3)^(1/3)" I6 }2 E4 J2 c) T6 f3 z+ B5 @
7 H$ }% `) ?& F2 _! g+ I$ F(2)运用 simple 简化
( m$ ?) Z4 W2 e! Z3 D* `6 h2 I9 Kg1=simple(f),g2=simple(g1) 3 g: i/ W. @. r# l8 x
g1 =
' O) a" _7 j9 A/ J2 {" `+ |% u(2*x+1)/x+ C$ {" I8 \1 {8 @7 m
g2 =9 W; k6 e9 l' \2 f" k
2+1/x
1 ^* r& g: _" `2 e8 X O7 [4 p. N/ _6 P" |9 d+ X# G5 Y
# H, _. b- Q8 d8 n4 B8 c
【 * 例 6.2.1 -6 】简化 / @0 l: c' [& ?: [/ Y
syms x;ff=cos(x)+sqrt(-sin(x)^2); 3 [ e/ ]/ U9 v9 V4 H, Q
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)/ L/ ^- y) F0 K
ssfy1 = 6 h( e4 A( x+ L2 h& ?6 ~) v* P
cos(x)+(-sin(x)^2)^(1/2)2 z" B) B8 T& x) k
ssfy2 =% b0 W5 k) t! `. F
cos(x)+(-sin(x)^2)^(1/2)+ J' x6 l7 b$ v6 }7 w; u& O
gg1=simple(ff),gg2=simple(gg1)
w, m7 d9 w+ A! g! `8 F" ngg1 = ( J b* u+ ^- G. \1 q8 q, F
cos(x)+i*sin(x)5 p, w& U3 \% X- l1 A9 E( B. P
gg2 =
* I( N2 h1 V, d) gexp(i*x)# s, f% j4 h, ^8 }1 d6 s
" Y2 E9 M3 Y; K9 J! S$ m
# F t7 X! e9 C6 e: h
6.2.2 符号函数的求反和复合 2 P8 E! h5 M$ e! b* `! M
+ u! f1 T2 _: |# [! G ^: D% L* ]# f4 M: H1 d& O' b2 j
7 o1 Z0 h. T. |1 \& ~1 l, z【 * 例 6.2.2 -1 】求 的反函数
+ j( \( ?. m" R9 ]5 Ysyms x;f=x^2;g=finverse(f)
/ z; e' |% v! ~3 v- M3 W5 N jWarning: finverse(x^2) is not unique. $ W: s4 q& x: P& ?* U
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
4 N" }3 S; C& O7 _ x' _9 G" \! Gg =1 C+ S) R4 O, {. {* c
x^(1/2) * b: S, S. O3 g+ {* f, g( B" i
0 L9 _" d) H$ x, k, r
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x) M% \7 H2 Y- J& m0 l$ ^
fg = , @+ _% l9 K7 C, _) m; }1 d' h, c
x " F& M" y8 o: d3 k! d. _/ @ V
9 Z5 d( g6 Q3 i7 [% y' J, p【 * 例 6.2.2 -2 】求 的复合函数
4 T/ M4 {' P6 B1 O; i2 k6 w: \- a" A& s4 w- j
(1)自变量由机器确定
6 {3 V# d3 k- ]! R2 ~9 Msyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) $ f4 s a* v1 s0 ^
fg1 = $ H- ?' W3 ? a* ^8 b
cos(y+fai)/(1+u^2)
) R! R& q0 c/ I- k$ D5 p9 ~" h1 D4 b, B6 a( v$ F4 [
(2)指定自变量
8 a0 E0 [0 b. y: {' H7 @, [8 `# x9 o3 k% x: B3 n7 u
fg2=compose(f,g,u,fai,t)
9 m8 C" l/ o8 q: q( [. Ofg2 =
4 v; {/ x$ Q( j$ }5 j/ R& j* p! t- Ex/(1+cos(y+t)^2)
( w1 ~3 e, {+ H/ m' \4 c1 \+ j. g; @4 D/ e) C5 J
. f- \" ]) M1 r4 ~
6.2.3 置换及其应用
( I5 f* { z: v( \( a6.2.3.1 自动执行的子表达式置换指令+ H) [4 b( _. p2 D. R, q
- G) g) T6 }' S6 x1 H" L* @3 U
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
" @& f* R' l# Nclear all,syms a b c d W;[V,D]=eig([a b;c d]); ; {0 C6 w! K4 \
[RVD,W]=subexpr([V;D],W) %<2>% f6 R2 ?7 x' t, |7 \. h0 ]
RVD =
$ H" G- _/ H$ B" z$ b8 Q[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]% w+ x* R. j* R
[ 1, 1]0 J7 b' w6 D* l9 i" T
[ 1/2*d+1/2*a+1/2*W, 0]- T: d, w: K0 e1 p6 y6 m4 y9 `7 ^
[ 0, 1/2*d+1/2*a-1/2*W]
% K9 J3 M% I! @, KW =
5 Y+ n1 ?1 ~( j) h _7 b(d^2-2*a*d+a^2+4*b*c)^(1/2)
; m# N* l, \( J! g, ], m" e J. W( r$ ?1 s
1 b9 ~+ u) [8 u- Y0 R; t; f! `
6.2.3.2 通用置换指令
" u2 g+ |* r4 t, G2 j
/ P+ w& |; Z0 N" V) {) }8 g7 G2 m【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。$ e1 h( k8 g+ l
(1)产生符号函数( e; ]+ j/ h9 G# V7 }! l
syms a x;f=a*sin(x)+5;
+ f- b$ I0 I/ k* _8 e% q3 b9 W1 \* `1 G0 B# n% e. f M; B# F
(2)符号变量置换3 A, X; \8 ^1 Q# a) ]
f1=subs(f,'sin(x)',sym('y')) %<2>
8 @5 [( j9 D8 T0 R( `' q. v
2 u4 G- c( v( Rf1 =
# K$ x+ d5 f6 Ya*y+5; A5 Q4 f) N6 U1 b/ h' O/ t
7 C( ^2 _# f6 }, ]
(3)符号常数置换: \& w2 C( g5 E1 J
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
( [ r( p. ~. ff2 = % R5 g/ s* S4 C3 b4 H" J
3^(1/2)+5
" n5 t6 M: O( j' L e$ R! V+ c; `6 H* j- X6 V- D0 _. d6 n
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 ), A7 k3 M2 I( n. o ? `1 e) I4 E5 t" k
f3=subs(f,{a,x},{2,pi/3}) %<4> 6 q6 _9 c0 z" n W5 o
f3 =
( i& n5 b9 a. n6.7321 % a9 p, Y; j$ F
3 {) p6 U: h3 o' e7 A# t, z: Z(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi ). n2 u' _# O' i2 a4 i" Q: P% ]
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> 0 t7 ~% m S2 w" k3 R
f4 = ( n1 s6 g4 i/ X% C
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 1 f: I9 Z8 h; ` ?7 Q! G$ B) g
, ^; K& J- R8 Q. q4 u(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
* [, K( w4 h4 I; Tf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> ( o$ v3 o" ^1 [( |/ b% Q5 C
f5 =
* V# q. h: F: C3 {3 C5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.00007 R: S( s: K* Z. a
8 V+ D0 e% n% |! S4 c0 G/ I6 }& H
1 T! r5 r2 z. @8 S' h6.2.4 符号数值精度控制和任意精度计算7 h( J" l1 K- Z O* k0 C1 g
6.2.4.2 任意精度的符号数值1 Y( v) Q" m6 W6 i0 Q- l$ f
* g% I' Y* N9 G/ V/ u! [【 * 例 6.2.4 .2-1 】指令使用演示。
* p7 O" W! M5 w4 i# Xdigits % 显示省缺符号数值计算相对精度
3 _7 n8 _: L/ ]Digits = 32 7 e1 @2 P" ^% m% M1 A7 V: Q% ] y
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值# Q6 N! g( B1 I" ?+ j" n1 \* O5 [
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
9 j) j. K' t2 X' b; N! n3 n% Se01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差% k& S+ Q4 }0 n7 s4 }7 n7 h
p1 = 0 O, H- M8 U% c; J8 n) \. ~# {: c
7286977268806824*2^(-52)5 ], p( x5 \& {% I8 J
e01 =! W& ^1 |' ^6 L+ c$ W) M$ k$ k
.543211520368250e-16 Y# q& R0 @3 H( Z
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
: s5 |* h* B# _2 y- ?! g Ge02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差) a4 Q0 b! r6 Z9 W# e0 X, [5 z" ~
p2 = 7 [ ~( Y$ D# w8 R
1.6180339887498948482045868343657
6 z2 Y% y' v4 M" Z7 V+ ^/ a! A m `e02 =
( x7 ~- L$ }; j) R- S& E4 z% s4 x) b.61882279690820194237137864551377e-31
% _( f9 N! j: E; @- m( adigits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
% c! m% K9 M. _Digits = 32 ~ T- C8 h$ l# m$ u1 A
6 S. a4 w) R; p9 h5 }
6 u& e4 h; m4 {% ?/ ?6.2.5 符号对象与其它数据对象间的转换
. e0 k1 v6 M5 G+ P- J5 U2 a
N( N) P! M# V$ k
6 p8 E* p. ^4 K: @4 T3 B【 * 例 6.2.5 -1 】符号、数值间的转换。
* n' p! [# N# K% C# {3 }phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数2 D/ d/ f1 C/ v/ _7 n
double(phi) % 把符号常数转换为双精度存储的数值, {2 O; b+ \+ T: l& f
phi = 5 q4 B# o: l2 J5 C/ J
7286977268806824*2^(-52)
2 ?+ r) B6 C& Uans =
, i. w6 R4 p4 E$ P0 N1.61807 }' W8 H7 T5 u; g6 f) |& ~7 K( T3 O
' [9 ]; h% a% x, D【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
9 i2 h$ ~; F q1 B) @syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式/ q6 ~6 S Q8 {5 X
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
/ o, ]( X3 G* J# r* I3 p" s1 tp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式. [8 C" d* | e8 H
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式; u& t7 s! K2 g# a3 Q# ^
pretty(f,'x') % 显示符号多项式的易读表示形式
0 W9 l3 p% a% Y8 ?# `8 Nsy2p = ; ^" |3 P" s3 p, @0 c; u% r
1 2 -3 56 e6 u6 e2 x; f) ~
p2st =
' k5 F- e# F: R5 j+ h% Vx^3 + 2 x^2 - 3 x + 5
3 I" s0 N8 t- s5 h% E* z7 I3 np2sy =
8 O, g G& ~& ~" M! f8 C; W: o/ z" nx^3+2*x^2-3*x+5. ?+ b+ v" Q0 M( Q4 V
3 2
) l; J! H1 f" j) Nx + 2 x - 3 x + 5 ! P8 R4 }; Z- f- V8 j9 d9 d% p* Q, Z( R
: {7 p; G2 s5 }( X7 m* ~ |