实验四 MATLAB 符号计算

26
数数数数 1 数数数 MATLAB 数数数数 数数数 MATLAB 数数数数 —— MATLAB 数数数数数数数数数数 数数数数数 MATLAB 数数 数数数数数数数数数数数 Symbolic Math Toolbox 一、 MATLAB 数数数数数 数数数数数 数数数数 数数数数数 数数数数数 数数 数数数数数数数数数

description

一、 MATLAB 的符号功能. 二、符号微积分. 三、级数的和. 四、泰勒多项式. 五、解代数方程. 六、常 微分方程的符号解. 七、其他. 实验四 MATLAB 符号计算. —— MATLAB 不仅具有数值运算功能,还开发了在 MATLAB 环境下实现符号计算的工具包 Symbolic Math Toolbox. 一、 MATLAB 的符号功能. 什么是符号运算. 与数值运算的区别 ※ 数值运算中必须先对变量赋值 ,然后才能参与运算。 ※ 符号运算无须事先对独立变量赋值 ,运算结果以标准的符号形式表达。. 特点 : - PowerPoint PPT Presentation

Transcript of 实验四 MATLAB 符号计算

Page 1: 实验四     MATLAB 符号计算

数学实验

1

实验四 MATLAB 符号计算

实验四 MATLAB 符号计算 —— MATLAB 不仅具有数值运算功能,还开发了在 MATLAB 环境下实现符号计算的工具包Symbolic Math Toolbox

一、 MATLAB 的符号功能二、符号微积分三、级数的和四、泰勒多项式

五、解代数方程

七、其他六、常微分方程的符号解

Page 2: 实验四     MATLAB 符号计算

数学实验

2

实验四 MATLAB 符号计算一、 MATLAB 的符号功能1. 什么是符号运算

特点: 运算对象可以是没赋值的符号变量 可以获得任意精度的解

与数值运算的区别 ※ 数值运算中必须先对变量赋值,然后才能参与运算。  ※ 符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。

2. 符号变量与符号表达式f = ' a*(2*x-t)^3+b*sin(4*y) 'f —— 符号变量名a*(2*x-t)^3+b*sin(4*y)—— 符号表达式' '—— 符号标识注:符号表达式一定要用单引号括起来 MATLAB 才能识别。

Page 3: 实验四     MATLAB 符号计算

数学实验

3

实验四 MATLAB 符号计算

3. 建立符号对象的函数—— syms

syms 可以定义多个符号

syms a b c k t x y↙f=a*(2*x-t)^3+b*sin(4*y) ↙

f=a*(2*x-t)^3+b*sin(4*y)

上面定义的符号和表达式可以进行计算

g=f+a*(2*r-1)^3 ↙g =a*(2*x-t)^3+b*sin(4*y)+a*x^(3/2)

可以用 findsym 来确认符号表达式中的符号 findsym (g) ↙

ans =a, b, t, x, y

Page 4: 实验四     MATLAB 符号计算

数学实验

4

实验四 MATLAB 符号计算二、符号微积分1. 求极限—— limit

limit(f) 当符号变量 x (或最接近字母 x )→ 0时函数 f 的极限

limit(f,t,a) 当符号变量 t→a 时函数 f 的极限limit(f,t,a,’left’) ;limit(f,t,a,’right’)

指左右极限

x

xx

sinlim

0

22

2lim

4x

x

x

例 1 求下列极限syms x a t ;limit(sin(x)/x) ↙ans = 1

limit((x-2)/(x^2-4),2) ↙ans = 1/4

Page 5: 实验四     MATLAB 符号计算

数学实验

5

实验四 MATLAB 符号计算

limit((1+2*t/x)^(3*x),x,inf) ↙ ans = exp(6*t)

limit(1/x,x,0,'right') ↙ ans = inf

v = [(1 + a/x)^x, exp(-x)] ;limit(v,x,inf,'left') ↙ans = [ exp(a), 0]

x

x x

t3

21lim

xx

1lim

0

x

x x

a

1lim

x

xe

lim

Page 6: 实验四     MATLAB 符号计算

数学实验

6

实验四 MATLAB 符号计算2. 求导数—— diff

