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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Matlab 符号表达式和符号函数的操作0 d9 {) _' w/ ]
# g2 w8 z; ]; m
6.2 符号表达式和符号函数的操作
1 q4 p( R, l, j  ~5 t6 z) g( P/ U6.2.1 符号表达式的操作
' E1 Y3 A( v  ^, l  i
! f7 ~% C* x, ]' y" O( d0 w. `【 * 例 6.2.1 -1 】按不同的方式合并同幂项。8 p- f2 X' B5 h. q% s& w
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
3 v3 D" p0 j/ N- S1 Fexpr1=collect(EXPR) % 默认合并 x 同幂项系数& [1 E( I4 d% k5 T% Y4 M
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
* D( w" O. M+ \6 q1 j- Hexpr1 = 0 n6 u3 d+ @% p4 N6 p
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
9 a! N2 C5 u: \5 d7 c  nexpr2 =
* R" j5 j3 @: |  X8 _2 v4 s0 Fx*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x6 }! Q2 K, f  G  [( e& ?$ Z

; w" Y: n* \5 ]2 G' ]3 a) ^/ S% d【 * 例 6.2.1 -2 】 factor 指令的使用
3 m  W+ [9 d$ p8 s+ h. ?) J(1)除 x 外不含其它自由变量的情况, \' A* s7 T3 b. P9 A  u5 _
syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
3 B  D6 D9 m6 y% ]% \# Y5 Dans = ; W* l2 W) t7 G1 W2 |
(x-1)*(x-2)*(x-3)*(x+1)
: A, ?6 O3 Q, c9 y2 q
: r) k) @1 k) [+ d' L/ B(2)含其它自由变量的情况之一2 G. s  ^4 Y0 \* v
f2=x^2-a^2;factor(f2)
  {4 X, y  h  l: J" f: I
+ w; m& `0 K. [# y( W$ Z% cans = & j/ u% L; m+ E/ F' _& G5 b2 `
(x-a)*(x+a)
1 ~& e. g5 [7 J. {' s* c# I& B1 n  h- o+ E% q# g( f
(3)对正整数的质数分解
+ O' ]- E4 }3 ]factor(1025)
5 O, H$ r& q# H, w9 jans = . N! n( a' a! \0 Q* v
5 5 41 ) ?! I. C# Q, i- I

. q0 l/ b: V. E! o5 ~【 * 例 6.2.1 -3 】对多项式进行嵌套型分解$ K1 e) G9 p* M2 k; j7 `1 W
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) & c' r. Y4 h4 X  o: F3 s
ans =
+ u. u) ~" D2 E-6+(5+(5+(-5+x)*x)*x)*x
: Z6 l" m6 y5 `4 S+ X3 J
- h- `) N& G7 ]4 A. t- b9 J! A5 e$ u【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
, ^2 H) ?- C) u$ z7 g, K8 w4 f(1)求矩阵各元素的分子、分母多项式* \; v0 G3 {* T7 [
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; , |5 n0 M+ F- `" ?1 i
[n,d]=numden(A)
$ j- x" G% c8 U, H9 L6 j( @pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
# g, r6 `' {4 f# l, ?0 @n = 1 Q0 ^( f7 q: l3 `* V
[ 3, x^3+5*x^2-3]
$ F  Z; L2 M# b+ S- H4 r/ h3 }1 e[ 4, 3*x+4]/ r/ ?' a  M  O0 [6 v2 l
d =
: e; j4 Y# R7 j& I[ 2, (2*x-1)*(x-1)]; V/ `: n9 p6 {* O
[ x^2, 1]
5 U0 v( i/ T' L" }[ 3 2 ]
( [+ x  }% j) A. N4 L) c* p- E[ x + 5 x - 3 ]
1 P1 h% e6 U( |. a[3/2 -----------------]
( @. K( Y, H( x/ r4 X: c
) ^! N" W8 Z) X8 `$ L2 d; v6 h1 A8 L) O! a

' ^& P4 ~5 A2 y! }$ K! N
[ (2 x - 1) (x - 1)]1 p+ A1 d% a8 r) X6 e1 z4 ^
[ ]
, G- O: k1 X! H[ 4 ]
1 T0 m( R2 H6 b. q- I[---- 3 x + 4 ]
6 k; H' G# r' F  d$ l5 a# R[ 2 ]# U( F( u6 Y$ [; G% C
[ x ]6 ?! y8 K/ u# |8 @# |
  f8 N! E& S1 Z& p/ }7 y# M. \3 A
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。: ]/ |2 s5 l$ D. R/ Z( P- C- a) f
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
! W9 d6 K3 Q* B; J* r[ 3 2 ]
* Y: q# l3 h- @3 }0 b7 F[ x + 5 x - 3 ]! M1 ~" C' J* ?4 t
[3/2 -----------------]4 v( r3 P6 h9 R8 l% O1 W' X! a
[ (2 x - 1) (x - 1)]
2 \/ W; d+ c4 e! \8 f1 [8 ]  b[ ]" f' _, G( I# E! Z' v2 `+ }
[ 4 ]
" m6 x5 M: E/ A# q" C6 H: w4 F[---- 3 x + 4 ]/ B8 u. B' a% D6 P" }( q
[ 2 ]2 U$ K1 \5 V! ], v
[ x ]! Z8 q; ~$ E- w& f2 e- E
- v2 J- A5 N+ p$ g' C. B

( |% L1 f* T% y) Z) W+ F! T$ X【 * 例 6.2.1 -5 】简化
$ _& M  H2 _" K6 A2 G(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)
' d; R* K9 U3 ^3 l1 q4 vsyms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 7 G3 E3 \( k7 u3 g
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
  x1 p  W" y! w/ e& x# r- F# t: p* [7 N8 v2 B
sfy1=simplify(f),sfy2=simplify(sfy1)) l6 x/ ?" w) N& o) m3 |
sfy1 = 7 p( _# k* {7 |% R9 `
((2*x+1)^3/x^3)^(1/3)
# n) ]) l: G4 u( n0 ysfy2 =
: }6 h9 Z5 L6 u5 h+ C( M((2*x+1)^3/x^3)^(1/3)
9 C+ K2 r; y) f2 |# r: E
% G7 m, q# h- x  f(2)运用 simple 简化2 k5 l6 x7 V1 Z( v* b; @5 ~3 t
g1=simple(f),g2=simple(g1)
& I+ E6 q. y' t" n9 T. t" L* G" Eg1 = / B2 M* H, d4 A4 p* R
(2*x+1)/x
) |/ n! g9 |% }  p) sg2 =
. I: I( `8 R( I+ z6 R" a2+1/x
3 s5 ~+ ~0 h: S4 d. O  z" m0 U1 U' L- p* P  {

! n- V: e! _" U+ y* ]/ |; d【 * 例 6.2.1 -6 】简化 4 g' O- |1 {5 q3 X) O6 g
syms x;ff=cos(x)+sqrt(-sin(x)^2); 9 U2 G, U3 z9 B$ H! f% x! p
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
8 u0 v* N1 R+ E% A- c4 l7 B% ]ssfy1 = ' B+ V/ {- A; J4 _
cos(x)+(-sin(x)^2)^(1/2)
: M  D! f+ Y7 \ssfy2 =
1 m' ?2 R" R* D- k( {% U# Xcos(x)+(-sin(x)^2)^(1/2)
5 p" o0 x/ p1 [! @gg1=simple(ff),gg2=simple(gg1)
6 m  J* n7 c8 q! Q. f7 [gg1 = 6 ^: ?* e5 P/ J6 k9 B
cos(x)+i*sin(x)
$ B$ k; a; b+ b; L* jgg2 =
/ G. g1 O1 G, V& l' Z, Nexp(i*x)1 ?; x8 I; u* r

0 Z( u+ X* I1 F8 n+ E  _' `& E7 {  S( v1 n! v( ]
6.2.2 符号函数的求反和复合

6 i4 d" [# z+ c: S- m

  


3 F% C; P- k# F+ L8 ]


& B1 n3 X% }- A3 D2 ]$ Q
. a2 I( v1 x/ G6 J* V& A【 * 例 6.2.2 -1 】求 的反函数* I% T8 ^" b" L& }6 d) d
syms x;f=x^2;g=finverse(f) * W+ f+ m; T1 w' ~6 H" w8 ?. }* D8 B
Warning: finverse(x^2) is not unique. 7 Z2 ?" c9 O9 @) O* r- }# j$ j8 I
> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
8 Z5 j  x6 W& X. t# Yg =! g  i5 |' e. b" j( A9 k6 m+ j
x^(1/2)
0 Y* x% B0 _: s( B; [0 J& C# D
1 I2 I- a2 C9 y! r0 s% sfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
" N% n' F) }* G0 W* B' [. nfg =
8 R" Q$ s+ \7 x3 p& lx
+ @6 t1 h! u; s7 a$ f6 o8 L5 _4 P. N% F* R% M: p
【 * 例 6.2.2 -2 】求 的复合函数- G4 y4 w/ n+ Y! M9 v
7 a- I1 O% ^% t. P. a) R. e7 h
(1)自变量由机器确定' G* w% N; P2 g, n# p
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) 1 f, T6 C& N. @# ?8 @
fg1 = ( v, f6 h# ]. y4 C+ n( E9 v+ k0 V
cos(y+fai)/(1+u^2)3 q% j9 V% K$ e& I  z+ d9 [
9 Z( x9 ]0 E3 ?0 {) c
(2)指定自变量- d# o9 h) X2 R" v
6 I$ D" t  \  Y+ L% I: f
fg2=compose(f,g,u,fai,t) 6 h5 a% y$ T% `( h7 ^
fg2 =
. [6 K; z9 W( u4 v; v; v$ Yx/(1+cos(y+t)^2)
  U0 M. k* o& N' I) {6 F* _0 h! q5 G5 @

0 H+ ^, [' h+ a- Z0 g5 f6.2.3 置换及其应用
5 ^5 b' q9 K6 w: E, a4 ]6 o6.2.3.1 自动执行的子表达式置换指令, X# S) P2 f0 j, [1 c
6 R4 n1 j4 ~9 z! ^- u( ?# e5 u  v
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。8 y0 R1 m1 G9 E$ R# ?: o
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
* M0 l- q8 c0 u+ g/ W  @[RVD,W]=subexpr([V;D],W) %<2>3 B) J6 f3 s( c% X2 [4 p5 }& Q
RVD =( m8 F8 c  S$ A% z8 P1 T- s
[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]3 f; @" S% G( d( g4 Q2 o
[ 1, 1]) L3 w/ e% M  I5 \; n% x
[ 1/2*d+1/2*a+1/2*W, 0]
; p0 i, `: z& B) {3 i[ 0, 1/2*d+1/2*a-1/2*W]
# j+ v# P6 n8 p$ V) v3 E2 SW =, K- v9 T: x7 D5 g# @( ?7 @
(d^2-2*a*d+a^2+4*b*c)^(1/2)
# q. z- }/ }' ?3 L" ]7 l4 n* g1 _1 y4 l4 k) O& J5 {, H
6 i1 |% N$ Z/ r1 C5 a
6.2.3.2 通用置换指令# S! b3 k& q+ ^3 A/ |% Q" ]

+ k5 n5 e: K& i6 F1 ~9 j【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
0 _% j: k# Y" X(1)产生符号函数
; t: H5 A; ?( e; ?0 N/ ~& osyms a x;f=a*sin(x)+5;
5 x) j, Y+ n; M4 {7 W$ L( |- d7 B& y# |
(2)符号变量置换
. h$ L) R5 \3 [, R+ nf1=subs(f,'sin(x)',sym('y')) %<2>   

. f6 s- h! [' l% R+ y


- R+ A3 H( S) Af1 =
+ ~* p4 \+ _4 Qa*y+5+ P5 r1 R: H3 R5 `, L

7 a$ {7 A& a) }(3)符号常数置换
' l: |0 |: M* k+ qf2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
7 c" \  _! ~  a; \: zf2 =
! W. |) c0 ^+ f( V1 o  ?3^(1/2)+5
  N  i. Q( y/ W# B5 R+ Z+ O7 z1 h! Z: x# o. _  o/ d
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )7 [; j. X6 _8 R  s/ @
f3=subs(f,{a,x},{2,pi/3}) %<4>
  f1 S; l/ Q' x% e% s( D- [0 kf3 =
+ r7 }8 i( _# g  [: v  e6.7321
0 g$ O5 Y) [9 N- Y; v2 ?( k0 K
* I4 ^* m* f4 o. f(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )
% b) q7 Y. Y" I  Kf4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> 8 {/ j  g& h" |. x, m; ^
f4 =
5 m& U# ]0 ?, Y( A; Y* |8 M# v5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
3 W: J7 u2 F6 T1 ^6 r, p2 ?- }
- a. ~: V# x  F3 m$ n(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
$ s9 g0 a+ G/ \% G* [8 p$ sf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
( v0 r0 g9 r* A& q( w% A9 if5 =
! i5 K4 Z3 y( B5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.00006 A, |7 `; Z7 ~
/ R( F+ c# n% P5 Q+ f7 Z
6 ^7 c  }. O4 @6 f( s3 `
6.2.4 符号数值精度控制和任意精度计算
1 \. a/ ]  k$ b; a6.2.4.2 任意精度的符号数值
' K3 D9 W- S9 D
# |1 J! N1 T: g1 Z1 B3 C【 * 例 6.2.4 .2-1 】指令使用演示。
  I# d* N2 r; M0 e6 H# ydigits % 显示省缺符号数值计算相对精度6 A$ n" t. l* ?* }, q9 _5 Y$ j& v) C
Digits = 32 & S1 l! \8 W6 `3 [4 i" A+ E3 b
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值3 L2 Q. s8 Z1 }/ Z5 k; g
p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
* z& U0 B, [( |e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差/ P9 T7 K/ z3 t& J% ]+ p+ w4 V
p1 = ) U# N! h) V  [: V
7286977268806824*2^(-52)
# d( S/ w- |, Z- Ue01 =
% a" g( j: ~& L" o  _.543211520368250e-162 X) `" @3 `' T+ l0 N' Z7 C1 v
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似2 X$ s1 F% _6 D/ r3 A
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
* ~, w- {- s$ L- O% c+ z. w3 V: Zp2 = + G$ _7 `% s/ }5 i7 j( h+ c
1.6180339887498948482045868343657
( _- Y, G! @" {: o1 _  We02 =
9 \$ o! V! E$ H3 V' \: |, q) a) ~.61882279690820194237137864551377e-31: a8 g4 z7 \9 Y" W7 q- `
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
% N0 n/ O) ^. X2 |Digits = 32
. H3 E: x  Z% `0 O
4 s$ O# L! N) M- L
- q3 w3 G: m3 I% J6.2.5 符号对象与其它数据对象间的转换$ c8 D4 B' t1 o+ y, G5 V2 q1 @9 J
; x* H1 a7 Z# p8 t! [


! `7 O/ C" {; f【 * 例 6.2.5 -1 】符号、数值间的转换。  Y$ k( H& V8 b4 O3 Y/ A
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
2 @, [% |/ m: x9 L2 Q) rdouble(phi) % 把符号常数转换为双精度存储的数值& r4 g4 \9 l  d; P9 Q
phi =
% o1 H# O1 Y" {) s: [1 Z8 `$ q7286977268806824*2^(-52)
8 \/ i8 Z* A$ i6 Zans =
' F( ?; I3 f3 C1.61807 a) A9 X6 E: z; m* X  b6 W" a
: ?* f. f! d6 o+ W8 P( b
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换  [  p5 C" G& Y  D% b8 T
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
; Z/ }# o! B  E( i7 g% w& Jsy2p=sym2poly(f) % 由符号多项式产生数值系数行向量" V6 R% Q5 j4 f% d1 @& t- T
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式
1 ~. ^/ r& r- U' n2 xp2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式9 l9 M. G! t" e, b
pretty(f,'x') % 显示符号多项式的易读表示形式
$ c! P5 M, c$ n  N5 Esy2p =
; @5 |$ N- g  a$ d1 2 -3 5
2 |* {5 d3 X& ~p2st =
% T0 g2 r9 V* `x^3 + 2 x^2 - 3 x + 5: l- H$ k, z9 O& V% k
p2sy =0 `+ g0 p9 ^8 H
x^3+2*x^2-3*x+5
# U. q2 O& {7 H3 24 B( x( I* R& {
x + 2 x - 3 x + 5

, s0 R5 D- }! f5 N3 n
1 q6 t6 H4 v; \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 23:46 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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