找回密码
 注册
关于网站域名变更的通知
查看: 1143|回复: 2
打印 上一主题 下一主题

Matlab 符号表达式和符号函数的操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-7 06:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
Matlab 符号表达式和符号函数的操作
5 b7 A7 Y' F/ r# ]% J  |
+ s/ F. Y9 S0 u% a$ n6 _3 J4 i3 V
6.2 符号表达式和符号函数的操作
! A; J5 C: \% W$ D5 E, \6.2.1 符号表达式的操作
( Y; J5 w) _" Y' A% \2 |0 {+ H  L4 z: L& c' o$ ^/ i8 y6 i
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
: ?2 r$ A! H# ~) l. Y7 NEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
) p/ y# I( U8 i/ C" [/ H1 Pexpr1=collect(EXPR) % 默认合并 x 同幂项系数7 J0 J; I+ O4 F
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数/ v( o. h: X# q  `5 D& ~
expr1 =
! ^& D9 B: L8 A6 c- O7 ]x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)# [9 ^- H* ]+ M# e: l+ i
expr2 =8 c* _5 [' j+ d# V; C2 J, @2 \2 E
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x& e$ u6 R1 C4 N! t

+ a5 x# I" z, Z9 D5 t5 F: o* Y【 * 例 6.2.1 -2 】 factor 指令的使用
" ?# ^3 |% p" K2 V7 w; o! I(1)除 x 外不含其它自由变量的情况" G) A, V+ Z" t, F
syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) , W& e7 q. z- a' S
ans =
2 z/ v2 V/ I0 _& q0 k; y1 [(x-1)*(x-2)*(x-3)*(x+1)( Z" _) i: Q  F( b
1 T! V) ^! }1 ^% M7 R
(2)含其它自由变量的情况之一- i7 z& n) _6 m+ O/ \3 ^
f2=x^2-a^2;factor(f2)
6 U2 x: V8 K+ f
- c1 }* d3 {  T7 }8 Aans =
* H- o# {- B! t( G  ^$ n( q(x-a)*(x+a)
. ]. \! z# X; e2 w
+ a( M, |9 v  F9 c' z* Z2 F(3)对正整数的质数分解9 ?5 I( r) F8 G1 A( u$ N3 O5 J
factor(1025)
, u2 Z. z5 _2 K  k$ ^ans = , z) l" F9 p9 R- G0 t7 O" q
5 5 41
1 P0 r; i8 K4 E8 ~  g
8 Z# }, |/ E5 b" S$ b; p. k【 * 例 6.2.1 -3 】对多项式进行嵌套型分解* V" j3 V; N6 v. e  M  T
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
  H) M; }0 r+ x; U- N" e8 lans = ( Q0 D3 E' y. G' x2 j- O8 D1 h1 f
-6+(5+(5+(-5+x)*x)*x)*x6 b5 y9 t3 j' y4 ]9 u; A0 u
# x$ ~' {5 m; G* s2 e/ R- q5 `
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
& H* O' k* v4 l8 [/ n- o) h(1)求矩阵各元素的分子、分母多项式# |1 r% T8 d5 [7 v4 j& ~
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
. G; _2 H, M9 `[n,d]=numden(A)
+ m  v. F9 {! @3 g2 d: A: Gpretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
4 |9 b5 J( t4 j6 f: y) q" ln =
4 m: P  K  i7 v[ 3, x^3+5*x^2-3]
5 Q9 f  f  h+ H1 _$ b$ A  W[ 4, 3*x+4]! C4 O6 R$ q( _) K  w- [* {' {
d =; P+ W. {; x! V7 ?( R( p( h0 z
[ 2, (2*x-1)*(x-1)]
' h; \( j7 p9 H[ x^2, 1]! G# n; o- N8 t( r. v" [  n
[ 3 2 ]- r6 G4 ]  h- w( S/ W, n
[ x + 5 x - 3 ]8 m! t4 N/ L5 I4 x
[3/2 -----------------]
3 ^3 n6 n3 S: s
$ G# l: G3 r2 _. n* d" [% ~8 Y0 f& d


. s4 \8 O5 F( e* l6 S[ (2 x - 1) (x - 1)]; H! q9 F" @( f
[ ]
8 U" E. P$ v& p: r3 }) H[ 4 ]
  {/ j; K, J) ~' w* M5 J, `1 Z[---- 3 x + 4 ]
