实验四 MATLAB 符号计算

Post on 19-Jan-2016

89 views 0 download

description

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

Transcript of 实验四 MATLAB 符号计算

数学实验

1

实验四 MATLAB 符号计算

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

一、 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 才能识别。

数学实验

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

数学实验

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

数学实验

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

数学实验

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

数学实验

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)

数学实验

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

数学实验

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

数学实验

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

数学实验

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

数学实验

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为未知数的方程组

数学实验

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 为参数

数学实验

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 附近的根,

数学实验

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 附近的解

数学实验

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

数学实验

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 误差很大

数学实验

18

实验四 MATLAB 符号计算

1 、微分方程的通解

表达式格式 表达式意义

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

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

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

六、常微分方程的符号解

数学实验

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)

数学实验

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 求微分方程 的通解和满足初始条件

数学实验

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), …

数学实验

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)

数学实验

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)

数学实验

24

实验四 MATLAB 符号计算

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

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

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

数学实验

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

数学实验

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 年来人口的平均增长率是多少 ?