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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Matlab 符号表达式和符号函数的操作7 w$ G+ B! b# z( C2 [

; L' _6 _# n; l- n, Y* x+ w) ?/ T' L6.2 符号表达式和符号函数的操作
3 H3 S/ \$ Q1 G6.2.1 符号表达式的操作
* ?' M1 B2 A( z: Z! ]1 y8 Q
; M0 o1 e, I, l& A0 u( [; y【 * 例 6.2.1 -1 】按不同的方式合并同幂项。3 L( H+ e  q+ ?& s" q+ k( T/ u
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); 4 i. v) ^( S  H$ h  p) A7 V; ~
expr1=collect(EXPR) % 默认合并 x 同幂项系数
2 t* {9 T; V) V1 cexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数  `0 N: z% Y2 R1 _' Z. g: Z2 b0 J; `
expr1 = 7 B* v( l  s& K" d- Y7 U
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)# U7 T' Z% |, i) Z. m8 u  z" a
expr2 =% K: Z% L7 K/ K5 m
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x" s. ^* z! q+ c# _
0 a3 W) ~2 m) ^  c7 X
【 * 例 6.2.1 -2 】 factor 指令的使用
; \3 R- X! H( W$ A4 M: i2 ](1)除 x 外不含其它自由变量的情况
1 _1 w5 Q# e' @5 p/ ~8 p2 usyms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
: G! C8 Y# O. `# U1 x' ?ans =
; o6 a6 ^$ @: Z1 O(x-1)*(x-2)*(x-3)*(x+1)% j% g4 i+ V2 G& l( j
9 J9 c( m8 x, M2 m9 {) b/ Q" U
(2)含其它自由变量的情况之一) ^1 z2 ^; Z+ O9 I  h; r$ Q
f2=x^2-a^2;factor(f2) ! m6 M- Z' Z6 C( D, K3 P4 P* q& X( [: D, v
( r- v! i+ M, L# n: ?1 H0 `0 X6 w4 O
ans = ) I3 e# u3 ^( E% J# T2 @' |
(x-a)*(x+a)4 s% M8 w1 h; p+ o1 x1 x8 ]

2 n) D4 p5 \8 g; f8 W. |(3)对正整数的质数分解& w- h) W5 t9 d
factor(1025) , t2 E6 f+ [2 n1 H
ans =
. d1 r5 G( [/ Y8 f+ r1 x! y/ b5 5 41 4 B1 |% {* A7 c% A8 y9 T+ I
4 a, k: j% P2 [
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解) }. R9 H3 g9 D6 d/ O! ?# C
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1) * g" h% O; a) {
ans = $ v/ I9 h: c* |- G
-6+(5+(5+(-5+x)*x)*x)*x, A: T; _) `% Y( m  k9 T% M

1 k; d: ~5 j2 W- I9 o【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式8 r* G0 V! T: ~( _2 N1 k
(1)求矩阵各元素的分子、分母多项式) Z4 `; r5 F( i. y
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; - o/ N; G) Z/ S2 R3 ~# \  @) g
[n,d]=numden(A)  ^: v* a' I, V/ k  ]
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
7 j! _* z$ M7 E8 ]n =
* R/ Z2 H. t& D' K[ 3, x^3+5*x^2-3]
: x+ u2 }2 y9 U; H3 N[ 4, 3*x+4]% r6 g/ [! G. L0 }5 w5 h
d =: P* @2 {' m2 l* U. e% Q
[ 2, (2*x-1)*(x-1)]
# h/ m! c" S$ I9 `[ x^2, 1]* u$ b/ Q) v" }3 f" @: y2 a: X
[ 3 2 ]3 p* z* B2 ~3 ?9 k
[ x + 5 x - 3 ]
# ?% H+ |, e5 f3 N9 v1 x[3/2 -----------------]
! a+ h$ L5 \* A* `
3 ]1 _- y5 R  |( \: D4 }) N- S5 ?* U. G) P$ y( [  B

! u/ E7 t2 U8 m  P
[ (2 x - 1) (x - 1)]
. d- j/ q( ?7 ^5 e6 o! D3 I3 b- S[ ]  J1 ]  R4 |0 Q
[ 4 ]+ N* p( _8 {% H( @' Y2 q
[---- 3 x + 4 ]
) A' W2 C+ ~; e$ M% w[ 2 ]+ Z# [; T9 E/ b3 A) ?9 Z# K/ v* H3 i
[ x ]" q2 \6 A9 e' K

" q2 I  m) b' N: M/ w(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
9 g7 z4 p. p3 g) C5 Y5 l4 apretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”. c# s% S5 e4 }( y
[ 3 2 ]0 J* n1 p; k+ x& O
[ x + 5 x - 3 ]
  k. w# `4 W$ P[3/2 -----------------]
* E' Q: g( K/ u- ?) s[ (2 x - 1) (x - 1)]
# d8 R; z( c& f8 ^: y4 B2 ][ ]
) `9 C5 t# q3 }9 {3 Y[ 4 ]8 t3 j+ ~9 Z- R
[---- 3 x + 4 ]! x3 R0 x: ?1 U& C5 ?# M
[ 2 ]8 _1 T3 t9 `3 ]$ m: J
[ x ]2 H8 N* T$ ]: J% k  A