* D8 e2 |1 z0 i; c5 `7 T7 }) `6 O( u[ 2 ]7 V, q* J" K1 t6 `; f
[ x ]
5 Q9 [$ w% U: x  y
: y* u$ G4 K( |' x9 R, v' ?+ l3 G(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
0 K) |) Q! a. K! {4 |pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”. C' s7 N1 [- ]/ O$ @9 G- C
[ 3 2 ]
: |" J! o; v* I" i' Z" @[ x + 5 x - 3 ]( _4 [% L. D) s7 i. k5 s6 s
[3/2 -----------------]
/ N( M' k4 r, O; d7 @[ (2 x - 1) (x - 1)]
' b1 d+ h0 g' A5 H[ ]
6 [1 H5 V5 h  k  B/ B% g% X[ 4 ]& h& g2 A# K9 l" |
[---- 3 x + 4 ]
; [9 p  g: [( k& t5 Q[ 2 ]' |9 S2 K9 B# Q& f1 [- g9 t
[ x ]4 ?( c* C% ?5 e
" K: J# H' X) g5 V
& X/ J  k8 E# W- k
【 * 例 6.2.1 -5 】简化 . I1 f9 M2 |5 r& Z; j
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)
$ o, H9 m3 _$ |6 x& [syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 9 B8 o$ C6 D' F* X8 L
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网 ! @: ~5 c% y! D8 G  ^  U

/ {5 h# A) Q! ?7 Usfy1=simplify(f),sfy2=simplify(sfy1)+ ^6 y/ _8 Z% ^) E# a
sfy1 =
2 ~( C7 I0 e' k5 u((2*x+1)^3/x^3)^(1/3)
: }+ ]% _7 q/ r' o; e$ p  t' hsfy2 =5 A8 a; L3 H& A2 l7 b" I' y9 q
((2*x+1)^3/x^3)^(1/3)
  W* ?% R5 R) _/ `1 C) y% ?6 C- D6 H- a* b
(2)运用 simple 简化
$ u; q  J. W3 b5 `1 J) eg1=simple(f),g2=simple(g1) 0 H$ S3 u( @+ _' `/ v! j- A
g1 =
9 z3 K$ _& F6 s3 q$ j& X4 b2 @(2*x+1)/x
0 X, y- B8 H$ \: Jg2 =3 F0 r2 A) Y) \/ H& H. V
2+1/x* l% S7 j9 A1 L) B
- H' R8 D- r2 ~: k$ `. {, B
" c1 y% M7 [: V  h  P) b4 R" D# ]  p
【 * 例 6.2.1 -6 】简化 7 [5 g! z# j* v- |& H- h
syms x;ff=cos(x)+sqrt(-sin(x)^2); 7 a4 \, Z1 Y3 M& a7 ^! d/ f" _- ?
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)* ]$ `% U* c: w) i% J
ssfy1 =
2 m, ^+ G5 q0 ^/ A% Icos(x)+(-sin(x)^2)^(1/2): g) }! n' \3 J0 j" p3 h
ssfy2 =
! t) L7 M% J; [cos(x)+(-sin(x)^2)^(1/2)+ }# ^. ]. w/ i* J8 G  v) I. i+ v
gg1=simple(ff),gg2=simple(gg1)
, f9 X! N7 ?0 ]5 t2 ?- xgg1 =
' z& W& t& f0 A5 Rcos(x)+i*sin(x)' R9 G- l% e/ {0 o( d7 @
gg2 =: y3 o  b- T, j+ _# |8 n* M5 U% s
exp(i*x)8 Y" _% R9 z' _) C- ?
" U" _6 Z" m" q9 a
/ m* b, `; ?# Y* X' d) z" ~* n
6.2.2 符号函数的求反和复合


( }' L$ l4 [' x) D

  


" Y8 }4 M) [# F1 m2 A  r


. U  F% R( H7 r' p1 ~0 n1 |. z" Y
【 * 例 6.2.2 -1 】求 的反函数  O9 X( X) Y, r* D* D- i: h
syms x;f=x^2;g=finverse(f)
- J6 Y. y3 |* }' AWarning: finverse(x^2) is not unique. 1 ~7 F' w% u. ]+ r9 `: X3 L
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
+ h6 d) m* ?2 s, W& M7 r0 t  Gg =# x! T" |& V) l  u# M( Q
x^(1/2)
  Y+ H' \( |- S2 h3 ^4 d+ j# R2 u' a; j2 e% }
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
4 R  g% ?' h3 }0 p, m& z" Qfg = ( ]; S* j4 c) D# _8 S0 d
x
$ \4 b( M* ?+ Y1 ?& W$ _
1 d. ~$ @4 i( n- [) y【 * 例 6.2.2 -2 】求 的复合函数
+ u/ O3 t4 l: \% F8 c) `+ K8 M& y) X7 i- l& D8 Y) L
(1)自变量由机器确定
" ?. H, A! @, Q3 ssyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) : T& a" Z% T$ t7 a/ I
fg1 =
+ J; E+ o! y! j: t! Ycos(y+fai)/(1+u^2)+ V- j  Z& ]; c+ i5 L

  R& r3 r- }' r+ q1 n) [; \! R(2)指定自变量