diff(f) 函数 f 对符号变量 x 或(字母表上)最接近字母 x 的符号变量求(偏)导数

diff(f,’t’) 函数 f 对符号变量 t 求导数diff(f,2) 求二阶导数

f='sin(a*x)' ↙

f =sin(a*x)g=diff(f) ↙g = cos(a*x)*a

当微分运算作用于符号矩阵时,是作用于矩阵的每一个元素 .

例如

h=diff(f,'a') ↙h = cos(a*x)*xt=diff(f,'a',2) ↙t = -sin(a*x)*x^2

Page 7: 实验四     MATLAB 符号计算

数学实验

7

实验四 MATLAB 符号计算

int(f) 函数 f 对符号变量 x 或最接近字母 x 的符号变量求不定积分int(f,’t’) 函数 f 对符号变量 t 求不定积分int(f,a,b) 函数 f 对符号变量 x 或最接近字母 x 的符号变量求从 a 到 b 的

定积分int(f,’t’,a,b)

函数 f 对符号变量 t 求从 a 到 b 的定积分

f='sin(a*x)' ; g=int(f) ↙ g =-1/a*cos(a*x)h=int(f,'a') ↙h =-1/x*cos(a*x)

3. 求积分—— int

例如f='exp(-x^2)' ↙f =exp(-x^2)g=int(f) ↙g =1/2*pi^(1/2)*erf(x)

Page 8: 实验四     MATLAB 符号计算

数学实验

8

实验四 MATLAB 符号计算

a=int(f,0,1) ↙a =-(cos(a)-1)/ab=int(f,'a',0,1) ↙b = -(cos(x)-1)/xc=int('exp(-x^2)',0,1) ↙c =1/2*erf(1)*pi^(1/2)

当积分无解析式时,可用 double 计算定积分的值

double(c) ↙ans =0.7468

Page 9: 实验四     MATLAB 符号计算

数学实验

9

实验四 MATLAB 符号计算

symsum(s,t,a,b): 表达式 s 中的符号变量 t 从 a 到 b 的级数和( t 缺省时,设定为 x 或最接近 x 的字母),例如:

三、级数的和

syms k n ;

symsum(k,0,n-1) ↙

ans = 1/2*n^2-1/2*n

symsum(k,0,n) ↙

ans =1/2*(n+1)^2-1/2*n-1/2

Page 10: 实验四     MATLAB 符号计算

数学实验

10

实验四 MATLAB 符号计算

symsum(k^2,0,n) ↙

ans =

1/3*(n+1)^3-1/2*(n+1)^2+1/6*n+1/6

symsum(k^2,0,10) ↙

ans = 385

symsum(1/k^2,1,Inf) ↙

ans =

1/6*pi^2

symsum(k^4,0,n) ↙

ans =

1/5*(n+1)^5-1/2*(n+1)^4+1/3*(n+1)^3-1/30*n-1/30

Page 11: 实验四     MATLAB 符号计算

数学实验

11

实验四 MATLAB 符号计算

四、泰勒多项式taylor(f,n,a) :函数 f 对符号变量 x (或最接近字母 x 的符号变量)在 a 点的 n-1 阶泰勒多项式( n 缺省时设定为 6 , a 缺省时设定为 0 ),例如: syms x t ; taylor(exp(-x)) ↙ans = 1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5taylor(log(x),6,1) ↙ans = x-1-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-1)^4+1/5*(x-1)^5taylor(sin(x),pi/2,6) ↙ans = 1-1/2*(x-1/2*pi)^2+1/24*(x-1/2*pi)^4 taylor(x^t,3,t) ↙ans = 1+log(x)*t+1/2*log(x)^2*t^2

Page 12: 实验四     MATLAB 符号计算

数学实验

12

实验四 MATLAB 符号计算五、解代数方程

解代数方程(组)的基本命令是:solve('eqn1','eqn2',...,'eqnN')solve('eqn1','eqn2',...,'eqnN','var1,var2,...,varN')solve(‘eqn1’,‘eqn2’,...,‘eqnN’,‘var1’,‘var2’,...‘varN’) ,例如

solve('p*sin(x) = r') ↙ans =asin(r/p)

