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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Matlab 符号表达式和符号函数的操作; o9 P7 e; K  Y9 n

3 m% X, i) z, l3 A% m1 |* b, R6.2 符号表达式和符号函数的操作2 t# J8 b, ^# N" g* ~. U" w; J
6.2.1 符号表达式的操作
9 K7 t4 j3 Z. u6 W' q- U6 u
7 G, y3 q/ E/ @8 D( P7 q【 * 例 6.2.1 -1 】按不同的方式合并同幂项。' F" |0 r2 Q) @0 F7 J5 z* [
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
9 h6 p$ B/ j& R6 k  n; e4 H  L5 u$ }/ Sexpr1=collect(EXPR) % 默认合并 x 同幂项系数5 w& F/ X& Q+ G7 m% Z5 L
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
% v7 S  k4 q! |! S7 T$ }expr1 = 7 r' i3 \  ~0 C" _* [
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
* X  D# r* v2 dexpr2 =
) y7 [5 A# n" S/ ?x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x$ e0 v" ^* I% w- z8 s
) d6 Q( A; g" p3 e
【 * 例 6.2.1 -2 】 factor 指令的使用, }* b8 z3 ?9 k
(1)除 x 外不含其它自由变量的情况
$ c* X8 t  [0 T8 h* qsyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) % `9 F2 S5 N: i- }- l9 g
ans = - p5 x7 y; C9 a- R3 I" ?: _
(x-1)*(x-2)*(x-3)*(x+1)
3 O1 m% {9 j( Z7 a* m3 }
- [- ]! S7 E% s( q5 q' M1 Y; B(2)含其它自由变量的情况之一
, x7 R# J9 y, ]f2=x^2-a^2;factor(f2)
$ b+ W" n( w  n  T  c* v+ F
/ z# o7 V4 n1 P0 l" V6 `ans = & u( I8 r0 {; Z% G0 p7 U
(x-a)*(x+a)
# q: M; }) [$ }; a' L& O) R8 d( j" I# L( h
(3)对正整数的质数分解
6 H0 C9 n6 M. E$ ~: W3 |factor(1025)
" F0 s# T7 A/ t( Nans =
3 W. F/ L  C8 Y$ |* O5 5 41 ) R. x3 d/ [6 M$ o

  R4 Q0 v/ q* q5 y, E- C【 * 例 6.2.1 -3 】对多项式进行嵌套型分解
. N* ?5 l% f9 \clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
6 T) ^) z* a+ M$ A4 s. b6 ^7 hans = 1 T2 U* Z  j. A6 D# Y- P3 O# o
-6+(5+(5+(-5+x)*x)*x)*x
# H3 M4 Q  K; n( t$ @& h, p
- h3 i' ^6 [4 J: `【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式1 r: n: U! @4 B' T9 U; e
(1)求矩阵各元素的分子、分母多项式
# A( J! i" Y: ]" B7 O0 osyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
$ ~3 ^# Z( ]( p3 A! c# d# Y[n,d]=numden(A)
8 b; p& d5 |* e8 E, Bpretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
* i0 g- m: _- Jn = - B+ }. z& |- ~( j" P. l5 P
[ 3, x^3+5*x^2-3]  {! ~+ w! ?2 L
[ 4, 3*x+4]1 }8 m' |9 Q5 D( h* \( F
d =
' }5 W# _3 C1 L" V- g7 X[ 2, (2*x-1)*(x-1)]* L3 E( C% d1 L, u+ F4 s
[ x^2, 1]
: Q; E4 @& ]/ _6 J[ 3 2 ]
/ C9 _2 c& k0 F[ x + 5 x - 3 ]
# G" a- q' U7 N3 o2 w) o2 U[3/2 -----------------], e$ |5 d: U! ?& q

3 Y8 s! \$ u4 e6 \3 C+ C
/ }0 U9 a" S, x4 v# G: f/ K


