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

MATLAB符号计算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 cat12620 于 2018-11-7 16:33 编辑
; r3 @$ h# ~9 }8 W. n- {4 u3 c! T. u/ _
0 D* G9 x* j6 b符号计算则是可以对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MATLAB具有符号数学工具箱(Symbolic Math Toolbox),将符号运算结合到MATLAB的数值运算环境。符号数学工具箱是建立在Maple软件基础上的。
# x: t; y: K# \! h1 Q' b# s4 z4 z3.1 符号表达式的建立
; j4 F" @3 J1 j8 V8 ]) f! J! FSymbolic Math Toolbox2.1版规定在进行符号计算时,首先要定义基本的符号对象然后才能进行符号运算。
' ?* P, k- |' ^# j* ]2 Z3.1.1创建符号常量
3 X+ N3 i# |2 }1 ~1 _符号常量是不含变量的符号表达式,用sym命令来创建符号常量。
$ y: Y: c* }) Y6 Q) h; ]4 `9 e7 F语法:8 N8 q* Q7 G) W: e
       sym(‘常量’)              %创建符号常量
1 i+ M% n2 C0 K; U+ O# U2 d例如,创建符号常量,这种方式是绝对准确的符号数值表示:
& T+ j6 t' p! p8 M( A>> a=sym('sin(2)')3 \4 A6 t3 H# h" |- F
a =, h# B2 o: a/ g! I& z' o
sin(2)" E& u; E2 g5 \+ P+ o3 Z) o' m. ?8 [; e
sym命令也可以把数值转换成某种格式的符号常量。
* O2 H; i- k% u8 e$ H2 q+ T; M语法:4 C7 |# _5 ~" x* @% g8 F2 Z; W
       sym(常量,参数)          %把常量按某种格式转换为符号常量9 l- o7 W7 b7 }+ c  n9 H
说明:参数可以选择为’d’、’f’、’e’或’r’ 四种格式,也可省略,其作用如表3.1所示。7 k. H9 P+ W9 u
3.1 参数设置
参数
0 [- e! M& O" R+ t
作用
/ U) @' g& S/ v' n' d5 g
d" h& s6 M8 M7 q0 j; y+ ?
返回最接近的十进制数值(默认位数为32位)
: V; k5 R; R, D: {$ f* w4 x1 j
f0 _' A" h1 g& Z: D% S4 b% P0 N
返回该符号值最接近的浮点表示
; a0 ]7 \( W3 A7 V6 @2 o& @3 l' m
r. _  L. X3 {5 u* d! P
返回该符号值最接近的有理数型(为系统默认方式),可表示为p/q、p*q、10^q、pi/q、2^q和sqrt(p)形式之一
. p7 J9 j5 m8 t6 w
e$ E, f0 k/ L& ]
返回最接近的带有机器浮点误差的有理值) H5 T  P# M5 p& v" w) u& g$ t
例如,创建符号常量,这种方式是绝对准确的符号数值表示:
3 X, ?6 D$ S' Q% W+ L2 K  D3 z a=sym('sin(2)') 7 a0 |) g) T" H# P
- S+ l5 K6 K7 u& [
a =
3 |; Q5 @5 V+ L- y+ Y5 gsin(2)  & t( a1 K( r3 Y) p/ Z5 P- S
游客,如果您要查看本帖隐藏内容请回复
0 W& v. @0 c2 y1 o# D+ @
eig(A)                 %计算特征值 ) t% R0 x" {9 {* B6 }6 a8 x

" D9 F- w8 h+ i, C" m, mans =
  d( Y7 r8 ~- `, i, C' l* r  C[ 1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]