[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0') ↙x =[1][3]y =[1][ -3/2]

x 为未知数, p , r为参数

以 x, y为未知数的方程组

Page 13: 实验四     MATLAB 符号计算

数学实验

13

实验四 MATLAB 符号计算

[u,v] = solve('a*u^2 + v^2 = 0','u - v = 1') ↙ u = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))+1][ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))+1] v = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))][ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))]

S = solve('x^2*y^2 - 2*x - 1 = 0','x^2 - y^2 - 1 = 0') ↙S = x: [8x1 sym] y: [8x1 sym]

只给出解的结构

u , v 为未知数, a 为参数

Page 14: 实验四     MATLAB 符号计算

数学实验

14

实验四 MATLAB 符号计算

[x,y] = solve('sin(x+y)-exp(x)*y = 0','x^2-y = 2') ↙x = -6.0173272500593065641097297117905 y = 34.208227234306296508646214438330

注 : 无代数解时,只能给出数值解

如果求方程的数值解,则有以下命令:roots: 输入多项式的系数(按降幂排列),输出其全部根.poly :输入多项式全部根,输出其系数fzero(fun,x0) :给出函数“ fun” 在 x0 附近的根,

Page 15: 实验四     MATLAB 符号计算

数学实验

15

实验四 MATLAB 符号计算

roots([1,-5,6]) ↙ans = 3 2

poly([2,3]) ↙ans = 1 -5 6

例如

的全部根

2 5 6 0x x

fzero('sin', 3) ↙ Zero found in the interval: [2.8303, 3.1697].ans = 3.1416

sinx=0 在 3 附近的解

Page 16: 实验四     MATLAB 符号计算

数学实验

16

实验四 MATLAB 符号计算

roots([5,0,0,0,5,1]) ↙ans = 0.7528 + 0.7105i 0.7528 - 0.7105i -0.6530 + 0.7130i -0.6530 - 0.7130i -0.1997

fzero('x^5+5*x+1',0) ↙Zero found in the interval: [-0.22627, 0.16].ans = -0.1999

在 0 附近的解

5 5 1 0x x

Page 17: 实验四     MATLAB 符号计算

数学实验

17

solve('x^5+5*x+1=0') ↙ans = 1.1044655068824455162575638841973+1.0598296691525201166749456468980*i -1.0044974557968355184823910746206+1.0609465064060406435760940804509*i -.19993610217121999555034561915339 -1.0044974557968355184823910746206-1.0609465064060406435760940804509*i 1.1044655068824455162575638841973-1.0598296691525201166749456468980*i

从以上的例子可以看出用 roots 误差很大

Page 18: 实验四     MATLAB 符号计算

数学实验

18

实验四 MATLAB 符号计算

1 、微分方程的通解

表达式格式 表达式意义

dsolve(‘ 微分方程’ ) 求微分方程的通解 y=y(t), 格式1

dsolve(‘ 微分方程’,‘ x’) 求微分方程的通解 y=y(x), 格式1

注:( 1 ) t 是默认的独立变量. ( 2 )当 y 是应变量时,用 Dny 表示“ y 的 n 阶导数”

六、常微分方程的符号解

Page 19: 实验四     MATLAB 符号计算

数学实验

19

实验四 MATLAB 符号计算

