实验四 MATLAB 符号计算
description
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 年来人口的平均增长率是多少 ?