2 [5 e9 B. T9 h' g' V1 E3 M9 N[ 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]  / S, [( @9 Y# P6 T

2 d* i- @+ W8 x) }% P7 r- {3.5】符号表达式f=2x2+3x+4与g=5x+6的代数运算。+ N' x3 ~$ q4 R! h! @* J
f=sym('2*x^2+3*x+4')
: K4 b' E( f! ]5 a
0 S0 I2 c0 ^- w; af =
1 P, z2 U7 ?( `4 _2*x^2+3*x+4  
0 G5 T3 Z& O- a+ V* T" g6 a) i; { g=sym('5*x+6') $ V, b/ E4 M% O+ l2 [

$ V* c- b6 W( a6 K- fg =7 M& A+ s( r& k# r5 \5 V) a
5*x+6  ( \" s  m9 K* C' s5 z  y
f+g                %符号表达式相加 8 g0 Q" D  f# i* u
7 n. T( d$ A: Y8 z4 a3 g2 o
ans =9 Q- ~$ R! v6 Z8 {3 C! _: u5 v
2*x^2+8*x+10  - s# m7 J7 z1 b2 k" d
f*g                %符号表达式相乘 ! F! e6 x+ i+ I7 m

2 [+ I3 v/ x7 @4 m* p' Xans =
2 |7 o9 w5 ^+ ]3 U% W(2*x^2+3*x+4)*(5*x+6)  + V/ |3 H$ C0 b4 R
3.2.2符号数值任意精度控制和运算
; y9 }% t' y( {& l. t8 @! _7 a1. Symbolic Math Toolbox中的算术运算方式; C' I  B9 N5 E  O. z$ [, h
在Symbolic Math Toolbox中有三种不同的算术运算:; j) D4 Z9 H. ?! I/ Z& z7 O3 P0 C8 s
§      数值型:MATLAB的浮点运算。
7 M1 g' I$ X( O- |2 b§      有理数型:Maple的精确符号运算。& h( U/ l- n1 J. G! V
§      VPA型:Maple的任意精度运算。
. v! P1 M+ B" c! K ; i% m; M0 e) U7 Q3 U1 W
2. 任意精度控制) W, k* \6 l. X  S9 ~$ K  K" v5 u4 E+ L
任意精度的VPA型运算可以使用digits和vpa命令来实现。
/ h1 i- K& D. A( W/ ]: U语法:
' \' j. g, D; u* [# K! ]       digits(n)                    %设定默认的精度
. ]8 [3 @2 v3 w! l% g# ~: \. u9 ^. `说明:n为所期望的有效位数。digits函数可以改变默认的有效位数来改变精度,随后的每个进行Maple函数的计算都以新精度为准。当有效位数增加时,计算时间和占用的内存也增加。命令“digits”用来显示默认的有效位数,默认为32位。3 ?) O& p2 l4 H2 S- K2 q* J
语法:
0 A% Y  K# h: \/ z- x, t7 h4 h) P       S=vpa(s,n)                %将s表示为n位有效位数的符号对象, S" L- s% m7 \$ \& W1 _. q
说明:s可以是数值对象或符号对象,但计算的结果S一定是符号对象;当参数n省略时则以给定的digits指定精度。vpa命令只对指定的符号对象s按新精度进行计算,并以同样的精度显示计算结果,但并不改变全局的digits参数。1 r2 @- j- g! m" S- ?: f0 K
3.6】对表达式file:///C:/DOCUME~1/ADMINI~1.468/LOCALS~1/Temp/msohtml1/01/clip_image006.gif进行任意精度控制的比较。. ?0 h5 o0 _% N2 o' k( e
a=sym('2*sqrt(5)+pi')
/ S* p9 B% j4 c: g6 t" b% U
! {. |$ t, G& f) D4 R' X6 da =: k; K9 e# |2 _. X
2*sqrt(5)+pi  6 u8 Y7 z' y: M+ I' j7 V( t" P' z- e
digits      %显示默认的有效位数
- f* x  g0 D/ z) M- Z% q3 x2 e1 | / w9 [* r7 [; k8 R- G0 d4 Z; p9 P/ p

; o: x$ R" \$ ~7 T) A  hDigits = 32) o7 p4 j. T) o# d: q3 I
   
1 x1 w# H8 t  _6 M: q3 Q" F. W; x vpa(a)      %用默认的位数计算并显示
- q1 F4 }* [1 ]: t  o
7 _3 d; A: A# e% Jans =
/ I% t' _: @8 i& @: L( l9 B( |7.6137286085893726312809907207421  
+ P8 s9 I  {. V& `% g) k, |+ |' J vpa(a,20)       %按指定的精度计算并显示
7 U. L7 ~& ]1 g: u, D  W! i
5 W5 R% k, x: gans =
' R0 I' b7 W/ D! ?" q  W/ `7.6137286085893726313  
; Q, Z. u+ g9 r( l$ t digits(15)      %改变默认的有效位数0 x( A9 _& w6 I* A2 N
vpa(a)      %按digits指定的精度计算并显示 0 t% _9 B. q  F! ~
9 O6 u9 g1 D% v# E: y
ans =$ {( \* H* u$ |; K/ M% }
7.61372860858937  ) x) ]' D6 k  d7 Q) A9 Q/ k

9 v8 x" d" F' ~( e! B: S3. Symbolic Math Toolbox中的三种运算方式的比较! i/ M) D& M" o. {4 g  @  h& Y
3.6】用三种运算方式表达式比较2/3的结果。- D1 i: Q, O$ S: u
a1 =2/3      %数值型 : q5 P9 n1 u! {5 f* b

  {+ c: r" [  T$ Y$ g( E0 {8 fa1 =7 f8 Q) z2 n9 ]0 y
    0.6667  8 z  D$ O* E$ N
a2 = sym(2/3)    %有理数型
) q- g$ m, X% s% C9 t
# t, k0 m8 L( S+ [8 v5 za2 =
' K& v! a) y; Q# Z& o& D: f- b- |( C2/3  
8 S. Y! G: m7 u5 y6 C) R a3 =vpa('2/3',32) %VPA ( M  H# H6 Z* D; L$ C; w
; ?% Z7 a. S# a6 t+ @
a3 =
* B* C2 i6 U, H.66666666666666666666666666666667  . `. Y, q$ X! f9 L; f
程序分析:0 T; _- c( e& z8 V+ f5 t
§      三种运算方式中数值型运算的速度最快。
# i* t" d  U8 C. e: z§      有理数型符号运算的计算时间和占用内存是最大的,产生的结果是非常准确的。4 E, n8 J2 W$ P: z
§      VPA型的任意精度符号运算比较灵活,可以设置任意有效精度,当保留的有效位数增加时,每次运算的时间和使用的内存也会增加。
2 J) n, J3 z9 ?) x1 ?) S§      数值型变量a1结果显示的有效位数并不是存储的有效位数,在第一章中介绍显示的有效位数由“format”命令控制。如下面修改“format”命令就改变了显示的有效位数:
! p  `. @- Q# Q6 B( I format long
; L/ z  F5 K3 [ a1
( ]# G( M$ s# j2 \/ @8 w! Y 6 B7 u; s9 @+ S) R/ X/ j# j
a1 =
# P, n6 @' e; {$ A   0.66666666666667  
) r6 S5 ^0 c' I( m: U6 u- y3.2.3符号对象与数值对象的转换
  k/ I; H7 Y9 l4 f1 h: H1. 将数值对象转换为符号对象  ^; c+ b" C1 v! j( D
sym命令可以把数值型对象转换成有理数型符号对象,vpa命令可以将数值型对象转换为任意精度的VPA型符号对象。
6 i( M. o+ f& i* w. k' f
3 S& X0 O9 _0 A  D2. 将符号对象转换为数值对象
; \7 M" h4 r1 B0 D( U8 [* n* ?使用double、 numeric函数可以将有理数型和VPA型符号对象转换成数值对象。
& i% h7 ?2 k! g4 b- L9 ~; K8 ^' h语法:
8 k# B! R2 t- ^/ w; T       N=double(S)              %将符号变量S转换为数值变量N/ ]& y8 v# M5 P  _3 Y) [& v
       N=numeric(S)           %将符号变量S转换为数值变量N
) ]. p  a8 p$ [$ x0 N( ?3.7】将符号变量file:///C:/DOCUME~1/ADMINI~1.468/LOCALS~1/Temp/msohtml1/01/clip_image008.gif与数值变量进行转换。
* ~$ u' ]# G5 J/ i' _ clear
9 a4 p6 N' E! {+ h9 F& M6 S5 q# Ha1=sym('2*sqrt(5)+pi')
* W& g/ u$ a/ k2 f% y$ S* @ ( U! Q, p  q, Z5 Q2 ?
a1 =
" u8 s0 w" u& ]/ R* x) K6 m6 S" C. h2*sqrt(5)+pi  $ }8 n" w) k% \, d! ^

  c) }' u! z# ~ b1=double(a1)             %转换为数值变量
9 L5 N7 N6 b! w' P+ h
; l2 W5 |! C- y% @/ w) I/ D  T' hb1 =
  L8 J5 ~6 {6 D! L' T7 N    7.6137  9 v. F+ q: _* [, [

( g7 c6 L/ w* b6 u4 ?/ r8 ] a2=vpa(sym('2*sqrt(5)+pi'),32) 3 u2 k0 E) @4 ~2 z
+ o/ x( F1 I% b% x" w
a2 =
5 [4 \) s1 `. n& R7.6137286085893726312809907207421  
4 }# e5 T, S! e" G
' U3 n9 W# T3 `, v( g+ N8 y' k/ {/ z b2=numeric(a2)         %转换为数值变量 8 X5 ]1 s* e+ L7 C2 v' z3 r: f6 \$ v- l
3 w+ k2 P8 T3 T4 ?8 P
b2 =5 l3 R, V' S3 c6 [
    7.6137  8 h" V  i# p8 d# T( [
3.7】由符号变量得出数值结果。
9 a3 K  w* P* u$ S5 m; | b3=eval(a1)
" r# w; y( I0 V" | * o# x2 c4 M: T( Y
b3 =0 U! p6 R  t2 S6 g7 @
    7.6137  
2 Y  M8 U0 @+ J) ?0 N# F用“whos”命令查看变量的类型,可以看到b1、b2、b3都转换为双精度型:* R2 Z& p; ~8 g* F- J
whos
4 J0 O: I- ^" q2 b
- J/ g/ Q8 }$ G1 y# L7 \      Size                   Bytes Class+ r: y7 a0 e* x% O' m- Z

" ?0 e6 C- q0 H5 c6 q        1x1                      148 sym object
3 H# x3 [- i( q4 t7 F        1x1                      190 sym object
7 }3 l5 X- v- C        1x1                        8 double array/ s* M$ @- B, M; K2 l4 u
        1x1                        8 double array8 L& k* |4 e3 m$ y) e
        1x1                        8 double array
