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

MATLAB符号计算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 cat12620 于 2018-11-7 16:33 编辑
, B3 n  p8 H( \, z; {( K
8 M! |7 h' C8 _+ ^4 }符号计算则是可以对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MATLAB具有符号数学工具箱(Symbolic Math Toolbox),将符号运算结合到MATLAB的数值运算环境。符号数学工具箱是建立在Maple软件基础上的。
/ l  V6 X* C" X  x3.1 符号表达式的建立
  r: N' z# _. WSymbolic Math Toolbox2.1版规定在进行符号计算时,首先要定义基本的符号对象然后才能进行符号运算。* Z) Q- |7 n) D6 ~2 Y
3.1.1创建符号常量
" [# O; Z2 r: K3 a  y8 F1 D符号常量是不含变量的符号表达式,用sym命令来创建符号常量。
# I$ G' b' l6 {% }语法:
; _! m/ o4 Q& |# Q# D; a       sym(‘常量’)              %创建符号常量
! P: w4 n/ r9 p例如,创建符号常量,这种方式是绝对准确的符号数值表示:
2 F+ s% ?4 G1 o% L+ w" B& U* v>> a=sym('sin(2)')# w7 e# R) P( j; f- \. b/ n1 S
a =7 `1 f: s/ X# L# u# F
sin(2)" g7 ^% y- `) [4 N' n5 S/ j9 l
sym命令也可以把数值转换成某种格式的符号常量。: M6 Z) h) m7 s" W) R! J
语法:
+ J1 g8 S* Y* c* _/ q' K       sym(常量,参数)          %把常量按某种格式转换为符号常量, @! D' d, P1 R, u* E
说明:参数可以选择为’d’、’f’、’e’或’r’ 四种格式,也可省略,其作用如表3.1所示。, |* |# y- A/ |% e) `, D! F
3.1 参数设置
参数
7 c) V, E: _' S$ Z4 n
作用
8 _" c) T+ m* ]2 V$ t
d
, A4 \4 I+ [# v* }" S8 }
返回最接近的十进制数值(默认位数为32位)
+ B8 [6 h: b* Z3 N$ G! t: D
f
2 M) p3 M: W  s" W2 @. T1 S/ h
返回该符号值最接近的浮点表示$ R% z) c, B. ]4 G& E7 ^4 t) L& d: D3 c
r
. p% {# i- Y+ h0 x* \
返回该符号值最接近的有理数型(为系统默认方式),可表示为p/q、p*q、10^q、pi/q、2^q和sqrt(p)形式之一
/ T1 w" ^4 p. ?) M7 F6 g
e
8 I0 U$ U; }* e+ d5 F( i
返回最接近的带有机器浮点误差的有理值! H7 T9 c3 o& l' ]
例如,创建符号常量,这种方式是绝对准确的符号数值表示:( Z) d, Y6 _& h7 t4 C- r4 v
a=sym('sin(2)') / K  W7 Z- X* n
' A4 {( c/ z- C% G! }9 [2 ?- ]5 ^
a =
+ b3 Z2 C8 g) {7 Y  X5 hsin(2)  
1 {+ a; I1 Z5 P
游客,如果您要查看本帖隐藏内容请回复
& i" q$ _6 {: h8 {% s# l" u) H
eig(A)                 %计算特征值
! R6 u! Z5 ^! W% E
6 S& p1 X3 ?# ^ans =1 m+ m* o) L! F+ s5 i( X
[ 1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]
7 z1 h* Y: a7 w[ 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]  
5 t3 u  y' F! C  B& _
8 o% k: m# }  y6 K3.5】符号表达式f=2x2+3x+4与g=5x+6的代数运算。
6 b* J  i( e" C5 ~& k' s f=sym('2*x^2+3*x+4') ) U3 ^4 y+ K5 j

2 ]7 P6 I# W* e4 Nf =
+ x: c+ }: x* v4 V! d9 t2*x^2+3*x+4  ! d1 o1 L6 F6 v. Y( H- F  y: D
g=sym('5*x+6')
7 t% u4 t8 L, R, W8 K" J ' w  A! K0 f' j
g =
  Q8 L- T2 q- N5*x+6  ! `2 X2 H: v$ b7 C( y
f+g                %符号表达式相加
: g- m6 |: f( k  }3 n 1 h9 X1 Z$ R7 q8 U" @& j0 {
ans =
# z3 F$ W7 B' |2*x^2+8*x+10  3 U" F* [0 `& r2 v' z& _
f*g                %符号表达式相乘
9 r( X7 @* F+ L$ H
  k+ b+ ?4 J1 z% @6 u6 Lans =+ ]5 w: U2 ~# n2 P
(2*x^2+3*x+4)*(5*x+6)  
: B; u) D+ {/ E2 a+ |3.2.2符号数值任意精度控制和运算) I6 D8 @1 J6 a$ H# ~
1. Symbolic Math Toolbox中的算术运算方式
# M4 H" v* ?8 \  }' G9 \在Symbolic Math Toolbox中有三种不同的算术运算:9 F7 \5 A' H6 j3 }
§      数值型:MATLAB的浮点运算。3 y  ~- ^2 h7 O% h% r* Z6 H4 q
§      有理数型:Maple的精确符号运算。
9 D- }: L. ]9 L+ Q& ]0 R9 o; M§      VPA型:Maple的任意精度运算。
  U5 ?8 X* R5 E7 {3 T( z. N
; M( q* K% F4 ~) K! s  m9 H2. 任意精度控制/ S5 D/ `8 @. E5 D) Q4 C
任意精度的VPA型运算可以使用digits和vpa命令来实现。
& R; I" Q* M9 K( M语法:
8 N8 W+ N! F6 I( X* N; ?+ Z       digits(n)                    %设定默认的精度" ]7 T$ j5 k8 z2 N8 b/ k
说明:n为所期望的有效位数。digits函数可以改变默认的有效位数来改变精度,随后的每个进行Maple函数的计算都以新精度为准。当有效位数增加时,计算时间和占用的内存也增加。命令“digits”用来显示默认的有效位数,默认为32位。% l9 a5 c+ I3 N( i: `' ^
语法:
& K6 P) f% g  z/ T3 p# W1 m       S=vpa(s,n)                %将s表示为n位有效位数的符号对象( z7 |/ [0 d9 N  [5 N
说明:s可以是数值对象或符号对象,但计算的结果S一定是符号对象;当参数n省略时则以给定的digits指定精度。vpa命令只对指定的符号对象s按新精度进行计算,并以同样的精度显示计算结果,但并不改变全局的digits参数。
$ i; K. c' P$ r3.6】对表达式file:///C:/DOCUME~1/ADMINI~1.468/LOCALS~1/Temp/msohtml1/01/clip_image006.gif进行任意精度控制的比较。
4 I% T3 h" B+ r6 y1 v1 B' N, z8 K a=sym('2*sqrt(5)+pi') " b: r3 a+ j/ u

- E/ b, N& L( Ca =1 Z) Z% u" x2 ?& ~
2*sqrt(5)+pi    O3 \0 p( e5 n* k" v0 l
digits      %显示默认的有效位数 : {. v# a" G7 X1 s4 U+ s7 m* J

. \# A% p# h6 @" t0 b4 x0 I
8 `0 W1 B) \* K+ C; B$ }7 ODigits = 32' W1 S# h3 I1 s9 T0 D) N; s5 t
   
4 {! A7 ?1 F4 o. o vpa(a)      %用默认的位数计算并显示
7 {, S7 }& n) C# `7 u5 d! | 5 t  x5 i. E9 u
ans =
$ z; B. A  Y, n3 v7.6137286085893726312809907207421  
; j% V2 H4 M0 ^ vpa(a,20)       %按指定的精度计算并显示
- \, G' i( N* X3 u5 Z+ O. L( f8 g8 _ 7 G" N  C. X! t+ c) h
ans =9 y* `9 h/ ?( w3 c
7.6137286085893726313  & j1 I3 S6 ^/ @9 P1 R: I( u
digits(15)      %改变默认的有效位数
. x3 h9 B+ m0 _1 k/ j, q4 T vpa(a)      %按digits指定的精度计算并显示 & Q/ c; s  t7 u7 Y& V
7 Z2 j! p: X( \
ans =
$ r5 o$ X$ ~$ n: }7 R. t7.61372860858937  + _6 a5 q2 P, Q- j# @% i( M  g

% O9 |6 p6 \* S, n* {! o. @" I3. Symbolic Math Toolbox中的三种运算方式的比较
" e- c4 Q* Y6 b( J* K6 D3.6】用三种运算方式表达式比较2/3的结果。1 C1 [) g; i. o0 Q4 Q! A
a1 =2/3      %数值型 % l1 ?& }# j0 E$ C

( i4 u3 n4 ^6 v# a" {6 Za1 =$ v: p, [  }+ I/ g; H$ O; u
    0.6667  4 f- r& J1 f  c" i# c$ w
a2 = sym(2/3)    %有理数型 , k* i9 h$ M& Y

2 n7 v/ E, L$ \" E# Ca2 =
! p) Z- \/ K* |7 a2 p2/3  
- H8 X# L# N8 a/ ?! Q9 E* T a3 =vpa('2/3',32) %VPA
) U3 a" T( l9 T2 Z1 d; n/ j 1 s( ~, j  {2 w$ H8 T
a3 =
+ j0 h! k7 x+ R% g" W.66666666666666666666666666666667  * V6 s& B. E- f& D7 D
程序分析:
  a0 q' W, E. f! _3 [§      三种运算方式中数值型运算的速度最快。
6 l! q3 q8 e& N. }+ V§      有理数型符号运算的计算时间和占用内存是最大的,产生的结果是非常准确的。
3 ]: }% k  J0 C( p§      VPA型的任意精度符号运算比较灵活,可以设置任意有效精度,当保留的有效位数增加时,每次运算的时间和使用的内存也会增加。2 r7 F/ F# V; V3 @6 Z( P6 K$ @. B
§      数值型变量a1结果显示的有效位数并不是存储的有效位数,在第一章中介绍显示的有效位数由“format”命令控制。如下面修改“format”命令就改变了显示的有效位数:
* i6 E# |* H3 N2 r format long0 f4 S) \  m! z) b/ K- W
a1
9 Z* n! U( q2 A# k 6 i; t/ c* a' t
a1 =
' k. l" w# }& J# k" e   0.66666666666667  
  V# e. H1 W. d( q* m" P& q' ~% A3.2.3符号对象与数值对象的转换" [+ s  U. k8 N0 Y* M& e! O
1. 将数值对象转换为符号对象
0 I9 |9 f5 M/ g7 @, ^sym命令可以把数值型对象转换成有理数型符号对象,vpa命令可以将数值型对象转换为任意精度的VPA型符号对象。( E3 x+ m) x; L+ Y/ L! o

" N5 e; U. L, W* ?7 }6 \2. 将符号对象转换为数值对象7 T- T" W0 Y9 U) s- z( `
使用double、 numeric函数可以将有理数型和VPA型符号对象转换成数值对象。# ^! h' v1 r. ^
语法:# D$ g* |( ?5 x
       N=double(S)              %将符号变量S转换为数值变量N
3 R# S, ^) w9 Q0 |       N=numeric(S)           %将符号变量S转换为数值变量N4 Z& \; {4 r; n. v' }
3.7】将符号变量file:///C:/DOCUME~1/ADMINI~1.468/LOCALS~1/Temp/msohtml1/01/clip_image008.gif与数值变量进行转换。
8 F5 E- a8 N1 Z! R" [# A9 |9 a clear
; G- T8 i$ P2 R3 A6 x1 Fa1=sym('2*sqrt(5)+pi')
2 o3 P$ F9 J5 e' Z! Z! T
# W+ Z8 A1 B! |% j' G) Ra1 =
" B3 L, {& y4 s, y2*sqrt(5)+pi  5 h" |( k0 R' T4 P" k4 I

% b( c; W5 O& [ b1=double(a1)             %转换为数值变量 1 d4 U) d6 m+ v3 t) d% `7 A
3 c: M* f& o3 r8 p' d  ~+ {
b1 =
7 F/ t& |+ X+ V; D" G% m    7.6137  , u3 ?, C9 H$ {4 k  s

, Q! |/ `. h4 e# b0 | a2=vpa(sym('2*sqrt(5)+pi'),32) , V( d. n1 O5 U% ^8 m3 f  C

7 L0 G6 ?( Z9 ~- M3 u7 Z: wa2 =
5 y, ]2 u; a. k- Y# J  I4 _7.6137286085893726312809907207421  ) @0 m$ y6 c# v% i! T

% c) l* S1 j  V) y% C% \% T b2=numeric(a2)         %转换为数值变量
7 U6 B' N2 @" ^9 F% r
! H# ^0 |9 Q# h) o* @- ub2 =
" A$ L, S1 }, |$ [" s$ P# C    7.6137  
3 V* O  G7 d8 Q# x- @8 Z3.7】由符号变量得出数值结果。
$ U& o. J/ W; r9 b+ \ b3=eval(a1) ; @& @" U3 q- m
2 `+ ?: |) K- G( S  ^2 @
b3 =
. `& ?% D! ~. @; L2 P& w' a0 I( R    7.6137  
+ Z6 |0 c) n; I" C( G# J. t" ?用“whos”命令查看变量的类型,可以看到b1、b2、b3都转换为双精度型:
  e, d3 q$ R; |/ H$ x$ b' p whos 7 H5 s- O/ D$ K- r
! U% c3 y" ~& Q8 ~) b8 y9 c
      Size                   Bytes Class
2 c" _  m0 Y+ C! N6 t7 r3 h9 F
3 D9 g/ E! p9 P0 m3 ~8 Y        1x1                      148 sym object
( N: g% g6 x+ ~! u% f* W5 B        1x1                      190 sym object& K: N; E+ N5 Q4 ^2 d1 Y
        1x1                        8 double array' F5 p4 v9 z$ x' Y- v; T
        1x1                        8 double array
2 c- y5 o1 t2 ]* @, `        1x1                        8 double array
, C$ i2 ?; H# `9 z/ `
5 e! G& l+ M4 q4 r4 r" x2 J! FGrand total is 50 elements using 362 bytes  
, }8 _& [0 @1 ?3.3符号表达式的操作和转换9 A4 E* l; @; Q1 E
3.3.1符号表达式中自由变量的确定2 t9 A& I! Z- M* t0 b' A2 _
1. 自由变量的确定原则
) [, ?* j! c( H,MATLAB将基于以下原则选择一个自由变量:5 O- P9 j. J2 c0 F
§      小写字母i和j不能作为自由变量。/ L7 L; W& S$ C% _+ B9 k6 O
§      符号表达式中如果有多个字符变量,则按照以下顺序选择自由变量:首先选择x作为自由变量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。. ^7 `0 w) w/ X7 Q2 g5 I% _, [
§      大写字母比所有的小写字母都靠后。
+ ^+ i2 l5 \. x( V- h7 ]4 [+ B ( k/ s1 Z  b+ j$ W  i
2. findsym函数
# h2 ~9 M8 Z8 {4 r7 ?4 x如果不确定符号表达式中的自由符号变量,可以用findsym函数来自动确定。
# y5 ?- P4 S1 q6 u3 Y5 b' T2 x语法:
7 B) Q# z* Q/ e7 i       findsym(EXPR,n)        %确定自由符号变量
: q. S% I- P& V& O7 P说明:EXPR可以是符号表达式或符号矩阵;n为按顺序得出符号变量的个数,当n省略时,则不按顺序得出EXPR中所有的符号变量。
/ G" \7 W& @9 S$ l3 h* i9 t3.8】得出符号表达式中的符号变量。
1 \6 p# O8 w, z* A8 O! Z* p f=sym('a*x^2+b*x+c')
' ]7 K) x; E7 e& d/ T; ?
2 Z! w7 @8 z; x. C) nf =, u/ M6 M2 n0 \9 o8 X. ^
a*x^2+b*x+c  + d, V0 }6 A; T% p3 D
findsym(f)         %得出所有的符号变量 2 s9 a+ N+ G% p0 V- U& a5 W$ d
6 e3 e, d( |  }  S$ h; I, f
ans =
* F' H9 d+ V' @+ U! ~& Z7 D7 F8 k  {a, b, c, x  1 D5 T7 O% A; v9 B$ `$ l2 Z
g=sym('sin(z)+cos(v)') [/hide]
5 h3 H4 f; e% n8 Z, Q' V' G- _: s! Q& o$ z0 F( [3 I. @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 17:28 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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