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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Matlab 符号表达式和符号函数的操作9 n- ?0 Z/ E# ]. R' X5 c7 u
9 B. n" A2 f% U+ }
6.2 符号表达式和符号函数的操作8 W+ x- @4 i' W9 g. V
6.2.1 符号表达式的操作" p( R4 u( h8 M) n+ h

. k7 J8 y$ Z5 g: _5 N$ J【 * 例 6.2.1 -1 】按不同的方式合并同幂项。& I, V6 Z2 ~. M
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
! M( ^1 m+ A: `. J0 O# ?expr1=collect(EXPR) % 默认合并 x 同幂项系数6 t5 M* r4 c6 t9 E! ~: W! O
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数& Y6 k' x$ D8 V% E- w7 i
expr1 =
, T3 i. S4 ~$ X$ B; ix^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t). V; v3 q$ {. k# L, @# x7 Q' ]* S
expr2 =
! q7 G" y: K4 c, x) U% S4 ux*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x
& D) Q4 a; t3 a! p& y2 C# d
2 ]7 |0 H9 F3 ]" o8 V" E/ H【 * 例 6.2.1 -2 】 factor 指令的使用1 x5 U8 A# Y1 s. X
(1)除 x 外不含其它自由变量的情况
/ ~+ Z. L% D, ^0 Bsyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
! r9 z: P6 A: X+ Nans = % I6 |9 F" _+ |  D! G; I
(x-1)*(x-2)*(x-3)*(x+1)
: c* O1 }0 _' G; x. b( q# Z& F3 I# c
(2)含其它自由变量的情况之一8 j- }& i- K# e* \$ s
f2=x^2-a^2;factor(f2) 2 o0 M! j4 y8 b

. B$ R1 ~3 `3 yans =
5 Z- U  f3 Q& j3 C, `7 n, o5 r5 g) U(x-a)*(x+a)% v' k( [6 C2 L0 H6 x' k: p
& E  ?% J' [; l- ]0 X% U0 i
(3)对正整数的质数分解6 `) S9 S5 ]+ B+ i) X
factor(1025)
: q6 @% J3 b8 O( ^  Cans =
7 C( w0 T  r/ Q& D* t9 r6 X5 5 41
9 l. T. a4 ^( a  J& V4 k9 Z, i
* b( b% ]7 P0 T1 o8 g; N【 * 例 6.2.1 -3 】对多项式进行嵌套型分解# {6 ]: Z* \. k! T" T: r
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
* K: w# [* e; B+ I1 M; oans =
2 b- y( r; A; i  R6 I-6+(5+(5+(-5+x)*x)*x)*x
7 p1 f: N$ M- p6 R
" N" U8 [& w" q' I【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
. V; o* I7 d  @' D+ N+ i(1)求矩阵各元素的分子、分母多项式
4 E) N' O* Q3 z! `+ ~5 qsyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
5 `; [" ]0 B9 y' {! E[n,d]=numden(A), F9 q7 ]0 z. T# s  S
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
" j& x! Y: K5 b% E5 Y" hn = ! @8 D$ W& R" p5 r6 U
[ 3, x^3+5*x^2-3]! w0 J$ I6 c! \  F3 v
[ 4, 3*x+4]$ X/ F! p( ~( F5 T# G/ S- x
d =
! t; ~% ~% {7 b2 S+ S, o8 ~[ 2, (2*x-1)*(x-1)]
5 ]2 R. E4 w. i# d: T- W[ x^2, 1]
( ^2 H, C1 k; A2 O# ^& B: t) C/ A# A[ 3 2 ]
5 s  m1 g; ?4 x$ L- L[ x + 5 x - 3 ]- D- T1 Q9 Q  `: S
[3/2 -----------------]6 f2 q6 O; F: h, G$ c

* H3 J  t) l! l" D+ D) P* K2 ~$ \  m" {! J2 B7 u

  |, s# _$ L+ z2 U) q
[ (2 x - 1) (x - 1)]$ t( s+ g. \7 q; H7 ?$ X1 g, P, k7 B
[ ]
# t! r5 h3 x& z[ 4 ]
  P* D% @% K. l' m[---- 3 x + 4 ]
" X+ _/ K/ m4 x2 c% w6 E# S7 S* D0 X[ 2 ]# ?! [5 s- R. I+ ]$ X6 r% w0 B" T! b+ c
[ x ], a+ Q2 K2 d- _0 ?% O9 h
7 n! R! v) E' N# V* i2 a
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。+ {' l) ^: ^& u0 A
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”. P3 _/ W" {2 [) Z  `2 b
[ 3 2 ]
$ K; o3 R9 ~, L. K' W  O[ x + 5 x - 3 ]7 C* p- i5 B, d5 U( m5 N
[3/2 -----------------]% R+ H) T1 q' q+ W3 S5 i
[ (2 x - 1) (x - 1)]7 {6 V3 K/ X# E7 h
[ ]
2 R9 K6 y$ U* `" B8 _% `) ?, S[ 4 ]5 g0 m7 d8 ~- L) ]
[---- 3 x + 4 ]5 l  S9 y$ c! D9 V
[ 2 ]6 K- G) y& Q" y, U5 |' P4 Q
[ x ]: ~6 h! ]. `( r4 W. U; \

# L( K7 o; t( V# m: ?7 \+ [- A4 c" q% r1 ]' j  L
【 * 例 6.2.1 -5 】简化
% _# L+ T4 }/ F: g1 Q2 N(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)5 O1 ?& x7 @( P* a; W' G
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); " t# h8 v% ^$ v$ ]2 t/ q
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网 - J' T# L7 o4 S# v* S' ^( W
1 b) C% U: U2 b) u& |2 ]( v* S* i# Z
sfy1=simplify(f),sfy2=simplify(sfy1)
8 O$ P+ ~2 x4 _4 Ksfy1 = 6 W# V- N8 v3 n/ _8 D! M* ]
((2*x+1)^3/x^3)^(1/3)$ c( d6 H/ J/ p
sfy2 =+ h, F+ S9 o# |+ @
((2*x+1)^3/x^3)^(1/3)2 A; B; W. v2 O% k/ m
* @3 Z3 k# B3 ~& ]+ [) C
(2)运用 simple 简化
/ y2 l, X  H& l6 a, l- @9 ]g1=simple(f),g2=simple(g1)
: l1 ~) |9 x( f- `+ Kg1 =
; d5 p; X9 O$ l% B/ j(2*x+1)/x4 g: u! u% ]7 Z; _! K
g2 =
, Y% b1 e3 ]! j3 l2 j2+1/x' r% l" Z& M* N$ z" {+ d% f& Y
- l. w8 C& ~$ V. @
# H8 j9 m& U' y# F1 t
【 * 例 6.2.1 -6 】简化
$ z+ f+ P3 l+ A) G* c8 ^syms x;ff=cos(x)+sqrt(-sin(x)^2);
' j1 }: v9 O2 Y' ^' issfy1=simplify(ff),ssfy2=simplify(ssfy1)
9 t3 e4 X* p) I7 Zssfy1 = ! n0 D4 \. k% [" `
cos(x)+(-sin(x)^2)^(1/2)
* p* @0 Q( f  pssfy2 =
9 Q+ {6 Q3 @4 s* Z( B: ^- vcos(x)+(-sin(x)^2)^(1/2)* b( c& y" ^  I
gg1=simple(ff),gg2=simple(gg1) . E/ e4 @: U, i* u! R
gg1 = / k8 K5 o$ U! D- g- w4 X
cos(x)+i*sin(x)
9 I" \5 g& }5 y$ w4 ]! `+ W3 Vgg2 =
/ q7 Q8 j6 h, W( r2 c2 V5 W- jexp(i*x)1 j" U3 B& e; H2 {

) G, L3 ^. {4 ]( Z0 s
! C( L; p3 O2 E$ [+ A: w6.2.2 符号函数的求反和复合

) d2 G) y2 s2 @9 T  l( j

  

+ M% \- q5 \; e- `7 J7 _


, j5 G3 D. y) d3 A# Q& X/ d8 g( I/ q
【 * 例 6.2.2 -1 】求 的反函数
( o1 _# ?( p4 T. x- F6 ~syms x;f=x^2;g=finverse(f) % B# {: k8 H7 q* \; \% O
Warning: finverse(x^2) is not unique.
8 M& d9 w+ k; n! m% x* @7 m> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 433 l: L: A2 F$ J6 G9 G  x5 T* d
g =
' D5 a5 ]( k: _1 |0 s4 V' Ex^(1/2) . O9 `* L2 ?+ ^0 C4 s' a7 y4 ]3 D

6 H8 J3 h5 i2 Z" k( z1 jfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x+ x. n' B; N, O
fg = % d9 I1 @8 M0 _1 G
x
, \/ {; g; m5 o/ r
- i9 f2 `$ b( t4 t% K. s【 * 例 6.2.2 -2 】求 的复合函数
: o8 X) D! R: ^  \+ K5 n- [+ a  S
- @# l5 Z& P3 J. Y/ n' t(1)自变量由机器确定: \) K- n+ s% z9 ~7 }
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
4 ?) g: [& g; F/ Z' ?  h+ M* Rfg1 =
5 g. s! K+ Q+ k# ucos(y+fai)/(1+u^2)$ ~9 P3 }( R- \' {2 A
" \$ Z2 a7 t. R4 [% Z" a1 W( W
(2)指定自变量( Q' M8 s+ h6 c) G5 p0 B
, X9 A/ r% w, s& e% E; s$ R& `
fg2=compose(f,g,u,fai,t)
; m9 e6 K6 z- @% G! M; Dfg2 =
* p/ |% [/ c) K- A7 B3 |) Y9 vx/(1+cos(y+t)^2): O0 A* d* b; _# }" `$ A
- _$ i$ X/ z/ z- z3 T) B* K

" k- Q5 v; _) T: c6.2.3 置换及其应用5 W, L/ \& m- ]& _1 K
6.2.3.1 自动执行的子表达式置换指令& n6 Y. I/ B" s* n- E& j

! g0 m9 H) X4 r% d  {# e  |【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。- Y* ~6 |5 {  R# V' W' U: R/ s. u
clear all,syms a b c d W;[V,D]=eig([a b;c d]); 3 n( w, [) E7 h2 `: F5 J
[RVD,W]=subexpr([V;D],W) %<2>
* h8 K7 A: s5 r( nRVD =6 r; Y8 y  k# S
[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]0 J, l& K5 a; S2 L) n4 x
[ 1, 1]9 g; z0 }+ g9 \! C: z
[ 1/2*d+1/2*a+1/2*W, 0]
: v" P6 R4 X4 f8 j! T9 \5 J[ 0, 1/2*d+1/2*a-1/2*W]" p  A# @8 Z# M' g0 q) R: j* |& m
W =2 M, @' J0 @, y2 B' M, A% L* H7 D
(d^2-2*a*d+a^2+4*b*c)^(1/2)( E2 r. x5 L* C- ?* L, A

- R8 |6 y# Q. }! V7 y# B; ?2 K' T
- f9 w+ Q9 ~& Q. _: y6.2.3.2 通用置换指令9 U% f) c* Z# n  f8 o  k

) I; A/ g9 }, P; Y* T. D" _【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。5 y) T; `; Y% }" n* S
(1)产生符号函数
( p6 K6 v- I6 _syms a x;f=a*sin(x)+5; 5 \/ W, g. u! P  b6 X7 e

$ m4 Z' w  p. q; ?) \(2)符号变量置换# _' n6 t' M8 i- h) z7 d* x
f1=subs(f,'sin(x)',sym('y')) %<2>   

: s- |; e* L6 M3 g


( Q) e! A1 o4 x6 U$ t$ ff1 =
8 m0 \$ r. R" r4 M& ia*y+55 k; L+ q2 A( m1 l4 h

$ N1 Z2 T6 s9 X1 {& s5 O(3)符号常数置换
$ v* W6 o$ J# }8 ^f2=subs(f,{a,x},{2,sym(pi/3)}) %<3> 6 H' X5 v: ^: ?) t
f2 = , I" o. T1 [* x1 D% w
3^(1/2)+55 x3 ]: h! b' X  U- V
! f; V- z6 Q$ R, O; l8 n
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
# \# P9 S$ Z6 B* Hf3=subs(f,{a,x},{2,pi/3}) %<4>
/ }: J, r# ^+ @3 y0 ?/ D& Sf3 = ( u, r1 ?/ ]6 m4 n* f3 H& [
6.7321 ; {; w5 k+ r6 m# A- _( B( {' u- z

- J; O4 q# d. p: b8 v  p(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )
- {2 v' Y1 }0 c# t' k/ O% nf4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> & M! E! w+ v7 M9 }' H* g  o9 y
f4 =
$ d, k( [& o! e" m' v1 ^5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
2 n! v/ _, A" D% U# \
) h2 y) x% K( q7 a/ K0 D, V+ }+ |(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
, G: T1 ^: q4 W* \: J7 tf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> - M: y2 E0 L( U8 v
f5 = # f4 ]7 Y2 O2 ]# t0 X$ e& B$ R6 n; U
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
2 U9 o& _! e" ?; ~* F5 p$ F& M% G
0 x9 g. e6 M4 g0 R
6.2.4 符号数值精度控制和任意精度计算
$ {  Z8 N; w4 _6 h6.2.4.2 任意精度的符号数值
2 O* Z5 h. V/ A4 A7 N7 K- t' u: \. z1 i& K/ }& x" h
【 * 例 6.2.4 .2-1 】指令使用演示。* Q9 R, Y1 \7 R& V
digits % 显示省缺符号数值计算相对精度
$ k9 q7 `9 c4 iDigits = 32 1 T( w5 h; ]/ V. C) ?4 X4 x. d
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
& p3 h3 F+ l) M( G: ip1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
/ R) }. p6 e! [) [e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
% g2 M* @8 n9 l, V% _2 Fp1 = 4 s9 g" k* @/ B1 h! ]
7286977268806824*2^(-52)
( k) \+ u& J3 re01 =% W$ u/ o% G/ V' `/ w) {5 N
.543211520368250e-16, _3 P8 O# {5 h# i
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似) E; s; O) I/ o  W* D: f8 `
e02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差  W# D6 ?0 M; P7 U6 A' a
p2 = ' }/ A9 H  J2 j# R+ A
1.61803398874989484820458683436574 o+ k* i- d0 Y" q5 J3 d* P1 d5 `$ P
e02 =6 y" V  C" M: |4 }3 X
.61882279690820194237137864551377e-31/ n" u: M2 K4 E; J
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
$ d4 g6 T% j8 rDigits = 32
1 {) q, H; y% R
- t8 w7 L2 w: Z( K9 p' X* c
( D2 q8 X3 P# B# {$ R) D6.2.5 符号对象与其它数据对象间的转换' J9 Q( w. Q( ]* V- ^: K) X2 N1 I2 x

7 z7 p7 L. e. r1 U


# f+ l& V8 L5 b6 t2 q1 z【 * 例 6.2.5 -1 】符号、数值间的转换。8 P1 G  E6 B1 g8 E
phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
! [. Y/ [, R  V7 F! r# qdouble(phi) % 把符号常数转换为双精度存储的数值
( F" K" y6 ~* H, L. a6 I; V. hphi = 0 k2 r5 R3 {3 Z
7286977268806824*2^(-52)
9 e0 l& s& J, Eans =
5 B$ j/ m) ]5 v1.6180
0 c' q. Y: t  o! [0 f
6 s) c3 k3 ]) U- i【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
8 \8 o/ M& z7 _' e, W! rsyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式% j# z, r9 k. K$ f
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量: t! Z  o7 a  n1 a: s
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式0 f! _# x! c5 Z9 `; ?' v; z" P
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式
- T/ |& \# Y& F4 h1 O2 B& R6 Bpretty(f,'x') % 显示符号多项式的易读表示形式, T& c( l6 @0 p0 h$ ?+ [9 |
sy2p =   k( J& V' @( s+ j* G
1 2 -3 5; e2 t* i2 W" t3 a+ ?
p2st =
. T. Z* R% y+ l+ }& ^. r7 ?x^3 + 2 x^2 - 3 x + 5
- @$ W2 U2 q; H2 gp2sy =
+ Q7 H9 Y$ x, F( S. n. Q1 {x^3+2*x^2-3*x+5
" ~- \6 S: J  H  b3 2- N8 Z# V. z0 C
x + 2 x - 3 x + 5

& N2 M0 b( n2 V) N
  J5 U+ U+ Y# Z! O0 P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 21:38 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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