- `1 n7 E- ^6 p) k" i9 _4 K: T
" p. i7 N3 u: gGrand total is 50 elements using 362 bytes  ; c4 k, F6 B* |+ [7 ?3 Z
3.3符号表达式的操作和转换
" H2 o* F$ B& W* ?1 u# R& f+ v6 Q. ~3.3.1符号表达式中自由变量的确定" X6 p8 C2 V7 V7 p+ u8 i2 Y  n+ c, ~% Q; V
1. 自由变量的确定原则( |! Y. H9 S( A' n6 c8 }- e& m& [
,MATLAB将基于以下原则选择一个自由变量:
9 x# m' X6 e; o) P§      小写字母i和j不能作为自由变量。! a) n7 \: P6 P4 [
§      符号表达式中如果有多个字符变量,则按照以下顺序选择自由变量:首先选择x作为自由变量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。# v9 R1 f9 a8 V
§      大写字母比所有的小写字母都靠后。# D, ]( @& X- ^) X) o
( {! h8 i. f" r0 X
2. findsym函数
- v- D: x: \4 E7 `. T如果不确定符号表达式中的自由符号变量,可以用findsym函数来自动确定。
) X8 L" \3 u4 q语法:5 O# d5 k* x. f1 T- `
       findsym(EXPR,n)        %确定自由符号变量
