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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Matlab 符号表达式和符号函数的操作
2 Q* C0 J+ W% v- e" H
' N. p  W, L! H) W: c
6.2 符号表达式和符号函数的操作4 s1 J4 n# ~8 C' l& ~5 e6 M
6.2.1 符号表达式的操作
. d9 \# o. ^) w8 A+ j/ y& ~% @4 V. L; {! D
【 * 例 6.2.1 -1 】按不同的方式合并同幂项。/ f- Z6 `, X: K& Z, ?: Q
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
$ x* W  z  @* J8 |8 i! u' @$ g5 a; T, Jexpr1=collect(EXPR) % 默认合并 x 同幂项系数
8 i% E- ]( s4 N6 e3 zexpr2=collect(EXPR,'exp(-t)') % 合并 exp(-t) 同幂项系数
; F; u$ n! h9 ]' V1 S/ n+ n7 fexpr1 =
  Z9 s# S# w' W. U# i; g# |1 Bx^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)( j1 Q3 K' r6 m
expr2 =0 W% L) ?3 X; [0 D/ i
x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x1 l+ o; Q) a2 o" ~+ ^) z1 b
; X) ]( k& G1 o, A! W8 v; h% y
【 * 例 6.2.1 -2 】 factor 指令的使用
2 i0 V+ T  X& c! F; E(1)除 x 外不含其它自由变量的情况
# j/ N3 t% a$ V" ?syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1) 9 F- x8 \7 y1 X: ]
ans = 0 s9 B4 x) j; V
(x-1)*(x-2)*(x-3)*(x+1)
( K; i" m" R* o% {# O2 W' F5 k3 C" ]
(2)含其它自由变量的情况之一  _; l1 z  u, Y  r- a7 `
f2=x^2-a^2;factor(f2) 6 g, W. q. P: l9 W

, Z( c! F$ r$ `' ?. c) t% z0 cans = ; K- W- `& O" R0 Y% B
(x-a)*(x+a)
7 j7 F8 C* W0 M
; b: F) h4 o) V(3)对正整数的质数分解$ P8 `/ r/ y+ D# W) y/ u
factor(1025)
5 r$ Y1 P- y6 H8 nans =
* e  H0 H: d6 O5 5 41 * ?* y1 Y+ F% b/ v2 P, ^
+ p9 ]0 h8 v1 D) N
【 * 例 6.2.1 -3 】对多项式进行嵌套型分解0 W8 I9 u; Y) S1 n
clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
* J$ l; z$ V8 W2 g# Dans =
- a2 j6 ~3 }1 \% s9 K  G5 Q-6+(5+(5+(-5+x)*x)*x)*x
" E) }  R# v4 X( x* A+ X; g/ b& h# a8 s% `7 ^. w3 m
【 * 例 6.2.1 -4 】写出矩阵各元素的分子、分母多项式
$ r: c7 ~" b. |3 u0 g(1)求矩阵各元素的分子、分母多项式1 N' U% K, b6 }; [6 N
syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];
) m+ t0 T: z& D- V[n,d]=numden(A)( u, }: U- b  Q) s1 k* I3 N! ]
pretty(simplify(A)) % 为方便阅读而设。请用 simple 代替 simplify 试试。 <3>
7 z4 ^) R+ B. G1 ]+ S, wn = 5 N7 T. |& H& N
[ 3, x^3+5*x^2-3]4 k) U2 U) P8 K" a4 l! ?' e  R! ]! ~
[ 4, 3*x+4]
4 q6 m% k6 L" u' u* `& c! a1 zd =
  w8 l9 C3 ?7 d5 T0 g8 e[ 2, (2*x-1)*(x-1)]
