第三讲 matlab 的符号运算
DESCRIPTION
第三讲 MATLAB 的符号运算. 科学与工程技术中的数值运算固然重要,但自然科学理论分析中各种各样的公式、关系式及其推导就是符号运算要解决的问题。 在 Matlab7.0 中,符号计算虽以数值运算的补充身份出现,但它们都是科学计算研究的重要内容。 Matlab 开发了实现符号计算的工具包 Symbolic Math Toolbox 。. 符号数学工具箱中的工具是建立在功能强大的 Maple 的基础上。 它最初是由加拿大的滑铁卢 (Waterloo) 大学开发出来的。 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/1.jpg)
第三讲 MATLAB 的符号运算• 科学与工程技术中的数值运算固然重要,但自
然科学理论分析中各种各样的公式、关系式及其推导就是符号运算要解决的问题。
• 在 Matlab7.0 中,符号计算虽以数值运算的补充身份出现,但它们都是科学计算研究的重要内容。
• Matlab 开发了实现符号计算的工具包 Symbolic Math Toolbox 。
![Page 2: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/2.jpg)
• 符号数学工具箱中的工具是建立在功能强大的 Maple 的基础上。
• 它最初是由加拿大的滑铁卢 (Waterloo) 大学开发出来的。
• 如果要求 Matlab7.0 进行符号运算,那么首先由 Maple 计算并将结果返回到 Matlab7.0 命令窗口。
![Page 3: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/3.jpg)
两个数学分析的可视化界面• 图示化符号计算器 ( 由命令 funtool 引出 )
• 泰勒级数逼近分析界面 ( 由命令 taylortool 引出 )
![Page 4: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/4.jpg)
图示化符号计算器• 由三个独立的窗口构成,通过函数运算
控制窗口来演示另外两个图形窗口,任何时候,只有一个窗口属于激活状态。而被激活的函数图像可随运算控制窗口的操作而做相应的变化。
• 下面给出运算控制窗口的键位功能。
![Page 5: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/5.jpg)
![Page 6: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/6.jpg)
• 前两行是函数 f 和 g 的具体解析式,第三行是自变量 x 的取值范围和常数 a 的值。
• 第四行只对 f 起作用,如求导、积分、简化、提取分子和分母、倒数、反函数。
• 第五行是处理 f 和 a 的加减乘除等运算。• 第六行前四个进行 f 和 g 之间的运算,后
三个分别是:求复合函数;把 f 传递给 ;swap 是实现 f 和 g 功能的交换。
• 最后一行是对计算器自身进行操作。
![Page 7: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/7.jpg)
• Funtool 计算器存有一张函数列表 fxlist 这 7 个功能键分别是:• Insert :把当前激活窗的函数写入列表• Cycle :依次循环显示 fxlist 中的函数• Delete :从 fxlist 列表中删除激活窗的函
数• Reset :使计算器恢复到初始调用状态• Help :获得关于界面的在线提示说明• Demo :自动演示• Close :关闭整个计算器
![Page 8: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/8.jpg)
泰勒级数逼近分析• 该界面用于观察函数 f(x) 在给定区间被
N 阶泰勒多项式 Tn(x) 逼近的情况。• f(x) 的输入可由命令 taylortool(fx) 引入,
或者在栏中直接输入表达式,回车确定。• N 默认值为 7 , a 是级数的展开点。• 函数的观察区间默认为 (-2pi , 2pi) 。
![Page 9: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/9.jpg)
![Page 10: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/10.jpg)
符号运算的功能
• 符号表达式、符号矩阵的创建• 符号线性代数• 因式分解、展开和简化• 符号代数方程求解• 符号微积分• 符号微分方程
![Page 11: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/11.jpg)
一、符号运算的基本操作
1. 什么是符号运算• 与数值运算的区别 ※ 数值运算中必须先对变量赋值,
然后才能参与运算。 ※ 符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。
![Page 12: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/12.jpg)
• 特点: 运算对象可以是没赋值的符号变量,以推理解析的方
式进行,因此不受计算误差累积所带来的困扰。 可以给出完全正确的封闭解或任意精度的数值解 ( 当封闭解不存在时 ) 。
③符号计算指令的调用简单,和经典教科书公式相近。④计算所需的时间较长。• Symbolic Math Toolbox—— 符号运算工具包通过调用
Maple软件实现符号计算的。• Maple软件——主要功能是符号运算,它占据符号软件的主导地位。
![Page 13: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/13.jpg)
2. 字符串与符号变量、符号常量字符串对象 f = 'sin(x)+5x'
f —— 字符串名sin(x)+5x—— 函数表达式' '—— 字符串标识字符串表达式一定要用 ' '单引
号括起来 Matlab才能识别。用 class( ) 来返回对象的数据类型。
![Page 14: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/14.jpg)
‘ ’ 里的内容可以是函数表达式,也可以是方程。例: f1='a*x^2+b*x+c' —— 二次三项式 f2= 'a*x^2+b*x+c=0' —— 方程 f3='Dy+y^2=1' ——微分方程※函数表达式或方程可以赋给字符串或符号变量,以后方便调用。
![Page 15: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/15.jpg)
符号变量• 符号变量是内容可变的符号对象。• 符号变量通常是指一个或几个特定的字
符,不是指符号表达式,甚至可以将一个符号表达式赋值给一个符号变量。
• 符号变量有时也称自由变量,它的命名规则和数值变量的命名规则相同。
• 相关指令为: sym( ) 和 syms( )
( symbolic 的缩写)
![Page 16: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/16.jpg)
例:用函数命令 sym( ) 和 syms( ) 来创建符号对象并检测数据类型。
a=sym('a') 注意两个 a 的区别b=sym('c')classa=class(a)classb=class(b) 可看出两个变量均为符号对象
syms a b c d e f g hwhos 也可以查看所有变量类型从上述比较来看:当需要同时定义多个符号
变量时,使用 syms( )更简洁一些。
![Page 17: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/17.jpg)
符号常量• 当数值常量作为 sym( ) 的输入参量时,
就建立了一个符号对象——符号常量。• 虽然看上去是一个数值量,但已经是一
个符号对象了。例: a=3/4; b='3/4'; c=sym(3/4); d=sym('3/4');
whos 查看变量类型a 为实双精度浮点数值类型; b 为实字符类型; c 和 d 都是符号对象类型。
![Page 18: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/18.jpg)
由符号变量构成的符号函数和符号方程
• 符号表达式是由符号常量、符号变量、符号函数运算符以及专用函数连接起来的符号对象。
• 包括:符号函数和符号方程。判断看带不带等号。例: syms x y z; f1=x*y/z;
f2=x^2+y^2+z^2; f3=f1/f2;
e1=sym('a*x^2+b*x+c')
e2=sym('sin(x)^2+2*cos(x)=1')
e3=sym('Dy-y=x')
![Page 19: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/19.jpg)
3. 符号矩阵的创建 数值矩阵 clear clc A=[1,2;3,4]
A=[a,b;c,d] —— 不识别 用 Matlab 函数 sym创建矩阵命令格式: A=sym('[ ]')
※ 符号矩阵内容同数值矩阵 ※ 需用 sym指令定义,需用 ' '标识 ※ 注意与 '[a,b;c,d]' 的区别
![Page 20: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/20.jpg)
例如: A = sym('[a , 2*b ; 3*a , 0]')
A =
[ a, 2*b]
[3*a, 0]
这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方 括号,这是与 Matlab 数值矩阵
的 一个重要区别。
![Page 21: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/21.jpg)
用字符串直接创建矩阵
模仿Matlab 数值矩阵的创建方法 需保证同一列中各元素字符串有相 同的长度。例: A =['[ a,2*b]'; '[3*a, 0]']
A =
[ a, 2*b]
[3*a, 0]
![Page 22: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/22.jpg)
符号矩阵的修改 a. 直接修改 可用、 键找到所要修改的矩阵,
直接修改 b.指令修改 用 A1=subs(A, 'new', 'old') 来修改
![Page 23: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/23.jpg)
例如: A =[ a, 2*b]
[3*a, 0]
A(2,2)='4*b'A1 = [ a, 2*b]
[3*a, 4*b]
A2=subs(A1, 'c', 'b')
A2 =[ a, 2*c]
[3*a, 4*c]
![Page 24: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/24.jpg)
将数值矩阵转化为符号矩阵 函数调用格式: sym(A)clear A=[1/3,2.5;1/0.7,2/5]A = 0.3333 2.5000 1.4286 0.4000sym(A)ans =[ 1/3, 5/2][10/7, 2/5]
符号矩阵与数值矩阵的转换
![Page 25: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/25.jpg)
将符号矩阵转化为数值矩阵函数调用格式: numeric(A)???
A =
[ 1/3, 5/2]
[10/7, 2/5]
numeric(A)ans = 0.3333 2.5000 1.4286 0.4000
![Page 26: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/26.jpg)
由于 Matlab7.0采用了重载技术,使得符号计算表达式的运算符和基本函数,无论在形状、名称上,还是在使用方法上,都与数值计算中的运算符和基本函数几乎完全相同。这无疑给用户带来了极大的方便。
例外:在符号对象的比较中,没有”大于”、 ”大于等于”、 ”小于”、 ”小于等于”的概念,而只有是否“等于”的概念。
二、符号运算
![Page 27: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/27.jpg)
1. 符号矩阵运算
数值运算中,所有矩阵运算操作指令都比较直观、简单。例如: a=b+c; a=a*b ; A=2
*a^2+3*a-5 等。符号运算中,很多方面在形式上同数值计
算都是相同的,没必要重新学习新的规则。
![Page 28: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/28.jpg)
2. 任意精度的数学运算
在 symbolic 中有三种不同的算术运算:
1. 数值类型 matlab 的浮点算术运算
2. 有理数类型 maple 的精确符号运算
3. vpa类型 maple 的任意精度算术
运算
![Page 29: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/29.jpg)
• 浮点算术运算format long -- ( 定义输出格式 ) 1/2+1/3
ans =
0.83333333333333
• 符号运算sym(1/2)+(1/3)
或 sym(1/2+1/3)
ans =
5/6 --精确解
![Page 30: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/30.jpg)
• 任意精度算术运算digits(n) —— 设置近似解的精读为 n 位有效数字,
默认 32 位有效数字。vpa(x,n) —— 求符号解的近似解,该近似解的有效位数由 n 来决定。
digits(25)
vpa(1/2+1/3)
ans =
.8333333333333333333333333
![Page 31: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/31.jpg)
vpa(5/6,40) ans =.8333333333333333333333333333333333333333 a=sym('[1/4,exp(1);log(3),3/7]')a =[ 1/4,exp(1)][log(3), 3/7]vpa(a,10)ans =[.2500000000, 2.718281828][1.098612289, .4285714286]
![Page 32: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/32.jpg)
3. 符号表达式的化简• 可以对符号计算结果进行简化,诸如因
式分解、同类项合并、符号表达式的展开、符号表达式的化简和通分等等。
• 合并同类项 collect(v) ---- 将表达式 v 的相同次幂的项合并。例: syms x t % 定义基本变量 f=(x-1)*(x-2)*(x-3) %定义符号表达式 collect(f) %合并 f 中 x 的同类项
![Page 33: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/33.jpg)
• expand(s) 将 s 中的各项进行展开,用于多项式,三角函数、指数函数、对数函数。 例: syms x y;
f=(x+y)^3;
f1=expand(f)
f1 =
x^3+3*x^2*y+3*x*y^2+y^3
例: h=cos(x-y)
expand(h)
![Page 34: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/34.jpg)
• factor(S) 将系数为有理数的多项式(矩阵 )S ,表示成低阶多项式相乘的形式,如果不能分解,则返回 S本身。例: syms x y
factor(x^3-y^3)
• simplify( ) 该函数是一个强有力的具有普遍意义的工具,它利用 Maple 化简规则对表达式进行简化。例: S=sym('[(x^2+5*x+6)/(x+2);sqrt(16)]')
simplify(S)
![Page 35: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/35.jpg)
• simple( ) 用几种不同的算术简化规则对符号表达式进行简化,使其用最少的字符来表示。
• 虽然并非表达式中的字符越少,表达式就越简单,但采用这个标准往往能够得到满意的结果,尤其是对于包含三角函数的表达式。例: sym x
simple(cos(x)^2+sin(x)^2)
• 从结果看出, simple比较这些不同函数的结果,最终把最少字符作为标准。
![Page 36: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/36.jpg)
• diff(f) — 对缺省变量求 f 的微分
• diff(f,v) — 对指定变量 v 求微分
• diff(f,n) — 对默认变量求 n 阶微分
• diff(f,v,n) — 对指定变量 v 求 f 的 n 阶微分
例: syms a x
f=sin(a*x)
df=diff(f) dfa=diff(f,a,2)
4. 符号微积分与积分变换
![Page 37: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/37.jpg)
符号表达式的极限• limit(F,x,a) 求当 x→a 时,表达式 F 的极限• limit(F, a) 默认自变量时,趋于 a 的极限• limit(F) 默认自变量,默认 a=0
• limit(F,x,a, 'left') 取 F 的左极限• limit(F,x,a, 'right') 取 F 的右极限例: syms h n x
dc=limit((sin(x+h)-sin(x))/h,h,0)
%按照导数的定义求 sin 的导数
![Page 38: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/38.jpg)
注意:对于极限不存在,返回 NaN
例: limit(1/x,x,0)
limit(1/x,x,0, 'left')
limit(1/x,x,0, 'right')
结果分别为:• ans =
NaN
• ans =
-Inf
• ans =
Inf
![Page 39: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/39.jpg)
• int(f) — 对 f 表达式的缺省变量求不定积分
• int(f,v) — 对 f 表达式的 v 变量求不定积分
• int(f,v,a,b) — 对 f 表达式的 v 变量在( a,b)
区间求定积分
findsym(f) — 可以找出 f 中的每个变量
注意:当函数的积分不存在时, Matlab7.0 将简单地返回原来的积分表达式。
符号表达式的积分
![Page 40: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/40.jpg)
int( ' 被积表达式 ' , ' 积分变量 ' , ' 积分上限 ' , ' 积分下限 ')—— 定积分
——缺省时为不定积分例: int(-2*x/(1+x^2)^2)
ans =
1/(1+x^2)
int(log(x))
int(log10(x))
int(sin(x),x,-pi,pi)
![Page 41: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/41.jpg)
• taylor(f,n,v) —— n 阶泰勒级数展开例: syms x
f=1/(2+cos(x))
r=taylor(f,8)
• symsum(f,v,a,b) — 表达式 f 中变量 v 从 a变到 b 时的有限和例: syms x k
s1=symsum(1/k^2,1,inf)
s2=symsum(x^k,k,0,inf)
上述都是求无穷级数的和
![Page 42: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/42.jpg)
符号积分变换• ztrans(f) —— Z 变换• Invztrans(f) —— 反 Z 变换• Laplace(f) —— 拉氏变换• Invlaplace(f) —— 反拉氏变换• fourier(f) —— 付氏变换• Invfourier(f) —— 反付氏变换 注意 :上述函数均缺省了部分参数
![Page 43: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/43.jpg)
例 1. 计算二重不定积分 dxdyxe xy
F=int(int('x*exp(-x*y)','x'),'y')
例 2. 计算 f='x*exp(-x*10)' 的 Z 变换 F=ztrans(f) F= z*exp(-10)/(z-exp(-10))^2
符号积分的例子
![Page 44: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/44.jpg)
>> syms x y>> F=int(int(x*exp(-x*y),x),y)F =1/y*exp(-x*y)>> syms x>> f=x*exp(-x*10);>> F=ztrans(f)>> F=ztrans(x*exp(-x*10);F =z*exp(-10)/(z-exp(-10))^2
![Page 45: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/45.jpg)
例 3. 计算指数函数 eAt 。用拉氏反变换法计算 eAt 的公式为: eAt = L-1[(SI-A)-1]
系统矩阵 A=
32
10
tttt
tttt
eeee
eeee
22
22
222
2eAt =
结果:
![Page 46: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/46.jpg)
>> a=[0 1;-2 -3];
>> syms s
>> b=(s*eye(2)-a)
b =
[ s, -1]
[ 2, s+3]
>> B=inv(b)
[ (s+3)/(s^2+3*s+2), 1/(s^2+3*s+2)]
[ -2/(s^2+3*s+2), s/(s^2+3*s+2)]
![Page 47: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/47.jpg)
>> b11=ilaplace(sym(b,1,1));b(1,1)=b11;
>> b12=ilaplace(sym(b,1,2));b(1,2)=b12;
>> b21=ilaplace(sym(b,2,1));b(2,1)=b21;
>> b22=ilaplace(sym(b,2,2));b(2,2)=b22;
>> b
b =
[ -exp(-2*t)+2*exp(-t), exp(-t)-exp(-2*t)]
[ -2*exp(-t)+2*exp(-2*t), 2*exp(-2*t)-exp(-t)]
![Page 48: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/48.jpg)
5. 符号代数方程求解
Matlab 符号运算能够解一般的线性方程、非线性方程、超越方程。当方程组不存在符号解时,又无其他自由参数,则给出数值解。命令格式:solve(f,v) —— 求一个方程 f=0 的解
Solve(f1,f2, …fn) —— 求 n 个方程的解
![Page 49: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/49.jpg)
例 1. f = ax2+bx+c 求解f='a*x^2+b*x+c';
• solve(f) —— 对缺省变量 x 求解ans =
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
计算机格式
a
acbb
2
42 一般格式
![Page 50: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/50.jpg)
例 2. 符号方程 cos(x)=sin(x)
tan(2*x)=sin(x) 求解f1=solve('cos(x)=sin(x)'),
f1 =
1/4*pi f2=solve('tan(2*x)=sin(x)')
• solve(f , 'b' ) —— 对指定变量 b 求解
' ' 加与不加效果一样
![Page 51: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/51.jpg)
例 3. 解方程组 x+y+z=1
x-y+z=2
2x-y-z=1
g1='x+y+z=1',g2='x-y+z=2',g3='2*x-y-z=1'
f=solve(g1,g2,g3)
f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')
f =
z = 5/6, y = -1/2, x = 2/3
![Page 52: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/52.jpg)
f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')f = x: [1x1 sym] f.x
ans =2/3 y: [1x1 sym] f.y ans =-1/2 z: [1x1 sym] f.z
ans =5/6 [x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=
1') x = 2/3 y =-1/2 z =5/6
![Page 53: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/53.jpg)
6. 符号微分方程求解 —— 用一个函数可以方便地得到微 分方程的符号解符号微分方程求解指令: dsolve
命令格式: dsolve(f,g)
• f —— 微分方程,可多至 12 个微分方程的求
解; g 为初始条件• 默认自变量为 'x', 可任意指定自变量 't', 'u' 等• 微分方程的各阶导数项以大写字母 D 表示
![Page 54: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/54.jpg)
dt
dy
dx
dy
2
2
dt
yd
n
n
dt
yd
2
2
dx
yd
n
n
dx
yd
或
或
或
y 的一阶导数—— Dy
y 的二阶导数—— D2y
y 的 n 阶导数—— Dny
[y1,y2…]=dsolve(x1,x2,…xn) —— 返回 微分方程的解
![Page 55: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/55.jpg)
一阶微分方程dsolve('Dx=y','Dy=x','x(0)=0','y(0)=1')
ans =
x(t) = sin(t), y(t) = cos(t)二阶微分方程dsolve('D2y=-a^2*y','y(0)=1','Dy(pi/a)=0')
ans =
cos(a*x)
![Page 56: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/56.jpg)
例 .
y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')
ans =
exp(-x)*cos(x)+exp(-x)*sin(x)
ezplot(y) —— 方程解 y(t) 的时间曲线图
2
2
dx
yd
dx
dy2 02 y
00 )(dx
dy,1)0( y 求该方程的解
![Page 57: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/57.jpg)
-6 -4 -2 0 2 4
0
50
100
150
200
250
300
x
exp(-x)*cos(x)+exp(-x)*sin(x)
![Page 58: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/58.jpg)
-6 -4 -2 0 2 4
0
50
100
150
200
250
t
exp(-t) sin(t)+exp(-t) cos(t)
![Page 59: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/59.jpg)
三、 maple 函数——符号运算的扩展maple—— 是专门进行数学运算的软件工具, 具有超强的符号运算能力,提供了 几乎包括所有数学领域的专用函数matlab—— 依赖于 maple 的内核与函数库,扩
展了自己的符号运算功能。 matlab还设计了对 maple库函数的调用功
能使得已有的 maple 数学功能,可以扩充 matla
b
中 , 作为自身符号运算能力的扩展。
![Page 60: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/60.jpg)
1. maple 内核访问函数可以访问 maple 内核的 matlab 函数 :
maple ——— 访问 maple 内核函数 mapleinit —— maple 函数初始化 mpa ———— maple 函数定义 mhelp ——— maple 函数帮助命令 procread —— maple 函数程序安装
![Page 61: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/61.jpg)
. maple 的调用格式maple(' 表达式 ') —— 将表达式送至 maple 内核, 返回符号表达式结果。maple ( ' 函数 ' ,变量 1 ,变量
2) ——调用 maple 函数,传递给定 变量。
![Page 62: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/62.jpg)
例 1. 展开 5 阶 bernoulli 多项式,计算 x=3 时 bernoulli 数。
a=maple('bernoulli(5,x)')
a =
-1/6*x+5/3*x^3+x^5-5/2*x^4
a=maple('bernoulli(5,3)')
a =
85
![Page 63: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/63.jpg)
例 2. 化简三角函数式 sin2x+cos2x
a=maple('simplify(sin(x)^2+cos(x)^2);')
a =
1
例 4. 求 f(t)=e-3tsint 的拉式变换f=maple('laplace(exp(-3*t)*sin(t),t,s);')
f =
1/((s+3)^2+1)
![Page 64: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/64.jpg)
例 4. 寻找二次多项式的完全平方 f (x) = x2+2x+2a=maple('completesquare(x^2+2*x+2)')a =completesquare(x^2+2*x+2) 将工具包
装入内存maple('with(student);')
a=maple('completesquare(x^2+2*x+2)')
a =
(x+1)^2+1
![Page 65: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/65.jpg)
• maple软件中的所有函数,在初始化时并没有完全装入内存,可用 readlib指令把库函数读入内存,或用 with指令将应用工具包装入内存。
• 调用格式maple('readlib( 函数名 );')
maple('with( 工具包名 );')
![Page 66: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/66.jpg)
例 5. 求 sin(x2+y2) 在 x=0,y=0 处泰勒级数展开式, 8 阶截断。
maple('mtaylor(sin(x^2+y^2),[x=0,y=0],8)')
ans =
mtaylor(sin(x^2+y^2),[x = 0, y = 0],8)
maple('readlib(mtaylor);')maple('mtaylor(sin(x^2+y^2),[x=0,y=0],8)')
ans =
x^2+y^2-1/6*x^6-1/2*y^2*x^4-1/2*y^4*x^2-1/6*y^6
![Page 67: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/67.jpg)
2. mpa —— maple 变量定义• 任何一个 matlab 定义的函数 f ,可使用
mpa语句直接调用,还可把 f 定义成 maple 变量 v 。
• maple 的工作空间与 matlab 工作空间是相互独立的, 所以 f 与 v 是属于不同工作空间中的变量
• mpa 的调用格式: mpa('v',f)
mpa v f f 为 matlab 工作空间中已存在的变量
![Page 68: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/68.jpg)
例 . 电磁力计算公式为
试 I=0.5 , x=0.1邻域展开泰勒级数, 3 阶截
断,令常数 ,
1. 直接调用
maple('readlib(mtaylor);')
maple('mtaylor(k*I^2/x^2,[I=0.5,x=0.1],3);')
2
20
4
)(),(
x
NISxIF
4
20NS
k
2
2
),(x
kIxIF
![Page 69: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/69.jpg)
2. 定义符号函数 f(matlab6.1无 map 函数 )f='k*I^2/x^2';maple('mtaylor(f,[I=0.5,x=0.1],3);')ans =mtaylor(f,[I = .5, x = .1],3)mpa('u',f)maple('mtaylor(u,[I=0.5,x=0.1],3);')ans =25.*k-.50e3*k*(x-.1)+.10e3*k*(I-.5)+7500.0
00000000000*k*(x-.1)^2+.1e3*k*(I-.5)^2-.20e4*k*(I-.5)*(x-.1)
![Page 70: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/70.jpg)
注意: matlab 符号运算时,可以识
别 matlab 定义的符号变量,但在调
用 maple 函数时,需将 matlab 变量
定义为 maple 变量后,所调用的函数方可识别和执行
![Page 71: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/71.jpg)
3.mhelp —— maple 函数帮助命令
mhelp 是协助检索 maple库函数的专用命令调用格式: mhelp 相关词条例如: mhelp intro — maple介绍 mhelp maple — maple 命令格式 mhelp tutorial —maple 入门 mhelp index —maple检索
工具词条函数词条
![Page 72: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/72.jpg)
mhelp index 用于工具包检索library ——maple标准库函数packages —— 应用工具包libmisc —— 其它库函数statements —— maple语句描述expressions —— maple 表达式datatypes —— maple 数据格式tables —— maple 表格和阵列procedures —— maple 程序misc —— maple 其它应用
![Page 73: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/73.jpg)
一般帮助文本主要包括以下部分
• FUNCTION—— 函数功能说明
• CALLING SEQUENCE—— 调用格式
• PARAMETERS —— 调用参数说明
• SYNOPSIS —— 语法说明
• EXAMPLES —— 应用举例
• SEE ALSO —— 相关词条
![Page 74: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/74.jpg)
4.maple库函数maple库函数共分四类maple 内部函数:驻留函数任何条件下都可调用 mhelp index[internal]
maple 的外部函数—读库定义部分: 调用时先执行读库命令,因此与内部函 数一样可直接调用 mhelp index[external]
![Page 75: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/75.jpg)
maple 的外部函数—读库装入部分 maple 其余外部函数需要在使用前执行 maple('readlib( 函数名 );') 命令将其装入内存
mhelp index[libmisc]
maple 的惰性函数—不能直接调用,还需一些函数如 mod,evala,evalf 等才能调用
mhelp index[intert]
![Page 76: 第三讲 MATLAB 的符号运算](https://reader036.vdocuments.site/reader036/viewer/2022081416/56813a21550346895da1fd3e/html5/thumbnails/76.jpg)
小 结 本节介绍了 matlab语言的符号运算功能,通过学习应该掌握:• 掌握如何创建、修改符号矩阵• 掌握符号运算功能• maple 函数调用• mhelp检索