例 1 求微分方程 的通解. 2'''2 xeyyy

格式 1y=dsolve(‘2*D2y+Dy-y=2*exp(t)’) ↙y = (exp(t)^2+C1+C2*exp(1/2*t)*exp(t))/exp(t)

格式 2 y=dsolve('2*D2y+Dy-y=2*exp(x)','x') ↙y = (exp(x)^2+C1+C2*exp(1/2*x)*exp(x))/exp(x)

例 2 的通解求微分方程 42' xxyy

y=dsolve(‘Dy+2*x *y=4*x’,’x’) ↙y = (2*exp(x^2)+C1)/exp(x^2)

Page 20: 实验四     MATLAB 符号计算

数学实验

20

实验四 MATLAB 符号计算2 、使用定解条件求微分方程的特解

表达式格式 表达式意义

dsolve(‘ 微分方程’,‘定解条件’ )

求微分方程满足定解条件的特解 y=y(t),

dsolve(‘ 微分方程’ ,‘定解条件’,‘ x’)

求微分方程满足定解条件的特解 y=y(x),

y=dsolve(‘D4y=y’) ↙y = (C1*sin(t)*exp(t)+C2*cos(t)*exp(t)+C3*exp(t)^2+C4)/exp(t)y=dsolve(‘D4y=y’,’y(0)=2,Dy(0)=2,D2y(0)=1,D3y(0)=1’,’t’) ↙y = (1/2*sin(t)*exp(t)+1/2*cos(t)*exp(t)+3/2*exp(t)^2)/exp(t)

(4) y y 0 0 2,y y 的特解 1)0(''')0('' yy

例 3 求微分方程 的通解和满足初始条件

Page 21: 实验四     MATLAB 符号计算

数学实验

21

实验四 MATLAB 符号计算

例 4 求微分方程 的特解满足初始条件 1)1( 2

' 2

yx

yyy

y=dsolve(‘Dy=(y^2-2*y)/x’,’y(1)=1’,’x’) ↙y = 2/(1+x^2)

3 、解微分方程组

表达式格式 表达式意义

dsolve(‘ 微分方程组’ ) 求 微 分 方 程 组 的 通 解 x(t),y=y(t),…

dsolve(‘ 微分方程组’ ,‘ 定解条件’ ,‘x’)

求微分方程组满足定解条件的特解 y=y(x),z(x), …

Page 22: 实验四     MATLAB 符号计算

数学实验

22

实验四 MATLAB 符号计算

例 5 求微分方程组的通解

3

,3

yxdt

dy

dt

dx

yxdt

dy

dt

dx

[x,y]=dsolve(‘Dx+Dy=-x+y+3, Dx-Dy=x+y-3’) ↙x = cos(t)*C1+sin(t)*C2+3y = -C1*sin(t)+C2*cos(t)

Page 23: 实验四     MATLAB 符号计算

数学实验

23

实验四 MATLAB 符号计算

例 6 求微分方程组的特解

0)0(,03

,2

3)0(,42

yyxdt

dx

xeydt

dyx

dt

dx t

[x,y]=dsolve(‘2*Dx-4*x+Dy-y=exp(t), Dx+3*x+y=0’,’x(0)=3/2,y(0)=0’) ↙x = 2*cos(t)-4*sin(t)-1/2*exp(t)y = 14*sin(t)+2*exp(t)-2*cos(t)

Page 24: 实验四     MATLAB 符号计算

数学实验

24

实验四 MATLAB 符号计算

七、其他 符号工具箱还有很多用于代数式的命令,我们简单列出一部分,其应用请查看帮助系统.

collect: 合并同类项.expand: 将乘积展开为和式.horner :把多项式转换为嵌套表示形式.factor :分解因式.simplify :化简代数式.simple :输出最简单的形式.subs(s,old,new) :替换.

最后需要说明的是,关于数组、矩阵等的数值运算命令,也适用于符号运算 。

Page 25: 实验四     MATLAB 符号计算

数学实验

25

实验四 MATLAB 符号计算

实验任务

1. 求极限:1

30

tan2

2

2 3 tan sin(1) lim ;(2) lim ;

2 1

1 1(3) lim(1 ) ;(4) lim(sin )

x

x x

n x

n x

x x x

x x

xn n

2. 求导数:1 sin

(1) , ;(2) , ;1 cos

(3) , .

xx xy x y y y

x

y x x x y

求 求

3. 求积分:3

2 2 22

2 0

1 1

4 20 1 0

(1) cos d ;(2) d ;(3) e cos d ;2 1

sin 1(4) d ;(5) d ;(6) d

1

xx xx x x x x

xx xx x x

x x x

Page 26: 实验四     MATLAB 符号计算

数学实验

26

实验四 MATLAB 符号计算

4. 解方程:4(1)33.6 22.12 101.3 0;(2)

x y px x

xy q

5. 解微分方程(组):

2

2

d(1) 3 2;(2) 0;

dd

3 0, (0) 14 d(3) ;(4)

d8 0, (0) 4(1) 0

d

yt y t t xy yt

xx y xy y

y tx x

yx y yy

t

6. 某地区现有人口 200 万, 10 年前为 100 万,又知平均每年净迁入人口 8 万,问 10 年来人口的平均增长率是多少 ?