当前位置:   article > 正文

MATLAB2016笔记(八):符号数学计算(MATLAB-Maple组件)_matlab符号运算工具箱

matlab符号运算工具箱


一、MATLAB符号计算概述

数值计算的表达式、矩阵变量中不允许有未定义的自由变量 , 而符号计算可以含有未定义的符号变量

M A T L A B MATLAB MATLAB符号计算是通过集成在 M A T L A B MATLAB MATLAB中的符号数学工具箱来实现的,该工具箱基于字符串来进行符号分析与运算
M A T L A B MATLAB MATLAB的符号数学工具箱可以完成几乎所有的符号计算功能,包括:符号表达式的计算,符号表达式的复合、化简,符号矩阵的计算,符号微积分,符号函数画图,符号代数方程求解,符号微分方程求解等。此外,工具箱还支持可变精度运算,即可以指定的精度返回结果


二、符号对象和符号表达式

符号数学工具箱中定义了一种新的数据类型,叫sym类,sym类的实例就是符号对象,符号对象是一种数据结构,用来存储代表符号的字符串的复杂数据结构
符号表达式时符号变量或常量的组合,在某些特定情况下,符号变量和符号常量也可以被认为是符号表达式,符号表达式的创建依然可以使用函数sym

(一)符号对象的创建 sym/syms

符号对象:符号常量、符号变量、符号函数及符号表达式
  • 1

1.函数命令sym()

sym的调用格式如下:
variable=sym(A,flag)  A为数字、数值矩阵或数值表达式,输出结果是将数值对象转换成的符号对象
S=sym('A',flag) 	  A为字符串,输出结果是将字符串转换成的符号对象

flag为转换的符号对象应该符合的格式
若A为数值对象,flag有如下选择
	d:最接近的十进制浮点精确表示
	e:带(数值计算时)估计误差的有理表示
	f:十六进制浮点表示
	r:为默认设置,最接近有理表示的形式

若A为字符串,flag有如下选择
	positive:限定A为正的实型符号变量
	real:	  限定A为实型符号变量
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.函数命令syms()

syms调用格式如下
syms a b c flag
syms命令可以建立三个或多个符号对象,如a、b、c,符号变量之间以空格隔开,不可使用逗号

flag为对格式的限定,具体选项与sym一致
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图的警告可以根据函数名,在对应位置注释掉即可,之后就不会警告了

(二)符号计算中的运算符和函数

1.算术运算符号

(1)运算符号“+”、“-”、“*”、“\”、“/”、“^”分别实现矩阵的加法、减法、乘法、左除、右除和求幂

(2)运算符号“ .*”、“.\”、“./”、“.^”分别实现“元素对元素”的数组乘法、左除、右除和求幂运算

(3)运算符号“ ’ ”、“ .’ ”分别实现矩阵的共轭转置与非共轭转置

conj(X):计算复数X的共轭值
  • 1

在这里插入图片描述

2.关系运算符号
符号计算中的关系运算符只有两种
(1)“==”,表示对运算符两边的符号对象进行“相等”的比较,返回值为“1”表示相等,为“0”表示不相等
(2)“~=”,表示对运算符两边的符号对象进行“不相等”的比较,返回值为“1”表示不相等,为“0”表示相等

3.指数、对数运算符号
(1)sqrt、exp、expm(处理矩阵)等指数函数在符号计算中的使用方法与数值计算中的使用方法一致
(2)log2函数与log10函数用法与数值计算中的用法一致
在这里插入图片描述
4.三角函数、双曲函数及其反函数
除atan2仅能用于数值计算外,其余的三角函数、双曲函数及它们的反函数,均可用于符号计算,且与数值计算中的用法一致

5.复数函数
复数函数包含复数的共轭(conj)、实部(real)、虚部(imag)和模(abs)函数,用法与数值计算一致

6.矩阵代数函数
除svd函数的使用方法有所不同外,其余函数的用法与数值计算一致

(三)符号对象的类别识别函数 isa / class / whos

M A T L A B MATLAB MATLAB提供了一些用于识别不同数据对象的函数
在这里插入图片描述
在这里插入图片描述

(四)符号表达式中确定有哪些符号变量 findsym/symvar

函数findsym可以帮助查找一个符号表达式中的符号变量,该函数调用格式如下:
findsym(S) S为符号表达式,将返回S中所有的符号变量
findsym(S,N) 当指定N后,返回S中距离符号变量x或X最接近的N个符号变量

但后续版本更新为symvar
  • 1
  • 2
  • 3
  • 4
  • 5

