EDA365电子论坛网

标题: Matlab 符号表达式和符号函数的操作 [打印本页]

作者: relchhiclty    时间: 2019-1-7 06:00
标题: Matlab 符号表达式和符号函数的操作
Matlab 符号表达式和符号函数的操作
1 y# W7 M3 H( y

% M7 M7 g4 T$ }6.2 符号表达式和符号函数的操作0 E9 O2 P1 r5 J. N+ G  H7 M+ L
6.2.1 符号表达式的操作) i0 d) U. L- `
2 B" e# n3 Y0 S! w8 Z
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
7 M) Z. v% Y+ R  \- e/ xEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
- S; |& a) @& o" ^$ ~! P5 O( r/ Uexpr1=collect(EXPR) % 默认合并 x 同幂项系数
  y1 T3 t) k3 [/ K+ b# K. yexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数( Z# \; P+ I* b0 b& j: e
expr1 = " ]% S; p. z% R
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
$ w) W' t) {1 d  w% p7 j5 I; P. }/ ]* Uexpr2 =
2 I# G0 g0 q# u4 f, t8 Yx*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x4 v8 U: x* }/ T

, w; U8 ?5 {! i3 {, U2 \/ p【 * 例 6.2.1 -2 】 factor 指令的使用
% t( n* j3 K( U8 P(1)除 x 外不含其它自由变量的情况
1 O) O$ [  X; M2 _5 u% J+ i% P1 \syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
; k7 F0 ^1 t0 r& Y* p# R. dans =
" `4 u& ~, \( }" `0 ]5 V+ N: d(x-1)*(x-2)*(x-3)*(x+1)" {( P0 N5 R* J
/ f! t2 l* j$ |8 Y: {
(2)含其它自由变量的情况之一
" ^2 U" l; C. l7 X# N% Jf2=x^2-a^2;factor(f2)
) V" J8 n8 n/ D/ y- h3 g
8 q) b9 C+ v5 B" o: \: xans = + P4 A3 A" H; p, Q4 h' V
(x-a)*(x+a)
0 ~) L- {+ U& o, f2 s$ j! J( ?5 a" x6 e1 c0 n* |# i+ R+ y
(3)对正整数的质数分解1 w$ ^, M- J/ n) b* K
factor(1025) + ]' [) h" x& t1 {3 @
ans =
7 }# B. C8 Q; r7 K9 B* Q+ J& M; g5 5 41
2 c- g( }$ E% S5 D: d8 [% F4 T) P* S% W9 V6 N- A) f6 M
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解. g. g8 a* L5 R5 B; X; `, O  A2 h
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
4 `; s& f. X+ k" F4 b9 E- {ans =
# K7 q! s$ B, G# z8 _) t' q' H-6+(5+(5+(-5+x)*x)*x)*x6 \- w( h+ x- s, e

! c3 v3 X+ U# M" y【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
1 `/ x! C, e2 C- X4 k6 j* e(1)求矩阵各元素的分子、分母多项式
$ r7 a1 L# O- ]syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; " n. q  y3 Z. b" V1 \! ]% D* o7 T# r
[n,d]=numden(A)) p# H9 F9 v! m/ D4 ]& d& M
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
0 u! r5 Z1 V9 ]& _6 on =
8 {' ?0 Q/ i1 j" \% ?, u1 l0 n[ 3, x^3+5*x^2-3]5 _0 h9 F$ q& a
[ 4, 3*x+4]. r8 s9 j6 F& t! i- `! J
d =7 y9 W2 U: `  m" X6 D- T/ K' r" s
[ 2, (2*x-1)*(x-1)]
  M5 X" r6 p. m' Y# Y: q[ x^2, 1]
1 B4 T6 T- L+ a3 y0 [% o[ 3 2 ]7 _' m+ u1 Q2 h. C' ?( c$ c9 v
[ x + 5 x - 3 ]" c1 T$ Y/ Y, N" r8 }
[3/2 -----------------]& |! f( z9 Y+ P9 Z/ f

/ j2 i3 l  \! d  b, s; }# K( G7 E+ R4 w. g0 [8 v! g

6 Q, M" K! Y  z
[ (2 x - 1) (x - 1)]
2 l) ^% Q2 c0 D2 t; R( F2 m: s. L[ ]) S, f, ^( D' T4 K
[ 4 ]" b  o( {/ s/ W+ G& u  J- h
[---- 3 x + 4 ]5 j/ l* [% e9 c/ s8 |  |
[ 2 ]
$ `+ ?0 v/ w; L) v[ x ]+ M6 b1 m1 K* d7 C' B9 o% I% t$ U
  s- z" C6 ~8 S/ W
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。2 f! `  d6 X1 S; d
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
4 j/ R% D% O% N3 |) [+ s5 V7 h[ 3 2 ]
! U( x4 J5 W" D7 X& y[ x + 5 x - 3 ]; m! E2 x  b6 d& T$ w5 b/ i' ~; z
[3/2 -----------------]" k% M, [/ x( _; ?
[ (2 x - 1) (x - 1)]6 F6 U$ c8 P1 k
[ ]
# p7 {2 B$ X: G! `% A[ 4 ]6 K. V+ s6 t2 Y/ F9 x
[---- 3 x + 4 ]
/ u+ d9 U' {8 c" |1 E: Y[ 2 ]% H: y+ I3 X2 @) k- N
[ x ]
  s' Q. x! S* g! J- t