; k; @2 N2 \( `9 t# }  P: d- Z0 R
0 d$ P* b; E! o2 ]【 * 例 6.2.1 -5 】简化
4 W8 X! c. B: A2 }(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)5 g  r6 E- {+ c! j% S/ U
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 4 Y3 r! v* M# j" V- }9 k
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
3 a; H' \3 b0 }5 D
+ Z7 i  Y! F  o' J* [sfy1=simplify(f),sfy2=simplify(sfy1)
- Q5 A; J8 k) G# g6 M+ {9 osfy1 =
9 ~5 o0 F- o1 Y& D5 p3 I/ z% i((2*x+1)^3/x^3)^(1/3)% H3 I7 {' N/ N3 Y
sfy2 =
3 {  g  S8 `1 ^: a5 V7 e7 i6 W  W4 o((2*x+1)^3/x^3)^(1/3)
, }% T% n# y& S& l8 Y& C# d
$ [9 O/ ^9 p# l+ c4 `! S! [+ t+ M(2)运用 simple 简化
2 j; A# s* `8 ag1=simple(f),g2=simple(g1)
% i  ]" F7 d; V( y/ Ug1 =
) W/ s: A, S- z; G0 |(2*x+1)/x- d! ~: `- G/ x. W7 p
g2 =
: ~) f- @% N- P* }2+1/x
: u3 O5 s; U7 K# l9 i$ u: V! w0 ~& B4 m$ T
# x' Z, H# J" |" W4 J/ Z& a- e
【 * 例 6.2.1 -6 】简化
. x. s+ M+ T1 x+ Qsyms x;ff=cos(x)+sqrt(-sin(x)^2);
8 J0 x+ P( k2 bssfy1=simplify(ff),ssfy2=simplify(ssfy1)0 o0 w! T* {3 z- m' m% C
ssfy1 =
) ~8 w2 O: |! C* H! Y. icos(x)+(-sin(x)^2)^(1/2)7 D! `+ f1 L; P6 h+ F: q; a
ssfy2 =
1 s5 y* ^# S7 r- `3 mcos(x)+(-sin(x)^2)^(1/2)  i  G) F# P  C9 G
gg1=simple(ff),gg2=simple(gg1) 1 g* M6 G+ G8 W( b
gg1 =
4 V' Y7 n* C( r- H9 M5 }1 H! V6 f- d& hcos(x)+i*sin(x)
' }) h( _- m: `- dgg2 =
1 \) b' O2 B  }exp(i*x)
! N' ^- L) p# }) g; t( j& S/ o% P- m. k3 U! [; T

0 y; k9 ~2 D* I, ~: P6.2.2 符号函数的求反和复合


* H2 W5 ]) \, I: f

  

' s' R! m8 V9 P5 A- H