. B, J" f& W; \7 B# j1 `9 D# O( Z4 N: a# d, `
fg2=compose(f,g,u,fai,t)
6 ~( D( ^! T  @3 X2 K5 `fg2 =7 J" w) W$ k* |: x1 y. q* L5 Z
x/(1+cos(y+t)^2)$ ^2 _$ m$ N4 @' _2 Y, r4 a' Y; w

0 N# F# R# P  w% U" u: D  O$ ]: [8 W* f! [
6.2.3 置换及其应用
6 S3 g2 Z; H6 d' c: D6.2.3.1 自动执行的子表达式置换指令
$ W' c- g/ x3 e
. A$ G# n: E6 x- P1 s5 R+ o【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
- _& c& P4 e5 D+ }7 U8 V4 Hclear all,syms a b c d W;[V,D]=eig([a b;c d]); 0 S4 C1 s, r$ D- V/ Q; k
[RVD,W]=subexpr([V;D],W) %<2>( e$ Y4 y% O, v
RVD =
; V4 {8 c+ q# q  B4 c0 V2 z[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]
6 a) B8 c+ o) B3 G+ `/ Q[ 1, 1]9 S4 O! a- ?0 ]" I$ ]
[ 1/2*d+1/2*a+1/2*W, 0]
4 v& u$ e0 H" M- _[ 0, 1/2*d+1/2*a-1/2*W]9 W( y/ b. ^4 }7 m& s
W =
' j! H% O! G' g# o8 |(d^2-2*a*d+a^2+4*b*c)^(1/2)
% G& e* U; j" b( v5 k
6 [) I- o- e' n0 M1 T% z- R, p' w; m9 F
6.2.3.2 通用置换指令6 g( I: y  _7 Z
' l% p! @# l7 R
【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。+ Q% L" h/ @/ W3 c
(1)产生符号函数
6 }$ x/ V* u, Q* W( J! @* G$ t1 Ssyms a x;f=a*sin(x)+5;
* C3 ]' A$ G, {6 ~2 A* {9 v$ j
4 X6 c" R" N! V0 k; ^(2)符号变量置换
% A. c5 ~, u2 J4 @; M6 ?f1=subs(f,'sin(x)',sym('y')) %<2>   

+ x! t, w: c0 P4 _3 @

" I5 R- d: o9 \- S
f1 = , y. S2 w$ p& q! a
a*y+5
8 A3 g  Y8 I, z
! a9 i* w; S/ z(3)符号常数置换
4 m& y0 Y" j1 i/ E% Tf2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
8 V# j7 c; p$ x) m/ i* |: gf2 =
5 Z$ [; T! g" _: q. ]3^(1/2)+5
$ K0 x7 m6 r% K7 m; s1 P* j
$ |3 G1 l2 s. K8 g& P(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
8 N$ D7 @$ E' l1 M8 y: c. if3=subs(f,{a,x},{2,pi/3}) %<4> " c' L6 A; p* d) f6 n
f3 = / q9 M" Q; K" ]" w1 V
6.7321
7 q9 m0 T9 L% ~6 J
3 d3 }# ]! e* m. `4 y# m(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )/ D: Z1 \4 |  R2 z# Y9 W
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
5 Y, n. v! n! [8 Bf4 = + ^1 [. [8 n7 x+ c6 U' g
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
. L, `: A' S8 o; L# Z4 n- K0 }- m3 `7 m! |4 a
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
9 v. r  f$ f. N6 I! ef5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
" s2 q4 ~- j4 H0 N8 n' \. g) E9 q4 `f5 = ' |# o* I7 a3 J# F' g
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
) ~% C; \- h; U9 `# O3 S7 W: P
0 o+ D6 _& h* L* P& Q
6.2.4 符号数值精度控制和任意精度计算
0 l- i( `' }' \4 D/ i  y" E; {5 U6.2.4.2 任意精度的符号数值8 }0 t2 l) N* [. `: q

% t0 r) u7 k$ M' T  B【 * 例 6.2.4 .2-1 】指令使用演示。# ?9 b5 H2 W$ B; ]) `
digits % 显示省缺符号数值计算相对精度
! B6 W2 H" W% q8 vDigits = 32
( a5 s* i/ k  x5 {9 cp0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
$ S# B1 n3 J6 V# Op1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
5 o, \( d1 R" @% Ze01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差4 i7 c/ X. g# h+ f: |
p1 = 2 W7 B/ s' C2 C' w" s; \9 [- @2 v  N
7286977268806824*2^(-52)
6 P3 u6 l  I; t0 R) @e01 =
$ x, F- K! P$ Z  [.543211520368250e-16: _1 I1 ?: K3 p$ d
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似- R3 f& Z/ c5 }! H4 B9 K5 k
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差6 v) |& g. W) m/ D& ~6 s
p2 =
; f. e% }' W0 a1.61803398874989484820458683436579 n& ~, U+ W* v6 k1 e
e02 =" ]2 i7 i8 k3 d- c8 K$ E
.61882279690820194237137864551377e-31, X+ r, X% X8 e- R# \: ]7 A
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
+ j% t5 ?- i0 Q" K1 Y. g/ k* }4 LDigits = 32 1 t) g" r1 Z" \' r6 \& w" @