8 E+ i7 x$ W+ o5 _+ i, B
8 \% u" {( E' |3 @【 * 例 6.2.1 -5 】简化 4 V( A9 U7 c3 e' u- x
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)! D  o- A- k# n% M* j& s3 [. n) M- y
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); - c* e) f0 \0 h2 |, Z. j
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
3 u& v* q4 V" s
- `7 o  ]0 t8 u' ~4 X# U- \, _, qsfy1=simplify(f),sfy2=simplify(sfy1)
4 v0 N' t+ I: v; @3 wsfy1 = % k- L& Z' M  F; {
((2*x+1)^3/x^3)^(1/3)' }$ C; I/ t" O" f
sfy2 =
5 N7 a9 S5 a$ ?((2*x+1)^3/x^3)^(1/3)
# ]& r( N6 J& B8 v/ U8 P$ W
1 D1 p9 b  K, @1 s! G3 P(2)运用 simple 简化7 {! n3 _7 [  A9 g. A( ^- F
g1=simple(f),g2=simple(g1) 2 _: l9 J, L9 Q9 m( P% o; j* I* X
g1 = ! G. v* m/ Y; ~% s: g; W/ ~4 B; h, H
(2*x+1)/x$ `8 D- E8 ?/ n  {% k( ]; R3 x5 T6 g
g2 =
2 N9 z/ h) g2 @' X; Z2 \3 ]# l* Q$ w9 d2+1/x
. v) G' E+ p/ |/ m  |- N% y9 t& L5 G' J( n$ ~% |
8 O7 r. N( `+ u8 i7 e; X
【 * 例 6.2.1 -6 】简化
* R5 I6 n! E; {3 H. t# }0 Msyms x;ff=cos(x)+sqrt(-sin(x)^2); - q' m! ~* K9 |* y
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
# J' R% e. T' `# a: E4 k- N- ossfy1 =
4 x; ~9 t% o8 y; rcos(x)+(-sin(x)^2)^(1/2)
& Y! J5 d! ~9 \3 F2 Rssfy2 =
. o/ O# o8 ~# }6 ^+ l) p9 [: ocos(x)+(-sin(x)^2)^(1/2)5 f$ c7 ?' |& a$ g
gg1=simple(ff),gg2=simple(gg1) 5 S1 o( K5 d5 M1 o4 k0 Q
gg1 =
( v! v3 C2 W* _# xcos(x)+i*sin(x)
1 x' J7 Z( s/ F9 G% `gg2 =+ A- Z) Q. H5 z  e, R! W- M  z
exp(i*x)
/ `7 R( [& V, \6 t
$ A; `+ K4 ?+ m# ?
: s2 B7 D1 [! F! F6.2.2 符号函数的求反和复合

4 j$ L, G$ D9 X5 t

  


% l9 S2 C) r& G


8 y5 x% Q  d& D8 p; [1 n. j9 ~& L# L' _2 ^+ k- x. u# f+ O9 C
【 * 例 6.2.2 -1 】求 的反函数
" N2 y* x& U- p9 D6 o  Xsyms x;f=x^2;g=finverse(f)
2 h% D4 s# j7 Z3 Q9 t. }2 GWarning: finverse(x^2) is not unique. 4 Q% h) t0 x; Y; @: R
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
& K/ |% L! J4 M; Z; o# G5 {& kg =
1 k( V  `5 ?3 kx^(1/2)
' `7 k& A/ x+ _. l9 ~- K: W' K- I' r, S0 Z) H. n; O
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
' ?$ M- @; e# T1 F' ffg = 1 w& \4 }8 r& Z- b1 d
x   ]  j- A6 [, ^9 T7 D

+ M9 L+ B, @4 T9 o2 v【 * 例 6.2.2 -2 】求 的复合函数
% }$ r! R9 ]: a8 |: Q! ]
; i' b: _6 _( a4 }4 s3 X0 n(1)自变量由机器确定
; h2 e9 u5 ~/ y3 S+ w, Rsyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
5 ?9 ?8 _9 {7 f( yfg1 =
  L2 C- A& o' h3 r! Q" o& D  ocos(y+fai)/(1+u^2): N" l" w  d" c1 s$ s' y
' f8 q, `) j4 a6 x
(2)指定自变量: T1 Y0 A' A; _! X

3 t8 x$ M- q; J6 T3 z" yfg2=compose(f,g,u,fai,t) ! I( H% u# \. J6 b
fg2 =
4 k. ^* r1 E  M. `x/(1+cos(y+t)^2)
) P3 T- ]" i6 D6 n! R6 Y( `2 x
* q6 f. K0 K/ }( u
5 t: Y( T. ~+ e6.2.3 置换及其应用0 ?( K( [, }5 B8 W+ y& I7 c
6.2.3.1 自动执行的子表达式置换指令
7 `" D& n4 A& r7 f( X5 F  i5 d; [. e* H
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
% l, }5 }6 F/ c. Xclear all,syms a b c d W;[V,D]=eig([a b;c d]);
2 Y. w6 l! x0 f2 v[RVD,W]=subexpr([V;D],W) %<2>% e, ^+ [7 N4 g2 L9 s
RVD =
1 e6 _6 A- L: b/ h5 ?: v1 ~4 @1 P3 d[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c], {7 ?' R. t/ u; y
[ 1, 1]
8 `% ^* K. V" ~0 f2 q. k9 \% b[ 1/2*d+1/2*a+1/2*W, 0]5 y/ z2 o3 {& z6 a( f4 e  L
[ 0, 1/2*d+1/2*a-1/2*W]
9 d4 T2 E6 p( V, |W =
, T8 Z$ O$ y3 _# m2 e+ t7 k: s6 Q3 r5 O(d^2-2*a*d+a^2+4*b*c)^(1/2)
  d- H: Z- r: ?/ a& G* g) T; x$ i. }3 A4 u# o8 C- a
0 Y9 C- J0 a4 F7 s& e- ~
6.2.3.2 通用置换指令
4 |, U3 d& }( z$ R% X* `' {
4 \( F# Y; U/ K5 c【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。$ M0 i) F, I; |" V
(1)产生符号函数
( g3 |$ m% Y* u- Msyms a x;f=a*sin(x)+5; & L( b) F* ~: Q7 P8 Z/ u+ I6 V

4 c. S8 B3 q, R% R(2)符号变量置换
& g4 S4 P# }. P+ b" D% zf1=subs(f,'sin(x)',sym('y')) %<2>   


- i% O8 f  J1 \. X


# F6 u: ^' _' a; G  C) _- }/ df1 =
7 b- U( `8 W# a/ b0 C( ta*y+5  U6 j. D: c& q' {
/ b2 q4 s5 X* N4 U! i
(3)符号常数置换" m  z8 k% Z3 O' ?7 O
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
. X. z8 ]1 M- Kf2 = 9 W/ e% F; @' G
3^(1/2)+5
2 m: p, M1 `; U% @+ v, P/ X
8 j( P6 v/ z7 \4 Q' [! }  _: y(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )# u) ]6 X6 r2 H' b9 {! r6 C
f3=subs(f,{a,x},{2,pi/3}) %<4> 7 `( M, E! g& u- S
f3 = , [7 O$ r5 V$ C  t. M
6.7321
/ U$ |! E  |: m6 R$ U- Z% K. n
! H' q8 N% T# I* T; s! C(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )
! ]0 x: [% G( F% o: E& C2 Uf4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> . d! [4 }8 w, _6 O
f4 =
: Q$ s$ w$ B7 C6 K7 m5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 / Z" Y9 o. [5 X# h1 {3 m6 p, U

* C5 A5 K7 y9 O$ }0 b5 k. \(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
7 Q% M" n- t; df5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> - a+ o* w0 s. ~/ ]5 n5 o2 K
f5 = % Q. n7 b' A; ~* Q! f0 {6 [% b
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.00002 m$ \1 G. q4 m6 _3 N1 G/ k# }9 c1 ]

/ [* N. N4 c/ @$ y1 V0 R; P9 ~4 m4 K4 ?
6.2.4 符号数值精度控制和任意精度计算
/ d5 R- A$ ?% r% C6.2.4.2 任意精度的符号数值
; I- I3 \3 d( s7 D7 ?1 T' v# J. j, t% {' A- T# h$ E5 v
【 * 例 6.2.4 .2-1 】指令使用演示。
9 e/ l  l& w, x5 V* c0 F( Q* _digits % 显示省缺符号数值计算相对精度  v6 R" _4 z$ I$ S- ?: G+ _5 Q( N
Digits = 32
4 H# |1 d3 U* Y6 L* m3 Q6 ep0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值/ ]# b/ M: E$ a
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值: }4 [! N/ B: k* P, y+ V
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
  ~  W( w( b5 d9 x7 `! Y, Lp1 = : u) ?1 O- X- p# N" V9 P# m/ R
7286977268806824*2^(-52)
* \+ D1 t2 Z/ G& k8 a& Xe01 =
( }7 @: d& t5 x3 W3 D6 ~.543211520368250e-16
. S" i5 K; {/ w4 R; Gp2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似' p* e" R: H0 |# z' T4 B
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
0 _- d6 a7 T: I" C% S4 D% Np2 = : o; T5 T; s- A8 {
1.6180339887498948482045868343657
" w# l; C4 H6 ee02 =, I3 G2 K' k% p, G& `  \  S
.61882279690820194237137864551377e-319 G+ G7 n2 D. T! F9 a
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度8 _7 A" ^9 S' e8 _$ I
Digits = 32 ; L( r6 L5 }. l7 A
9 v& i8 D; z# o
4 L2 ~& d4 J- k+ T6 v
6.2.5 符号对象与其它数据对象间的转换/ Y4 F4 t6 {7 e9 R& y- r2 k# b

8 F$ f$ q+ ]- g) v. b4 R# b

1 ?$ P4 h- H4 @; }
【 * 例 6.2.5 -1 】符号、数值间的转换。
7 |, ]  C; }- mphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
. @8 }; _1 c. X5 Adouble(phi) % 把符号常数转换为双精度存储的数值
/ z  }, U! F) w4 w, D0 r. d& lphi = ( Z  r0 A% T5 r9 y" T; c8 n) T: f& w/ o# P
7286977268806824*2^(-52)
. ~5 g/ [9 }( S8 h# N1 U+ f, bans =, P2 r  G% D1 J
1.6180- G" d' I) l0 t6 C0 u3 V
7 R+ ?  M% S1 i8 ^- S( q
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
& B8 E1 U2 W, w# E  i' nsyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
. Q! j* b) w* n0 Hsy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
) n+ H* y+ \. H# hp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式9 C) }) [: d1 D
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式
5 N1 B3 Y4 u) a, ?pretty(f,'x') % 显示符号多项式的易读表示形式7 p3 M; R. S  y5 c
sy2p = ' N6 M2 H9 k3 l' v' i1 f$ J1 P
1 2 -3 5
- l: n# D; l: Y: I% Ap2st =5 g+ q& g' Y- m: B; ]1 }6 h
x^3 + 2 x^2 - 3 x + 58 v8 s7 H5 m, v7 y- d  |, e0 x
p2sy =. K* j3 n) K8 M8 K
x^3+2*x^2-3*x+5$ X0 e; V' ?* O
3 2
( s3 A. f( @" g0 t# O* y5 r# cx + 2 x - 3 x + 5

$ C( d6 C- ?6 e- J6 _" M7 U; h
- U3 ]$ Q" n! v7 X# `" M0 P, I+ C

作者: xuzwg    时间: 2019-1-7 17:02
谢谢分享
作者: gaoxings    时间: 2019-1-8 11:12
这个不错




欢迎光临 EDA365电子论坛网 (https://www.eda365.com/) Powered by Discuz! X3.2