在未标明变量的情况下,一般都是以symvar(f,1)来确定默认变量
在这里插入图片描述

(五)符号精度计算 vpa / double / digits

符号计算的一个显著特点是由于计算过程中不会出现舍入误差,从而可以得到任意精度的数值解,可以通过牺牲计算时间和存储空间获得足够高精度的解
在这里插入图片描述
在这里插入图片描述


三、符号表达式操作

(一)符号表达式显示 pretty

显示函数pretty允许用户将符号表达式显示为符合一般数学表达习惯的数学表达式
在这里插入图片描述

(二)符号表达式合并 collect

函数collect可以将符号表达式中的同类项合并,具体调用格式如下

	R=collect(S) 
	R-collect(S,v) 将表达式S中v的相同次幂的项进行合并,若v没有指定,默认将含有x的相同次幂的项进行合并
  • 1
  • 2

在这里插入图片描述

(三)符号表达式展开 expand

函数expand可以将符号表达式展开,具体调用格式如下

R=expand(S) 将表达式S中的各项进行展开,如果S包含函数,则利用恒等变形将它写成相应的和的形式
  • 1

在这里插入图片描述

(四)符号表达式嵌套 horner

函数horner可以将符号表达式转换为嵌套形式,具体调用格式如下

R=horner(S) S是符号多项式矩阵,函数horner将其中的每个多项式转为它们的嵌套形式
  • 1

在这里插入图片描述

(五)符号表达式分解 factor

函数factor可以将符号表达式进行因式分解,具体调用格式如下

factor(X) 若X是一个多项式或多项式矩阵,系数是有理数,该函数可以把X表示成系数为有理数的低阶多项式相乘的形式;若不能分解,则返回本身
  • 1

在这里插入图片描述

(六)符号表达式化简 simplify / simple

按照一定的规则对符号表达式进行简化
1.simplify函数

R=simplify(S) S可以为符号表达式矩阵,利用Maple化简规则对表达式进行简化
		功能强大,应用于包含和式、方根、分数的乘方、指数函数、对数函数、三角函数、Bessel函数及超越函数等的表达式
  • 1
  • 2

2.simple函数(2015版以后就不存在)

R=simple(S) 若S为符号表达式矩阵,则返回整个矩阵变成最短的形式,而不一定使每一项都最短;
			若不给定输出参数R,该函数将显示所有使表达式S变短的简化形式,若给定,则返回其中最短的一个
  • 1
  • 2

在这里插入图片描述

(七)符号表达式替换 subs / subexpr

变量代换法:在处理一些结构较为复杂、变量较多的数学模型时,引入一些新的变量进行代换,以简化其结构,从而达到解决问题的目的
  • 1

M A T L A B MATLAB MATLAB中提供了 s u b s subs subs函数和 s u b e x p r subexpr subexpr函数进行变量代换

1.subs函数

	subs可以用指定符号替代符号表达式中的某一特定符号,其调用格式如下:
	R=subs(S,Old,New) 用新符号变量New替代原来符号表达式S中的变量Old ,当New为数值形式的符号时,该值会直接参与计算
	R=subs(S,New) 用New代替S中的默认变量,由symvar/findsym确定默认变量
	R=subs(S) 用工作区的变量值代替S中的所有符号变量,若没有指定某符号变量的值,则返回值中该值不被替代
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
2.subexpr函数

subexpr函数将表达式中重复出现的字符串用变量代替,调用格式如下:
[Y,SIGMA]=subexpr(S,SIGMA)  指定用变量SIGMA的值(必须为符号变量)来代替符号表达式(可以为矩阵)中重复出现的字符串,替换结果由Y返回,被替换的字符串由SIGMA返回
[Y,SIGMA]=subexpr(S,'SIGMA') SIGMA为字符或字符串,用于替换符号表达式中重复出现的字符串,其余相同
  • 1
  • 2
  • 3

在这里插入图片描述


四、符号函数的操作

(一)复合函数操作 compose

函数compose可以得到符号表达式的复合函数,具体调用格式如下

compose(f,g) 返回复合函数f(g(y)),f=f(x),g=g(y),x为findsym定义的f函数的符号变量,y亦同此理
compose(f,g,x,z) 返回自变量为z的复合函数f(g(z)),并且x成为了f函数的独立变量
  • 1
  • 2

在这里插入图片描述

(二)反函数操作 finverse

函数finverse可以对符号表达式进行反函数运算,具体调用格式如下

g=finverse(f) 返回符号函数f的反函数g,其中,f的变量为x,所得反函数是满足g(f(x))=x的符号函数
g=finverse(f,v)  返回自变量为v的符号函数f的反函数,适用于f包含不止一个符号变量的情况
  • 1
  • 2