; U: e/ ~+ t+ y1 O% F  D9 p" f( V. M& Y' h* X4 T. |$ c
6.2.5 符号对象与其它数据对象间的转换1 b2 |; c- \: k0 R8 n. G

2 \8 \% ?- I+ j& F/ p

* ?4 J. w( b9 c
【 * 例 6.2.5 -1 】符号、数值间的转换。: t3 l1 a; h$ P. m  g
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
- I- v! Z" o- d& W+ G4 Hdouble(phi) % 把符号常数转换为双精度存储的数值" v' T. f! m" o/ v2 O% w' C
phi = 5 l  a0 M/ d1 X: |, Z1 k9 y- Y1 z
7286977268806824*2^(-52)
& s' x' J; b8 `. o, w  `ans =
  f% v7 f% h1 H8 _0 p3 A, Q1.6180
2 U  ~. J1 z4 v/ b; G6 M
5 B: Y; d3 w6 F( J4 @" u. C+ _" ?5 y【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
7 h, i7 {+ I) S5 ^; rsyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式8 {( X; V8 E9 `! F3 D
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量( }- c( n6 A# \) G/ {
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式; ?% \# H3 A$ @$ l& X4 D
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式  k. k: s( M2 |$ X$ q4 }
pretty(f,'x') % 显示符号多项式的易读表示形式' g9 z4 Z8 \3 O9 u/ k- a( \
sy2p = - R) b0 h# V+ M$ B9 C- ]
1 2 -3 50 ^' b6 o1 Y# v* i' c
p2st =, y6 P+ g, P7 g4 X  w- T. g+ a
x^3 + 2 x^2 - 3 x + 5
& {: ^' ]+ [% `7 A9 Op2sy =2 X7 l" g3 n0 I& |+ q$ C
x^3+2*x^2-3*x+5
+ c# z2 J+ i4 `3 27 s1 U  }+ Y' L3 J: u6 ?) J/ K
x + 2 x - 3 x + 5

! U. n1 B% }* D$ h) e0 ~; \
. @% O0 l4 t. D5 a: v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 00:12 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表