: `) w2 u, U. N) N8 u# Q说明:EXPR可以是符号表达式或符号矩阵;n为按顺序得出符号变量的个数,当n省略时,则不按顺序得出EXPR中所有的符号变量。+ ^8 d, a& v. a1 C% g3 q+ S  c9 E/ Z
3.8】得出符号表达式中的符号变量。( ]0 a& J  v. ?  S2 |6 v3 r3 L
f=sym('a*x^2+b*x+c') : P/ y! T/ e6 M6 G# ?' K$ ^: O; H

0 C1 {! d2 W* K( }f =
  q% h- Z' ]/ b' Va*x^2+b*x+c  3 s2 [. P3 f& g& s) N/ y' ^( V5 s' G
findsym(f)         %得出所有的符号变量   p- E: @2 K; w+ o# O" u" w1 y

! B% f( T8 O8 w- w0 c/ }ans =
' d: r# G: A4 D2 T. n/ l) p( ra, b, c, x  
# [3 S/ K4 c* o$ ]% L* F g=sym('sin(z)+cos(v)') [/hide]
. y7 j) s/ M. [# {# @5 A" g6 ^
1 [3 y/ V# ?+ C# }: y8 ~$ A1 F
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 16:54 , Processed in 0.218750 second(s), 24 queries , Gzip On.

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

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

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