在这里插入图片描述


五、符号微积分

(一)符号表达式的极限 limit

求微分的基本思想是当自变量趋近某个值时,求函数值的变化,“无穷逼近”是微积分的一个基本思想,导数就是由极限给出的:
f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h f^{'}(x)=\lim\limits_{h \rightarrow 0} \frac{f(x+h)-f(x)}{h} f(x)=h0limhf(x+h)f(x)

函数limit可以求符号表达式的极限,具体调用格式如下:

limit(F,x,a) 求当x趋近a时,符号表达式F的极限
limit(F,a) 默认自变量(findsym确定)趋近于a时F的极限值
limit(F) a默认为0
limit(F,x,a,'right') 自右趋近a,为右极限
limit(F,x,a,'left') 自左趋近a,为左极限
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

(二)符号表达式的微分 diff / jacobian

1.diff函数

diff可以计算一元或多元函数的任意阶数的微分,其调用格式如下:
diff(S,'v') 将符号'v'视作变量,对符号表达式或符号矩阵S求微分
diff(S,n)对S的默认变量(findsym确定)进行n阶微分运算,n必须为正整数
diff(S,'v',n) 视'v'为变量,进行n阶微分运算
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2.jacobian函数

jacobian可以计算自变量多于一个的符号矩阵的微分,其调用格式如下:
R=jacobian(w,v) w是一个符号列向量,v是指定进行变换的变量所组成的行向量
  • 1
  • 2

在这里插入图片描述

(三)符号表达式的积分 int

int可以计算符号表达式的积分,其调用格式如下:

R=int(S,v,a,b) 以符号标量v作为标量,求当v从a变到b时,符号表达式S的定积分值,若S是符号矩阵,则对每个元素求积分;a和b可以是符号或数值标量
R=int(S,V) 求不定积分
R=int(S,a,b) 以findsym确定默认变量,对默认变量求从a到b的定积分值
R=int(S) 以findsym确定默认变量,对默认变量求不定积分
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

(四)符号表达式的级数求和 symsum

symsum可以对符号表达式进行求和,其调用格式如下:

r=symsum(S,a,b) 求符号表达式S默认变量从a到b时的有限和
r=symsum(S,v,a,b) 求符号表达式S中变量v从a到b时的有限和
  • 1
  • 2

在这里插入图片描述

(五)符号表达式的泰勒级数 taylor

taylor可以求符号表达式的泰勒级数展开式,其调用格式如下:

r=taylor(f,n,v,a) f为符号表达式,以符号标量v为自变量,返回f在v=a处作n-1阶泰勒展开的展开式
r=taylor(f,n,v) 返回f的n-1阶麦克劳林级数展开式,即当v=0处作泰勒展开
r=taylor(f) 返回f在默认变量为0处作5阶泰勒展开的展开式
  • 1
  • 2
  • 3

在这里插入图片描述


六、符号积分变换

(一)概述

百度——积分变换
知乎——积分变换

所谓积分变换,就是通过积分运算,把一类函数 A A A变换成另一类函数 B B B,函数 B B B一般是含有参数 α \alpha α的积分: ∫ a b f ( t ) K ( t , α ) d t \int_{a}^{b}f(t)K(t,\alpha)dt abf(t)K(t,α)dt
这一变换的目的就是把 A A A中的函数 f ( t ) f(t) f(t)通过积分运算变成另一类函数 B B B中的函数 f ( α ) f(\alpha) f(α),这里的 K ( t , α ) K(t,\alpha) K(t,α)是一个确定的二元函数,叫作积分变换的核
当选取不同的积分区间与变换核时,就成为不同的积分变换, f ( t ) f(t) f(t)叫作原函数, f ( α ) f(\alpha) f(α)叫作象函数。在一定条件下,原函数与象函数一一对应,成为一个积分变换对
变换是可逆的,由原函数求象函数叫作正变换,反之则是逆变换

(二)傅里叶变换及其反变换 fourier / ifourier

时域中的 f ( t ) f(t) f(t)与它在频域中的 F o u r i e r Fourier Fourier变换 F ( ω ) F(\omega) F(ω)之间存在如下关系:
F ( ω ) = ∫ − ∞ + ∞ f ( t ) e − j ω t d t F(\omega)=\int_{- \infty}^{+\infty} f(t)e^{-j\omega t}dt F(ω)=+f(t)etdt
F ( t ) = 1 2 π ∫ − ∞ + ∞ f ( ω ) e − j ω t d ω F(t)=\frac{1}{2\pi}\int_{- \infty}^{+\infty} f(\omega)e^{-j\omega t}d\omega F(t)=2π1+f(ω)etdω

由计算机完成这种变换的途径有两条:一是直接调用指令fourier和ifourier,二是根据定义使用积分指令int实现
fourier与ifourier用法如下:
Fw=fourier(ft,t,w)  求时域函数ft的Fourier变换Fw,ft是以t为自变量的时域函数,Fw是以圆频率w为自变量的频域函数
ft=ifourier(Fw,w,t) 求频域函数Fw的Fourier反变换ft,ft是以t为自变量的时域函数,Fw是以圆频率w为自变量的频域函数
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

(三)拉普拉斯变换及其反变换 laplace / ilaplace

Laplace变换及其反变换的定义为:
F ( s ) = ∫ 0 ∞ f ( t ) e − s t d t F(s)=\int_{0}^{\infty}f(t)e^{-st}dt F(s)=0f(t)estdt
f ( t ) = 1 2 π j ∫ c − j ∞ c + j ∞ F ( s ) e s t d s f(t)=\frac{1}{2\pi j}\int_{c-j\infty}^{c+j\infty}F(s)e^{st}ds f(t)=2πj1cjc+jF(s)estds

由计算机完成这种变换的途径有两条:一是直接调用指令laplace和ilaplace,二是根据定义使用积分指令int实现
laplace与ilaplace用法如下:
Fs=laplace(ft,t,s)   求时域函数ft的Laplace变换Fs,ft是以t为自变量的时域函数,Fs是以复频率s为自变量的频域函数
ft=ilaplace(Fs,s,t)  求频域函数Fs的Laplace反变换ft,ft是以t为自变量的时域函数,Fs是以复频率s为自变量的频域函数
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

(四)Z变换及其反变换 ztrans / iztrans

一个离散因果序列的 Z Z Z变换及其反变换定义为:
F ( z ) = ∑ n = 0 ∞ f ( n ) z − n F(z)=\sum_{n=0}^{\infty} f(n)z^{-n} F(z)=n=0f(n)zn
F ( n ) = z − 1 { F ( z ) } F(n)=z^{-1}\{F(z)\} F(n)=z1{F(z)}

涉及Z反变换具体计算的方法最常见的有3种,分别为幂级数展开法、部分分式展开法和围线积分法
iztrans指令使用围线积分法,相应数学表达式为:
f ( n ) = 1 2 π j ∫ F ( z ) z n − 1 d z f(n)=\frac{1}{2\pi j}\int F(z)z^{n-1}dz f(n)=2πj1F(z)zn1dz

具体命令格式如下:
FZ=ztrans(fn,n,z) 求时域函数fn的Z变换FZ,fn是以n为自变量的时域序列,FZ是以复频率z为自变量的频域函数
FZ=ztrans(fn,w) 默认fn为变量n的函数,FZ是以w代替z的函数
FZ=ztrans(fn) 默认fn是变量n的函数,FZ是以复频率z为变量的函数
fn=iztrans(FZ,z,n) 求频域函数FZ的Z反变换fn,fn是以n为自变量的时域序列,FZ是以复频率z为自变量的频域函数
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述


七、符号方程求解

(一)符号代数方程求解 solve

此处所指的代数方程包括线性、非线性和超越方程等,求解指令为solve。

当方程组不存在符号解,若又无其他自由参数时,solve将给出数值解,具体命令如下:
  • 1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)符号微分方程求解 dsolve

函数dsolve用于求常微分方程的符号解,其调用方式如下:

在方程中,以大写字母D表示一次微分,D2、D3分别表示二次、三次微分,符号D2y表示 d 2 y d t 2 \frac{d^2y}{dt^2} dt2d2y
函数dsolve把 d d d后面的字符当作因变量,并默认所有这些字符对符号 t t t进行求导
在这里插入图片描述
在这里插入图片描述


八、符号分析可视化

(一)funtool分析界面 (图示化符号函数计算器)

在MATLAB命令行窗口输入funtool命令即可
在这里插入图片描述
由两个图形窗口(f和g)和一个函数运算控制窗口(funtool)组成

在任何时候,两个图形窗口只有一个处于激活状态

在这里插入图片描述
在这里插入图片描述

(二)taylortool分析界面 (泰勒逼近分析)

命令行窗口输入taylortool

在这里插入图片描述
参数与之前的 t a y l o r taylor taylor指令一致
在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/90150
推荐阅读
相关标签
  

闽ICP备14008679号