5 X! e. ~& v3 ]% K- d6 O[ (2 x - 1) (x - 1)]
. a( \& K( Q4 N4 u) J[ ]
% L* d2 i3 K$ ]8 b% a3 \' c$ s[ 4 ]
4 N/ P/ {# D1 A) |' |/ ?[---- 3 x + 4 ]
: ]) V7 G* y3 _. {+ v, N. c[ 2 ]/ Q6 d9 _. ?' s6 A9 b" X
[ x ]
% \  T4 i: I3 G! Q) Y# s& y' N9 I8 e" H* D
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。4 S( J% u9 t# k8 i2 g
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
; u8 |& ]3 @6 ~7 f- d[ 3 2 ]
, T/ B. K! i* }* J, I- B. W6 |8 n[ x + 5 x - 3 ]
/ {' P/ K# v( X0 f7 j' i7 T# V' t[3/2 -----------------]
0 O% b; J: J$ h; y8 O[ (2 x - 1) (x - 1)]
! |% h$ t' j3 s* Y7 H( `[ ]
! ]8 u" O4 E& Z9 U2 N" r2 S. Y+ T  v[ 4 ]
5 y3 |; l& b3 O5 M8 |/ \[---- 3 x + 4 ]3 I0 m; }' n  {6 ~6 ]) s! E/ F
[ 2 ]( L8 e5 W/ k9 f) x
[ x ]/ [2 y9 f* D; i/ u  w9 ^  h" }

+ p. B& O4 a9 s! g0 o  X( n
! w. Y0 _0 r" l; P4 r7 n. n【 * 例 6.2.1 -5 】简化
" k+ N1 \& r4 Z& e7 q(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)
& h4 U- R: Z; n5 D! z3 k* P0 `syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
/ ?+ j& x& L9 L( d  a计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
* J2 v, N- [, k* n4 f1 |, U0 V0 @- f1 M/ T8 e& B8 B, r
sfy1=simplify(f),sfy2=simplify(sfy1)
: ~) Y2 e: E  k9 ?. |( S# Csfy1 =
* M0 ~5 M' G3 U' r! O4 B((2*x+1)^3/x^3)^(1/3)
, j# R) S( s; F# o) Vsfy2 =: t1 D3 @+ R6 j8 ]0 h* S1 y
((2*x+1)^3/x^3)^(1/3)! X. c$ }+ r2 R3 k" Y
! o! P2 S" J8 P2 ~/ V4 L+ ?
(2)运用 simple 简化
; H3 D  m  o* K/ l; h+ P0 e: ug1=simple(f),g2=simple(g1)
) `# t9 ~2 S$ N! r: F  Z. R0 sg1 =
$ r" G4 t4 N$ M. g(2*x+1)/x" j8 m- Y8 {5 m0 r: r, |1 ^: n
g2 =
+ Y  a0 \  [) h! ^2+1/x+ \4 I& e" v7 r6 t) }

1 `: ?! z9 `# e0 z* {- E. j2 s
$ I  d$ [6 g: _0 A9 s/ e【 * 例 6.2.1 -6 】简化 % G+ D( I- O' ~. t: M. x! h* U
syms x;ff=cos(x)+sqrt(-sin(x)^2); - G! E$ I. Y& L4 _" I! ]8 B* w8 |* K
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)- e2 F1 L# n9 c9 i0 R' ?* w# {
ssfy1 = 2 h2 \4 ^! p- e5 _7 |
cos(x)+(-sin(x)^2)^(1/2)) [0 E: r8 A8 [. y8 n' p& d, q
ssfy2 =% X) d( x" t8 d% w! S) C7 p
cos(x)+(-sin(x)^2)^(1/2)( K  _6 X! P, L4 x+ F
gg1=simple(ff),gg2=simple(gg1)
" s; T6 a$ w+ @gg1 =
4 b, L; L( E! q# V4 |/ \! gcos(x)+i*sin(x)4 Z! s$ \. H; G8 v& v
gg2 =
1 q" ?' Y2 u% V  g, L3 ^' oexp(i*x)
6 h% F' {) l( \
4 I9 ~6 l  n' ^- o  l0 t- T1 N
9 k7 W$ K* ]' z# W  `. v, {6.2.2 符号函数的求反和复合


0 ^: B4 z* i% P& U

  

7 C* _7 F' O" P3 m4 Z% y

9 \2 [- V0 f& Y  _; S

* g8 k6 G7 V# T【 * 例 6.2.2 -1 】求 的反函数) a* D1 p+ `' m) b' q
syms x;f=x^2;g=finverse(f)
6 n3 M2 H! n- _0 }1 P& VWarning: finverse(x^2) is not unique.
- _: M. r3 O- t8 z# f+ w1 i' k> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
7 ^, Y6 x) W3 l& ag =: z8 L& m* T, w. ]
x^(1/2)
% A" Z, j2 Y( L( ?0 H, n0 V. w4 A1 @2 w) T; S5 C: s% r
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x4 X- c$ F5 g- b4 i( @% ~0 Q- m6 [
fg = % ]. t9 e$ G) P, d) c, |' {
x $ |8 U, f# R3 \. i$ t. Y
/ x& Z/ s4 r5 z
【 * 例 6.2.2 -2 】求 的复合函数2 B& e, z2 G6 b: E4 {

- Z5 @1 [7 G: Z" x$ |, b6 F; O(1)自变量由机器确定
. u, u+ V3 z' r1 K, a3 n# ^syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g) 8 O& M8 M) u, A+ i' M' n! a0 B- t- b
fg1 = 0 f2 r/ X# u1 S
cos(y+fai)/(1+u^2)
# S# e8 x: X; {! c
* v/ U3 Q% z3 n1 z) m(2)指定自变量( a8 d" Q$ _% j, N, F+ U- G4 @8 t
) R7 C  g1 z. }, F( G  _
fg2=compose(f,g,u,fai,t) , A3 C# f0 |5 w( l
fg2 =9 [$ {5 n/ q" Y/ t9 g: V  L
x/(1+cos(y+t)^2)
( U5 ?3 y; i- B0 C. O7 ~5 `: |* N; ^' _- O

( d) z9 g) `& u9 ^# b6.2.3 置换及其应用1 E" H1 u8 R3 N% r$ \! r# Q0 U
6.2.3.1 自动执行的子表达式置换指令1 Y7 w' [# X/ i, I+ a

5 y) A+ H% d) i$ h【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。
1 U% i0 N- Y: G/ d8 ~* q/ y0 Tclear all,syms a b c d W;[V,D]=eig([a b;c d]); : a/ s# T0 `! ^- G  [4 }7 F
[RVD,W]=subexpr([V;D],W) %<2>+ H$ N1 O8 D0 Y: l. T3 k+ A; V% B, m- |
RVD =
2 C. Y# W5 s0 w- Q" s[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]
0 U7 U0 T( g! Q[ 1, 1]
7 Q  p1 A7 ~: e0 j0 L[ 1/2*d+1/2*a+1/2*W, 0]  M8 y  o# Q4 X: R
[ 0, 1/2*d+1/2*a-1/2*W]
/ S& E* c# p: A3 F( _) EW =9 v  z' `  k+ i  C
(d^2-2*a*d+a^2+4*b*c)^(1/2)
7 k) W1 ?0 b1 z( s- }/ P+ V: i3 B. l- p5 P  ^" P3 Z; z" p
6 y; @+ A" a% K3 B
6.2.3.2 通用置换指令
: P, Y1 K3 c. C
- R1 }9 R) w, _# {0 P- n) M8 u# I【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
' s7 r, R1 L! ^$ @8 Z. @% ^# d/ Q(1)产生符号函数9 J6 B- c" J# t$ u
syms a x;f=a*sin(x)+5;
$ j/ M  @: _8 Y1 g2 f. [6 [; m
% b, S. Q9 X! C: i(2)符号变量置换/ q, u% |+ q) i/ d. E) R$ C% j
f1=subs(f,'sin(x)',sym('y')) %<2>   


- k" m) k4 g( `2 ?, R! T

* ?9 g& e3 q5 h- V% O0 X4 w
f1 =
6 E+ T# l- U) n. v4 s5 m8 q! s$ {4 e6 ya*y+5
# ?5 n: E$ e. Q! l7 x: T9 ?, w2 |0 I1 ^) }$ e" }& t2 }& F, o+ w. c$ B, q
(3)符号常数置换/ Z3 `* \: G! z
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3> $ L8 P! Q. q2 K7 _7 V. P- u. m" G
f2 =
/ |' c# ~) Z& o& a& T3^(1/2)+5. H0 S# j4 @+ ]: f3 D7 Q! h

+ I) A1 X+ G! B" ~) T(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
  Q& [% |) u, n' lf3=subs(f,{a,x},{2,pi/3}) %<4>   f2 j6 n) {# L  [5 Q
f3 = : e; J1 K5 s5 D, ]
6.7321 " }* L2 ^* S$ X8 a; P# j
7 r' U) e* x3 U/ ]- {
(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )
) }1 |. O1 ?0 Zf4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
$ Z0 k% H# T" vf4 =
8 J! `+ |) l; Y5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
0 j. ~. O; @# m' T9 ~
- a' ^7 Y8 `+ s7 \& a  B  h3 H(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
- x9 D% N# k: ?0 ^6 \/ P) i6 mf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
# B5 k8 ^& a% t" m1 F1 tf5 = ' z- u8 @' |. H0 B. y
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000
7 q$ w% r2 P* p$ Q, W' s! U+ y# J  z6 n" e/ m1 ^5 \: [9 a
- n6 ]7 N  m" m
6.2.4 符号数值精度控制和任意精度计算
& x5 h0 _2 \6 ~2 z5 F6.2.4.2 任意精度的符号数值
: M/ f0 _$ G) B1 e; R& Z
0 ~0 h$ R" _! \& i/ Q0 _【 * 例 6.2.4 .2-1 】指令使用演示。- ~4 o8 o- a  |: d& W. }4 N* @  H
digits % 显示省缺符号数值计算相对精度
4 z! A! x  m! U* z) X/ i" R6 {' M7 Y& D' DDigits = 32
1 b. W4 \; {+ o1 T) L% {! Lp0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
" e# O9 B7 v+ D3 ]& J& P* y* Vp1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
! X4 h$ t4 v4 M6 V" ?( S( De01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差9 o4 g/ v9 N4 @, \9 d3 p
p1 =
/ f0 f/ i' P  z7286977268806824*2^(-52)
$ k# n: z- X  [& je01 =" |0 ~' N: ]! f( U5 k; r; p& R; e
.543211520368250e-16: K' W; {0 m% O: n" ]+ N4 U
p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
0 T. D" d& r( ]7 qe02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差" p5 p' X! Y  [. c- t7 m
p2 = & Z% O% H. u9 @( b& `
1.6180339887498948482045868343657, I  c4 d* _3 i- I$ W8 Q1 u
e02 =
  I, `3 g0 Z2 [5 R.61882279690820194237137864551377e-31
$ b( W  [: E5 X& L; t# c' Ndigits % 验证 vpa 变精度计算不影响全局的符号数值计算精度5 ^/ y7 [8 s$ D- ~: \4 }
Digits = 32
4 i2 r; @1 H. y- j
  u' ]2 a. y  G. r$ w' F$ K
3 c+ l) b( {$ j" t, X# b& u' Z) @' z6 K6.2.5 符号对象与其它数据对象间的转换
9 G& o% z2 P7 }" ~  O/ ^: S% @0 i, e- T. V+ g7 n

' o1 y3 @9 z' f  t" d0 r/ a, a
【 * 例 6.2.5 -1 】符号、数值间的转换。
/ X9 M  Y! }! J& @phi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
/ e; n3 E) ]) o$ c# n& q: k% mdouble(phi) % 把符号常数转换为双精度存储的数值+ g- I9 Y" ^4 S# I* Y
phi = 0 W4 ]2 ~: }, q9 T, G' y- o
7286977268806824*2^(-52)9 C% j3 q( m, ?  G
ans =/ q6 G. M) d( a' z- H/ K/ E/ Z' M+ p
1.6180
: k- K0 U. `2 W4 W
2 v( @: q9 v; i6 \% n: f【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换! R$ T5 W* p4 A) E' ?$ d$ n
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式) Y; x- R. T) x9 ], A/ i
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
3 s* E% T' k! `# Qp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式
- s  a6 i# u7 K) ~, \+ op2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式& `3 K; l9 a- {9 G8 w! Q+ d1 i1 H
pretty(f,'x') % 显示符号多项式的易读表示形式0 J5 `2 g* C5 c# D& ]. F! {2 n
sy2p = ; X, Y1 [& |' o+ ?9 O8 e
1 2 -3 5
; \5 s8 q/ Y8 k! o5 M. Lp2st =
+ Y- a  Z, ]- d3 Ux^3 + 2 x^2 - 3 x + 5. Q4 j) I$ x. O: C  i
p2sy =
: R$ T: V& T5 g, F, yx^3+2*x^2-3*x+5
: u; q# g& b+ x  C$ ?5 |3 2) H% ^( s( K4 z# x
x + 2 x - 3 x + 5


* @, _6 ]# w$ x5 p7 r) c& o5 [1 X* F+ ~2 s8 X* W9 E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-14 05:55 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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