EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab 符号表达式和符号函数的操作) w$ o7 `1 {( H% y# l4 ]
1 q/ V/ [+ _' Q$ e" u. T6.2 符号表达式和符号函数的操作6 \7 y% }0 Y- E
6.2.1 符号表达式的操作- |- V- B: D- `- m1 u( s, u5 g
* l" O. O+ E# l5 e# z7 J& @; q【 * 例 6.2.1 -1 】按不同的方式合并同幂项。
4 J( o7 e' d: V7 X% UEXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
% V: u, @+ j. L! q* e- texpr1=collect(EXPR) % 默认合并 x 同幂项系数4 r6 Y/ U8 D1 C H4 o
expr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数$ e9 c# x+ x* {# b
expr1 = 1 t! f* J$ ^- ]$ w# F$ f' ]
x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)
0 ~$ }) E! p Aexpr2 =
' }, i6 D8 l$ x1 p) vx*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x& }2 k0 @! N6 q) ?; n" q
+ f9 T5 Q6 @% t: K$ U/ N- C' S【 * 例 6.2.1 -2 】 factor 指令的使用
$ H& q" l/ f( A& K. i(1)除 x 外不含其它自由变量的情况" `7 v7 O7 B& {: ?# j; t0 A# ]
syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) 6 p! X2 D1 _# t" F, W
ans =
3 e- N. V$ ^6 ?& f& @8 Z6 `(x-1)*(x-2)*(x-3)*(x+1)& i0 G% J# E, S% x" A
; s: y$ d5 V0 d& g
(2)含其它自由变量的情况之一0 o, R7 Q& B6 w4 Z' F5 ^
f2=x^2-a^2;factor(f2)
6 e* h0 }" l8 e. {
4 [3 K5 P8 b& z/ a p6 S& Mans = , I) ^/ u9 s" R2 V1 N0 h
(x-a)*(x+a); r. f, m/ w. }* M
; Z. |( ~3 A: J
(3)对正整数的质数分解
+ C& [+ { j6 s: g7 Qfactor(1025) ( Z/ {# {! N- r
ans = ; w1 C- Q; f# h% d* {) [# @* W
5 5 41
* B' z8 Q5 y1 W9 j4 S
9 o1 \1 |; ~/ U' M; @9 S+ T【 * 例 6.2.1 -3 】对多项式进行嵌套型分解( M) ]& H# L1 d% n7 K8 E) [
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
- K5 G) ~+ Z* t( `! H' W# `ans = 0 W; ]" {8 I; _. V
-6+(5+(5+(-5+x)*x)*x)*x" ^/ u# A3 p3 ?
8 Y( z# G4 s- P- {8 N, \【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
) \/ J- {- d8 s- v: D( }(1)求矩阵各元素的分子、分母多项式
8 O+ J# ^4 y) ~. u4 l0 Wsyms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4]; $ o6 C, R. J: g% `) w2 Y& @
[n,d]=numden(A)$ F* M' M7 `6 p6 ?
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>3 N8 d+ O9 V" p- J
n = # H% w; e, t+ A
[ 3, x^3+5*x^2-3]% j+ J5 i6 ]! p4 v+ Z" d2 \2 [
[ 4, 3*x+4]9 e" o/ p A6 |' R& ?
d =
6 {# ?2 L8 e9 F/ Z% x[ 2, (2*x-1)*(x-1)]
2 B% b3 v" T& K[ x^2, 1]
9 j1 D- g) _& Q& A$ g6 f5 g2 C[ 3 2 ]
" c- {9 K+ u0 H$ J[ x + 5 x - 3 ]5 G9 I7 U8 {1 {9 B) d
[3/2 -----------------]1 w( |2 L9 U- a0 z9 n
: r \3 }8 V3 S0 z: [
?9 N; ?5 f7 p. P; O
) i1 X# h H ?) e$ h' u[ (2 x - 1) (x - 1)]/ w1 E3 g+ e! S3 P# c% }
[ ]* K. ]# U& I- q: A, E" m7 c. S
[ 4 ]) y' f2 I/ k2 {7 e' w' h, o
[---- 3 x + 4 ]; g# }, m& q- v. ]
[ 2 ]
( \: S9 a, U4 }, A; G[ x ]' t. [- d+ M& K! B& ^
4 ^* D1 [6 j- } d
(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。
8 s) y2 R, B4 npretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
/ t' q( `+ {8 \2 y[ 3 2 ]( l% j0 A/ }4 w6 s8 o; W# I7 q
[ x + 5 x - 3 ]
2 Q5 b9 q" _5 U; v" h }[3/2 -----------------]
. d/ _1 Z2 o' y# b' S1 C[ (2 x - 1) (x - 1)]6 S( H4 j+ `- o- B8 z
[ ]9 _7 H/ I' P0 l6 G% Z
[ 4 ]0 q- Q' {6 u ~7 L
[---- 3 x + 4 ]7 }9 ]* a; w) |7 v* Q! Y3 C" U
[ 2 ]1 A5 L$ E. r+ h
[ x ]
) a/ `8 ~' t( Y' L" O1 G( F) D$ R$ P6 O# |9 y8 ?
2 Q' z$ H9 r5 S* b
【 * 例 6.2.1 -5 】简化 ; Z" ~- [ E. z1 f
(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)3 e1 W) E& n" v( i+ I1 g
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
9 F( B4 ^6 p) L* l计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
. }9 z& s$ f: A& T, k0 Q( i; B5 g' i- `# Y& Z3 y
sfy1=simplify(f),sfy2=simplify(sfy1)9 ~! _4 W5 Q9 H9 e9 {5 }
sfy1 =
' S* d: F6 z+ u((2*x+1)^3/x^3)^(1/3)* z4 K9 c' n# b, b' H9 [
sfy2 =
4 k: f# S+ E- z1 p( K+ e4 g((2*x+1)^3/x^3)^(1/3)
0 J: K" t6 ~# U$ |; l
! m" E- a/ B& u+ P(2)运用 simple 简化, e7 D8 _! R5 s
g1=simple(f),g2=simple(g1)
: b2 M6 v+ o6 d! fg1 = 1 c ?7 e9 z0 \8 `; h* T5 Q5 }
(2*x+1)/x
, V. Q& ]# i( T3 |. Gg2 =8 L+ B1 [" S/ T
2+1/x
m; x* i( |' O3 F: X F# i1 W
* Z- P. K- G+ s9 J6 b1 k% t
& j. w3 y' o' X8 e* x& y; o【 * 例 6.2.1 -6 】简化
+ R8 x, F1 L) Fsyms x;ff=cos(x)+sqrt(-sin(x)^2);
2 R6 d9 X. q3 d+ m; {5 ~2 Cssfy1=simplify(ff),ssfy2=simplify(ssfy1)
4 H8 `1 g o9 j! a! f5 o: W' Yssfy1 = 8 g) a- m$ V. b' g
cos(x)+(-sin(x)^2)^(1/2)
/ G1 a& m4 r4 V' x2 p/ |1 Cssfy2 =
2 Z( k3 U0 w$ ?: Z% r3 U$ acos(x)+(-sin(x)^2)^(1/2)5 @; C# D+ J; h5 p5 k: T7 G
gg1=simple(ff),gg2=simple(gg1) / a9 \# M. b, n* P4 D
gg1 =
, \% u2 S, c& A! K& ]7 h9 Ucos(x)+i*sin(x)
: e- v- G$ U- Bgg2 =6 }" j7 C3 [, p- [. r5 w
exp(i*x)% M$ E' v( \- j+ y
* ?/ j. h/ x6 ^2 ]8 k" q7 X
j `1 D; L) \6.2.2 符号函数的求反和复合
4 J. p: [ s0 f1 n7 D! s% n3 E S$ [
+ [$ q5 V( z% N$ U+ b8 i- y: k- z7 q: K R# ~. i+ I. q
; X v6 V; _3 }4 i; Z
【 * 例 6.2.2 -1 】求 的反函数
; C2 z, B3 r" ?( I Z' f$ K3 Jsyms x;f=x^2;g=finverse(f) % X6 j, g% {7 M8 c
Warning: finverse(x^2) is not unique.
; N# d9 Y/ y' L* ]2 J) o1 L/ \> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
) V. y6 o' B5 R# l0 J, vg =+ o3 X1 U. ?: z' I
x^(1/2) 7 C( `1 H( N; p$ c! ~
4 a) W' e) i, n8 G, T6 P$ T
fg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x
+ K) F1 g# Y- j* K% \fg = ( K' K ^$ B, `3 }: I7 @4 a
x 5 w8 }4 C) d+ U% j
' {* G: m, @6 a8 e& O
【 * 例 6.2.2 -2 】求 的复合函数
$ _' I9 P# w: w# b, c, E/ n. Q
# z2 f' P9 H3 E' G6 \8 X2 W(1)自变量由机器确定
0 a" s) W/ X- [syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
) A3 w) X" f4 y [$ ~6 E' A; hfg1 =
# ]) s8 f8 w0 m! scos(y+fai)/(1+u^2)0 y6 A( U; G* c2 y
3 X, {2 I2 k; b) F' P0 W: M$ _
(2)指定自变量
; U: w7 t, k+ V- ^! t' O! x5 W+ b; f
fg2=compose(f,g,u,fai,t)
8 @* [9 P- u. o1 H/ kfg2 =
- o, n4 y! d0 w; P) Px/(1+cos(y+t)^2)& w z5 }, `0 R- L% K( ~
- R9 _- e# V" f. M# T" H' H/ E0 B! u- {; K; p
6.2.3 置换及其应用9 p1 e1 J/ r& b' Q% e
6.2.3.1 自动执行的子表达式置换指令$ v- T5 N4 f1 ]% O! e' ?1 u
: k9 Q8 w, p: |" g* Q" N) f9 U【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。( V" u% a' T. _ y2 ~& R
clear all,syms a b c d W;[V,D]=eig([a b;c d]); ! D3 l3 q0 L- i" P# ?
[RVD,W]=subexpr([V;D],W) %<2>
1 o( ]! R4 l1 C' x7 g/ O8 t# q% sRVD =
! t6 M5 ]3 ~8 a5 ?* X1 i' @" j[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]9 W% I3 X7 J; \$ S! a9 K) N
[ 1, 1]
8 Y8 L [" D* o2 e[ 1/2*d+1/2*a+1/2*W, 0]
# D! r; t! [1 {3 m: w, e; k[ 0, 1/2*d+1/2*a-1/2*W]! L t- j. d9 g: S% a! |; K
W =
: P/ U6 E) ]9 s+ n" Y$ _3 Q3 X/ M(d^2-2*a*d+a^2+4*b*c)^(1/2)
5 u. S& u+ V+ g8 w
5 C' h& f: v: P4 S3 K( m3 H. ?
( \% ?8 f5 }' L2 q& O) f6 n6.2.3.2 通用置换指令
! W. n# {6 v8 t- O
9 B7 q: V5 t# Z【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
, |5 v; C+ Z5 a! n(1)产生符号函数
5 Z1 b5 @( w$ P2 d+ w- n! Vsyms a x;f=a*sin(x)+5; + l6 P, X8 ~9 ]2 y9 k1 k
* \: ~6 b5 Z- g(2)符号变量置换
/ k4 T2 S' Q! F' Z1 K! Ff1=subs(f,'sin(x)',sym('y')) %<2> 2 G/ b) |% z5 g( R* X
3 ]: ~0 K) q, ~" t1 ?
f1 = + H! t' ^) j% c \" C1 F' F4 [
a*y+5
; E$ [; @/ M5 y, n0 @0 s
+ m% E9 \5 Q3 H' }( ?6 D! R(3)符号常数置换' O N, D7 H' j- W* R9 L
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
8 J1 f" T) Z6 C' t* h: ?f2 = ' L- l, L6 z# ]7 t! I
3^(1/2)+54 ~/ G2 ?8 a& ]) I% f6 V! u+ \1 N
" }3 A2 s2 n8 [" f$ h
(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
3 K2 O& c# O- ]7 L, Sf3=subs(f,{a,x},{2,pi/3}) %<4> , ^4 V' r6 O: F% q0 Q
f3 = - p: v4 _( w6 g p8 r
6.7321
* z% y0 S0 t3 l& o
4 x! ]' Y7 g3 ^! {(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )7 G5 x3 i8 C$ U4 X% h
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> 1 a* w+ A+ W# [2 A
f4 =
, M/ P: \( x5 P+ A5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000
{5 J% H! u. w* P C; k1 P
) N' a) x1 B m(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
# l a+ a3 b( |% d$ cf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6>
5 _* A) W$ Y ]( k& mf5 = " s( F' P, R; {0 ^& j% M
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000; z" e# I) }$ m M" Y
, ~' ]9 S) D5 f. x$ }$ E f5 b
( W/ U+ Q3 u' K I. g$ E$ D6.2.4 符号数值精度控制和任意精度计算1 L- K# [6 I) n. {
6.2.4.2 任意精度的符号数值
: H5 [. O' ?9 T$ Q$ s7 x/ Y, K8 e9 [3 |
【 * 例 6.2.4 .2-1 】指令使用演示。$ A+ c" T' J3 R
digits % 显示省缺符号数值计算相对精度
4 J4 |% z& E/ e9 }% S2 CDigits = 32 & c5 h J7 I7 _$ `& P" J
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
. W; O! K, ^. r+ X. m/ ?p1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值2 I! Y2 N1 j1 X! b" l" \. F
e01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差8 s6 j* O" }. [/ L8 l
p1 =
7 o) Z# z3 }3 y3 R$ T, f7286977268806824*2^(-52)9 S6 m; b! ]2 f! W0 e9 i8 s& T
e01 =- D# ]# w/ j4 F6 G8 r
.543211520368250e-16
* ^' g( O, I8 Vp2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
+ D* w$ g" P! ^, k$ Q( Re02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
/ q) {! n- D* r( [- q8 fp2 =
4 f0 ^: Z+ o. C d1.6180339887498948482045868343657
1 ]( o- u% L: }$ I4 Le02 =
& ]. J. O; ~! n g7 ].61882279690820194237137864551377e-31' D: }& E, \4 e$ `
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度# J! {1 ]" H7 c4 d, C9 e
Digits = 32 O! ]8 O5 J! ~, u- _
* X8 d' e! @/ y) {. o5 T
+ r% o5 z8 n6 i. t0 O' ^6.2.5 符号对象与其它数据对象间的转换
9 v2 b5 J7 W- Q+ U' v z; v d c }1 w8 P
0 ?$ I; q4 B) i3 T
【 * 例 6.2.5 -1 】符号、数值间的转换。
+ a7 U8 Y& {; h! D: vphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数
9 X' m8 c+ G% V/ a5 H* {double(phi) % 把符号常数转换为双精度存储的数值
" @5 ?" O3 t3 N1 R3 P; `phi = 7 `: n! y7 V1 t- m+ l7 u
7286977268806824*2^(-52)+ ^( Y; Z1 b" }, z4 t" e- n
ans =
) G- H" C4 q. s$ T) @, V1.6180
3 J( y) h1 I! ]1 F0 B) ^) D- u
: m$ @. i. M8 w! D( I3 Q! C【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
6 n4 e# L: t. X& ^/ O Hsyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式
0 U: d4 P, C2 x- z4 Wsy2p=sym2poly(f) % 由符号多项式产生数值系数行向量. g( t& M4 ]# {% Y% f% M
p2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式7 C4 y5 z" C8 v/ g7 E
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式
~, q/ I: g6 i7 Mpretty(f,'x') % 显示符号多项式的易读表示形式, ~4 {: D& t# x/ h# r o& ]
sy2p =
. T( G1 W: j+ z9 C+ x1 2 -3 5
# W; C a& l- hp2st =
$ r/ Y. j9 e2 ox^3 + 2 x^2 - 3 x + 5* E7 F+ S7 _! j
p2sy =
( S7 h" r# p* H5 q8 `x^3+2*x^2-3*x+5
! M6 P; n7 E9 B; j7 [- d, {3 2
% d8 W3 n- s& z4 g2 Z; px + 2 x - 3 x + 5 ! m" j3 b4 S3 h3 U: \% q! ~
- s9 } i4 {3 b5 s. i+ E |