, q9 M4 |8 N3 |. r+ V! k* `$ Q[ x^2, 1]: E2 Z  B9 C) G  P
[ 3 2 ]% D; G# g4 j3 T
[ x + 5 x - 3 ]
8 i- B( v5 T2 ]2 x8 |+ s# c8 |[3/2 -----------------]
7 R$ o, I# z) ~4 X
5 I- {  M, N/ c, l( I
0 c/ q# f( P: K. g8 {, ]3 X1 w


3 ^0 \5 c, z. x" l[ (2 x - 1) (x - 1)]- j2 X& o- |+ ?- M( i
[ ]/ b. \8 |' @& i' g0 E
[ 4 ]7 R' Y; `4 y4 p7 {/ k
[---- 3 x + 4 ]
% ?5 z& ?5 Z2 P9 s0 V" K' f[ 2 ]
6 Y. T" z9 ?$ u4 @2 A" W[ x ]
& h3 d1 Y2 s1 i* C+ G* P
$ {- |/ X4 N$ |4 b, }(2)请读者自己运行以下指令,显示结果应与指令 <3> 相同。( Y0 t7 f" @6 b2 G2 _5 a/ K
pretty(simplify(n./d)) % 注意这里用的是“数组除”,而不是“矩阵除”
# F6 b+ [# s- |; l[ 3 2 ]
/ N" A& p8 Q" Q9 T! y. ?/ i; t[ x + 5 x - 3 ]
5 K6 N2 t; ?2 R) P6 o# d+ K[3/2 -----------------]
' x7 \  g" M' O6 c, W[ (2 x - 1) (x - 1)]
5 A1 c. [4 J2 z" \2 O[ ]
; i6 K) [- b. J3 V# J9 J) T, [[ 4 ]
! @. ]0 S" X1 W, l" w* A6 J7 S[---- 3 x + 4 ]' C. }: v- Z9 {
[ 2 ]) \# O3 B$ g' [4 a" D# `
[ x ]5 C" a: V9 J6 F, x! k2 r; x( M
' J' h) ^  v9 R3 i, a' I) o; Y1 K. H