& J, n0 F% T  W# D, q
9 A$ G+ T9 W% a; y# f' j4 M. [
【 * 例 6.2.2 -1 】求 的反函数. D* m2 u4 F8 H7 |
syms x;f=x^2;g=finverse(f) ; \, J( K2 A) J7 x6 ~  Q
Warning: finverse(x^2) is not unique.
+ R. }" F* G) t7 c> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 439 s& S9 i& ^: B1 ^6 S
g =/ J" w- v% T- m  ?5 b+ Q
x^(1/2) ( @9 R" ]& T( S, B1 C

0 a* s  N. d6 E4 i9 s; }fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x# P" H; _) @& r5 V' z
fg =
6 n6 X0 ~9 [! I+ V3 Ux
$ O7 A0 w" l) w7 O. ?1 G
. I# G) b; A3 r& T- r【 * 例 6.2.2 -2 】求 的复合函数7 m" Q5 K5 U" A0 e
( x5 [4 l  W; T/ ~9 U9 s! [
(1)自变量由机器确定8 J% X! r% @% g, f' Z8 o
syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
- Z- D2 f4 s( h+ Jfg1 = : B5 _0 U4 [! W3 f
cos(y+fai)/(1+u^2); f+ D' w7 Q, E4 u) n$ b- P" A

6 J% d3 O  @9 A. T. E" T' ]) f(2)指定自变量4 t: Q# S9 Q( m
& F0 L" W& J" G# ]
fg2=compose(f,g,u,fai,t)
4 K) s% {) B$ m6 l" qfg2 =
& `( T: ~/ y# }2 M$ B4 [3 ~x/(1+cos(y+t)^2)
  p1 J* B3 x8 |3 |; p  y8 j# n4 k+ k) L" n( ^, Q. D

2 A  w5 U$ N: V* L% d, U6.2.3 置换及其应用
' Z) e8 ?& h( V' e6.2.3.1 自动执行的子表达式置换指令% Y' z7 P: H2 n
& d( X# a+ `# O1 G
【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。3 Q6 l% u6 [7 f
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
4 J1 B, q6 d9 i/ |; i* W' `7 v) q/ T[RVD,W]=subexpr([V;D],W) %<2>
- C1 `! L1 O' ?) }) R$ \RVD =
5 C! u1 `' N  E% t4 ]) D[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]8 Q! w0 y& g- D* K- [
[ 1, 1]& U: T4 _6 S$ J5 q
[ 1/2*d+1/2*a+1/2*W, 0]( |; H+ X3 r8 o* r( y
[ 0, 1/2*d+1/2*a-1/2*W]% ^) E( L5 c3 m
W =3 m6 r- `' ]) g- n
(d^2-2*a*d+a^2+4*b*c)^(1/2)
( M4 K. L2 ]4 _  M. S# M$ V" n' Z  y
9 l; V4 E3 u+ r& K. ]8 v$ n9 M. i0 T/ r4 q3 o
6.2.3.2 通用置换指令) H$ v  S* z. @
0 H0 M+ i, l" `' s+ k4 V' @
【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
- O2 n! ]- }4 y1 }(1)产生符号函数' b8 B+ W! W2 i4 v! E
syms a x;f=a*sin(x)+5;
$ u5 b$ n  Z/ n6 L0 G( n. l- ]8 N. B% o( ~; x. g2 L5 x7 S
(2)符号变量置换
4 F  s% \; d" D5 J+ m' u$ W! Wf1=subs(f,'sin(x)',sym('y')) %<2>   

9 b/ G9 s* ]3 N! ^( ]


5 p0 s7 T9 g7 ~2 V* b# K; w6 pf1 =
8 C& k$ t6 A/ i6 X3 n- G8 |a*y+5' h: x6 ^; ~) m9 A$ R* Y- P$ A7 p

! f- v+ k, u' {+ O  ](3)符号常数置换
* U0 G- D! k* S; ff2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
# i4 ?  z3 S6 \6 Ef2 =
( Q. {+ Q* A8 N& w, s3^(1/2)+5
5 {/ A8 w+ G$ X7 F  F* ^0 T- F  q' h9 \3 T, T
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
  `; p1 G( g) u" j1 Hf3=subs(f,{a,x},{2,pi/3}) %<4>
8 t  q: w0 l8 o6 E0 e  X0 Yf3 =
/ D: N( Z+ Y8 g3 n6.7321 ) t8 v2 O" |2 \3 [6 T  b8 a- F5 D, Z
* y' m% T7 }. G1 A( T1 x: s
(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )+ C0 d8 A3 x7 D4 A/ K
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> ( I. c9 {1 x+ h, [
f4 = ! V( l/ V. P4 t
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 & y) W9 Q. d$ N* K: V9 @( _
' g" |, V1 ^) D& g. ]) Z
(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
) x" v( v* w8 }3 @" l3 U0 Q7 Yf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
1 H9 Q/ T; [4 q5 w  h! ]; Jf5 =
* c4 h: ?8 q3 L5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000/ s/ \$ Y; l8 N

" @! G% |! A0 T) L" _1 c# v" B$ |) b% d- Y# j& T
6.2.4 符号数值精度控制和任意精度计算
/ v5 ?5 i3 m. T$ x# |3 [+ C6.2.4.2 任意精度的符号数值# ^' R5 S& l  ~* Y6 f
; ]- ~" s- X2 a/ [4 n4 D. ?( o
【 * 例 6.2.4 .2-1 】指令使用演示。
6 n& W1 p" V: ~, [; J( Jdigits % 显示省缺符号数值计算相对精度
1 t, i: n+ A( O( eDigits = 32 $ j& K' t( K" X
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
+ T! a+ P$ V1 W$ K2 M8 Tp1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
% O$ R2 M5 x9 t& v5 H, Me01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差: T( Z* b3 j; w6 `
p1 = 9 `$ J# l/ c- U) ]
7286977268806824*2^(-52)8 ?( t: {4 T9 R& e6 Q1 B3 y
e01 =  ^* [, H: u. A3 V/ g: c) Z. _
.543211520368250e-16
) _% \& b+ A+ T+ L6 p8 {; O/ e8 `p2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
# a$ Z( w- J) D( X( Ae02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
; ^4 r% S: U3 g5 v, X) j# Op2 = 3 ]7 r% ]& `+ |" K
1.6180339887498948482045868343657, P( _1 |' U1 `
e02 =
" h, s3 N3 k3 ^1 c" h.61882279690820194237137864551377e-31" ^! e- R* D4 A/ C1 a* |% y) d
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度
  \; M3 E1 w( R" @% i- d  u2 WDigits = 32 2 @5 M4 X; j  S! m# R
) k% Z" c7 Q. Z0 [
/ q+ O3 u4 d8 N. }3 n6 A& s7 A
6.2.5 符号对象与其它数据对象间的转换
6 S& E  Y) S1 z' _
8 F3 Y6 Q- H/ \6 C9 P

% N4 g( i' ~& x- k8 @! ]' e
【 * 例 6.2.5 -1 】符号、数值间的转换。
4 h" x& F/ X; O% Ophi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
3 D- X" [3 E) [5 L4 Y# v2 o7 c. sdouble(phi) % 把符号常数转换为双精度存储的数值8 a8 `' u! x$ |% @
phi = ! ?( q: O$ s, R2 t. Q
7286977268806824*2^(-52)
- {3 H- l' F. |0 h" ians =
1 i1 }& `; y4 f# r6 ~( a; I( P) ?1.6180& X& `5 `6 i3 ?; a, @; O2 U
$ j& E, {$ P& Z2 B0 b5 c' T: _
【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换9 v5 j/ i( P# I, Z4 P2 h: y
syms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式: y3 C0 l# b& b% ~: u# a: P
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
: y& b% h7 g& E7 s3 @# fp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式8 l8 f! A% K5 A% p. `/ ?7 h& t" `
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式$ K; J8 V; E# v. s! n4 {
pretty(f,'x') % 显示符号多项式的易读表示形式! V5 b: |) Z% P8 L
sy2p = , B9 f, z& [, ?& X% U! L
1 2 -3 5  i6 b  {3 c/ a, d: o
p2st =
9 O  R6 Z% {5 v! p5 N; `' F9 Z; X! ^x^3 + 2 x^2 - 3 x + 5
2 J! ^' z4 c! @8 m$ D/ c: r) K- ~p2sy =2 `# H7 i+ I+ ^. Z! ?9 [" @; N; L
x^3+2*x^2-3*x+5
0 H) Y# l% v7 @( ^2 A3 2) e/ \! I) J1 o& z
x + 2 x - 3 x + 5

1 U+ o9 ], `) }0 A! b" L' Z

3 k7 ^" X# M0 s5 J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-16 02:12 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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