5 H4 Q; e& K. m2 z" R【 * 例 6.2.1 -5 】简化
; A; I' L6 m1 [$ W. f' r$ j9 n  q. P(1)运用 simplify 简化(即使多次运用 simplify 也不能得到最简形式。)
) ]' \! i& s3 p- B# bsyms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 4 d1 X1 q; u* r6 a. n# G
计算机教程Matlab 符号表达式和符号函数的操作来自www.itwen.comIT WEN计算机教程网
: ^3 s* @+ z( Y! J4 F  d" k4 A5 d; I2 F# R2 N6 K
sfy1=simplify(f),sfy2=simplify(sfy1)3 F" h- B2 z' e# N7 y
sfy1 = / c: w# k1 }& w3 Z. w; A
((2*x+1)^3/x^3)^(1/3)) V% i% O2 f7 I9 u+ o% _
sfy2 =  X% B: z1 p: e4 w- F! l- \: S9 S$ R
((2*x+1)^3/x^3)^(1/3): _% F  R) c$ [# J
9 Z: D# B. t: W8 Q, ?) n% Q9 i
(2)运用 simple 简化0 G$ U! e9 h2 m  k+ C
g1=simple(f),g2=simple(g1) : E$ U6 C4 M: _7 f- _' Z8 b. `! v# F
g1 =
% q7 I: N+ l; L8 q6 `1 a+ x, b(2*x+1)/x
3 o; P/ U+ B1 m  C& kg2 =
3 p0 e, A/ G; O- S( j* b, T' q2+1/x
" g  n+ t) M& \' D
  O% g$ I$ r. e& Z$ O2 n% w. D8 i; A& u+ v& L5 Q- |, k. f
【 * 例 6.2.1 -6 】简化   v, ?* V6 M* E: b4 n: p, ~" V! Z0 S
syms x;ff=cos(x)+sqrt(-sin(x)^2);
5 @5 l9 \9 j7 C* P: Xssfy1=simplify(ff),ssfy2=simplify(ssfy1)# ?$ E% j8 @9 R/ o5 m  U0 O
ssfy1 =
' `+ A9 ]% |5 m1 Ecos(x)+(-sin(x)^2)^(1/2)
9 A8 S2 w8 @+ m: L0 l, Qssfy2 =; ~7 X; W- B8 t, @. P
cos(x)+(-sin(x)^2)^(1/2)1 ]! ~9 R1 o/ [* ~. [
gg1=simple(ff),gg2=simple(gg1) 8 i2 s& H9 O. j2 m+ `- [
gg1 =
: U& o% J( D) g( y) I- \cos(x)+i*sin(x)6 ~1 T  C; R  u- o" w
gg2 =2 k; ~1 z9 t6 u( l/ l" f
exp(i*x)% [/ y/ D  {2 A5 V4 K( F* ^
$ X0 P/ \4 h6 N# l- R1 ?

: ~/ H' X) u3 n8 y* I6 J0 g6.2.2 符号函数的求反和复合


+ R! M5 s. h; K9 B6 e

  


2 c% a$ r2 F+ X

$ o: V' t, b4 r2 A' ^( E: d! P, l
5 H6 P# p& U: ~6 S2 j9 ~5 F
【 * 例 6.2.2 -1 】求 的反函数+ G1 y! o6 k  v# p) S+ x! d! N( O
syms x;f=x^2;g=finverse(f) 7 j0 ~6 r- v. j; B! N
Warning: finverse(x^2) is not unique.
4 o4 c3 Y  m, S- G+ P6 @> In E:\MAT53\toolbox\symbolic\@sym\finverse.m at line 43
4 h5 d, E# Z# U, Jg =7 U, k5 [% J6 R) p3 H' M' {5 Z
x^(1/2)
. \$ X3 k( M" L
+ U$ g+ X& ]/ Qfg=simple(compose(g,f)) % 验算 g(f(x)) 是否等于 x: j% x) e! d8 \5 K- j8 q8 Z
fg = / ]0 t" B; d9 T
x # c9 l3 M9 b/ t. X2 d. n5 j, V0 b

/ a$ p, o$ o' l/ J5 \【 * 例 6.2.2 -2 】求 的复合函数+ `9 `. ^) |, o- z

' Q3 n% m, s. d1 n1 `(1)自变量由机器确定
  E" r$ G# \, Tsyms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)
7 J% U* N; m; e# Bfg1 = 8 H1 H# q+ ]! E* r- z" Z0 d! v
cos(y+fai)/(1+u^2)
1 Z2 w, h. C) V( o! Y2 Z# W, \. p) B5 e9 U8 m5 g; s! H
(2)指定自变量& i. {) D3 ^3 t- r* M8 `) u1 X+ Q( ]
) j  x' K3 d$ k" F! o" P
fg2=compose(f,g,u,fai,t)
) e& X0 d% r+ a9 V3 X( V5 yfg2 =$ q/ b+ y! A8 i  ~
x/(1+cos(y+t)^2)
& t4 V; \! x0 `- {' ?' @6 G* A5 o1 j
0 J0 p+ B/ a' K" \* N
6.2.3 置换及其应用- j) `5 N0 D& Y8 q; ?
6.2.3.1 自动执行的子表达式置换指令! f1 t- }4 U- l5 f- j% S# v' r

  c. x" y' |; N# V. K3 O2 l【 * 例 6.2.3 .1-1 】演示子表达式的置换表示。9 L1 B' o; q/ i$ d3 c' v/ y+ R- _
clear all,syms a b c d W;[V,D]=eig([a b;c d]);
6 K0 H. N9 v, u0 R8 {9 W, b9 S[RVD,W]=subexpr([V;D],W) %<2>1 D. E3 w* Y# p" `3 M" j
RVD =! g% R; z' h" C' V6 _0 w9 U
[ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c]
* _! |8 T3 ?  R0 L/ W$ @' X8 j* T0 |[ 1, 1]
  ?% k4 G7 U1 D/ D/ B[ 1/2*d+1/2*a+1/2*W, 0]& D) @8 ^+ X( e, P' u
[ 0, 1/2*d+1/2*a-1/2*W]
4 \2 h- I! F8 ^W =
, l+ X  i- t+ z; ?(d^2-2*a*d+a^2+4*b*c)^(1/2)0 r( S: V' l/ N/ F% L* t1 e
) h- v& @2 h# h. F! u. z# D
' r" H9 `8 m. ^$ K* q2 G3 \
6.2.3.2 通用置换指令
" V" }. B4 ]' ]8 v2 a
1 V1 d7 _% G3 M' A/ V【 * 例 6.2.3 .2-1 】用简单算例演示 subs 的置换规则。
, S+ d1 Y% w0 [, C(1)产生符号函数/ F6 h4 X! ]; z( P! D, ?
syms a x;f=a*sin(x)+5; 6 w7 u% {* Z8 p& x7 O. f3 {
7 `8 O; N6 Q# l+ g
(2)符号变量置换, C' X$ U; q5 ~+ r7 d8 g! }( Y6 g
f1=subs(f,'sin(x)',sym('y')) %<2>   


* }8 n9 g% ~3 ^" u

( H( z/ t( ]. g( H, i# j8 K
f1 =
: M7 W, Z) M. ga*y+5. i, Y) {% D: Q) I- L

4 C9 F/ J% v/ Y% G5 }1 Y3 v4 n; M(3)符号常数置换- S  ?; B4 W) ?/ f2 q5 u" Z- h
f2=subs(f,{a,x},{2,sym(pi/3)}) %<3>
2 }* J' n! d  r& C! W) m4 Zf2 = * V8 d' x, E8 D" ^
3^(1/2)+53 o1 l5 v+ q1 E  Y* H

% h) I. W$ M* g# X; h(4)双精度数值置换(即所有自由变量被双精度数值取代。取 a=2 , x=pi/3 )
6 E; n4 T# Q, V  R. jf3=subs(f,{a,x},{2,pi/3}) %<4> 4 U3 ?) W/ q1 g/ J  h6 a
f3 =
, k1 g2 x  m5 P- e+ i6.7321
5 d+ j% O2 {' O: A7 x, ]) w. J
2 g0 ]" p5 i/ [' [(5)数值数组置换之一(取 a=2 , x=0:pi/6:pi )) a) D0 b- }% T. x) j9 `
f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5>
0 _/ n# Z8 p7 C7 m9 Zf4 =   O1 b% |6 B5 y; S) A: o
5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000 * C& B6 {# X& E& g1 M

. e$ M8 ~' W/ V8 `4 d) g# p(6)数值数组置换之二(取 a=0:6 , x=0:pi/6:pi )
. h/ F* Y2 v4 w! w+ G- b! A  B( jf5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> $ f, c( u* J$ w& j0 ^! o7 f/ ]
f5 = & {3 K% w# ~5 X* U, ^% G
5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000( t% s' p) V$ i& P
7 r1 L4 h( i$ {) v
& G" s& ~* f/ J" K: J( X9 A( W
6.2.4 符号数值精度控制和任意精度计算
- B; A& n! Y3 l9 F+ S3 m7 f& c6.2.4.2 任意精度的符号数值; E! @& t. b3 R4 g8 o$ |9 a* X
; ^6 e$ T9 {9 g" i- j
【 * 例 6.2.4 .2-1 】指令使用演示。9 A' `: Q$ p( C9 m. b$ d
digits % 显示省缺符号数值计算相对精度
: B0 `9 A: N! VDigits = 32 8 P3 \  v, D) p9 S+ Q0 Q4 e& f
p0=sym('(1+sqrt(5))/2'); %p0 为 (1+sqrt(5))/2 准确值
3 M7 p8 |3 ~7 c9 Dp1=sym((1+sqrt(5))/2) %p1 是 (1+sqrt(5))/2 在数值环境下的近似值
1 M: N" F1 r* N8 o( C1 J. J  `! Q# Ve01=vpa(abs(p0-p1)) % 在符号环境 32 位省缺精度下,观察 p0, p1 间误差
2 g' R8 r3 P9 i" e- C$ g( y+ W; Vp1 = 4 s" [2 B& O9 g9 Z7 f& k
7286977268806824*2^(-52)
' q- i" Y$ n% G9 w8 U7 de01 =. E8 g$ O7 A" E
.543211520368250e-16
  k9 v2 a1 z1 K0 S6 Y8 m! u% I& m3 Dp2=vpa(p0) %p2 是 p0 在 32 位相对精度下的近似
) L* Y8 Z, M( i/ @" \  Be02=vpa(abs(p0-p2),64) % 在 64 位相对精度下,观察 p0, p2 间的误差
! s  X6 n8 J8 P7 K. w2 ^% Q6 ]! Xp2 =   c& W6 @: i" K
1.6180339887498948482045868343657& S6 b0 F: h3 ^! T- a  i0 Q
e02 =
! y' e: @1 K5 y" v.61882279690820194237137864551377e-312 o% \! Q* j) @4 S" q7 i1 ]; B% {
digits % 验证 vpa 变精度计算不影响全局的符号数值计算精度) P! G9 `5 A/ R6 Z* n" I
Digits = 32 ( ]/ J& b& k( U, O
7 ?0 R6 E* J$ P
/ }$ O3 ~6 d# G6 c7 }
6.2.5 符号对象与其它数据对象间的转换
. \9 s( ^3 ?- L9 @4 v9 b) T4 a1 h: R+ ^& `" f5 l


7 k3 X1 C' ^2 N% m' c5 y" X【 * 例 6.2.5 -1 】符号、数值间的转换。
/ x! N5 w' M" Aphi=sym((1+sqrt(5))/2) % 把数值对象转换成符号常数; ?% v: W  x; P5 L6 o
double(phi) % 把符号常数转换为双精度存储的数值0 ?- c+ |# e$ `/ v# ^
phi =
  e7 p: ~9 m# W1 ?0 ?1 ]7286977268806824*2^(-52)- ^1 E* e+ h# t! Z4 l
ans =
$ W6 G6 e' u% y: M" j9 s5 d1.6180) f& A/ {( P+ u3 x5 o  ]

8 y) X6 ]2 P* C" L$ f【 * 例 6.2.5 -2 】各种多项式表示形式之间的转换
2 r  v2 X  l* tsyms x;f=x^3+2*x^2-3*x+5; % 生成符号多项式! N% V/ g6 I8 c7 p+ G
sy2p=sym2poly(f) % 由符号多项式产生数值系数行向量
: _3 c7 O1 Q$ X+ E( `$ kp2st=poly2str(sy2p,'x') % 把系数行向量变成易读表示式5 Z; z" I) v* I9 g  O& E, b/ k+ O
p2sy=poly2sym(sy2p) % 把数值系数行向量再转换为符号多项式
- F) }8 P# B6 f4 i$ Y: ]3 tpretty(f,'x') % 显示符号多项式的易读表示形式: G0 B* f, P/ S) s, v3 f
sy2p = 9 N1 q% }9 v! Z8 X
1 2 -3 5
0 t) z3 P* o' O- a5 kp2st =
; K3 m$ n4 k$ C& Jx^3 + 2 x^2 - 3 x + 5
; E0 M; i5 v: h! N- _1 S, bp2sy =% e0 C3 y6 G5 d7 C# q3 Z
x^3+2*x^2-3*x+5
& o: Y! Q- I6 M6 B4 k: n3 2" J# l% ]' |! c. U- X5 }1 m: S/ |+ w/ p
x + 2 x - 3 x + 5

! l1 P6 H( E5 f+ q2 t
% O5 x% U& G0 n% s- y8 p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-13 15:16 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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