资源描述
第六讲 Matlab微分和积分
理论介绍:微分、有限差分、积分、离散求和
软件求解:函数及常见注意事项
一.一元函数导数与微分
Matlab由命令函数diff来完成求导运算,调用格式为:diff(fun,’variable’,n),其中fun为待求导运算的函数,variable为求导变量,n为求导阶次。
1.一般求导运算
例1 求函数的导数
程序:clear
syms x
y=cos(x)^3-cos(3*x);
dy=diff(y)
2.求高阶导数
例2 求函数的3阶导数
程序:clear
syms x
y=log((x+2)/(1-x));
dy=diff(y,x,3)
注意:求高阶导数运算对计算机硬件要求较高,如果阶次太高可能导致计算机死机。Ctrl+C键终止计算机运算。
3.符号函数导数运算
例3 设函数都是可导函数,求函数的导数
程序:clear
syms x y
F=sym('u(x,y)*v(x,y)');
diff(F)
diff(F,y)
二.一元函数导数、微分的应用
微分式研究函数局部性质的有力工具,通过对函数导数的研究可以清楚的描述出函数的变化趋势,本节主要讨论函数的极值、凹凸性、拐点和函数曲线的变化趋势之间的关系。
例4 讨论函数的极值、单调性和导函数之间的关系
程序:clear
syms x y dy d2y
y=x^2/(1+x^2);
dy=diff(y) %(dy =2*x/(1+x^2)-2*x^3/(1+x^2)^2)
simplify(dy)%(ans= 2*x/(1+x^2)^2)
d2y=diff(y,2) %(d2y =2/(1+x^2)-10*x^2/(1+x^2)^2+8*x^4/(1+x^2)^3)
d2y=simplify(d2y)%(d2y= -2*(-1+3*x^2)/(1+x^2)^3)
lims=[-5,5];
subplot(3,1,1) fplot('x^2/(1+x^2)',lims)
subplot(3,1,2) fplot('2*x/(1+x^2)^2',lims)
subplot(3,1,3) fplot('-2*(-1+3*x^2)/(1+x^2)^3',lims)
例5 求函数的极值点
分析:对f(x)求导,然后令f’(x)=0,解方程可求得函数f(x)的极值点。
程序:clear
syms x
y=x^3+6*x^2+x-1;
dy=diff(y)%dy =3*x^2+12*x+1
px=solve(dy)%px =[-2+1/3*33^(1/2); -2-1/3*33^(1/2)]
ezplot(y)
说明:solve函数有时候不能求出函数的解,注意用ezplot函数画出函数图像,估计解的位置,然后使用fzero函数求解。
三.一元函数的积分
Matlab为积分运算提供了一个简洁而又功能强大的工具,完成积分运算的命令函数为int,int函数的调用格式为:int(fun,variable,a,b),其中fun为待求积分的函数表达式,variable为积分变量,a、b为积分下、上限。
例6 计算不定积分
程序:clear
syms x y a b c
y=sin(a*x)*sin(b*x)*sin(c*x);
int(y,x)
pretty(ans)
说明:利用Matlab积分计算工具,简单的求出了不定积分,Matlab不定积分计算略去了常数项C的声明。
例6 计算定积分
程序:clear
syms x y
y=(x*exp(x))/(1+x)^2;
int(y,0,1)%ans= 1/2*exp(1)-1
练习与思考:有的函数,如果积分区间取得不合适的话Matlab会给出错误警告,比如y=1/x在区间[-1,1]上的积分,这种情况该如何让处理呢?(数值积分)
四.多元函数微分法及其应用
Matlab多元函数求偏导数函数以及隐函数求导仍然使用命令函数diff。
1.求偏导函数和隐函数求导
例7 已知方程计算
分析:令F=x^2+y^2+z^2-4*z,根据隐函数求导定理有
程序:clear
syms x y z
F=x^2+y^2+z^2-4*z;
Fx=diff(F,x);Fz=diff(F,z);
G=-Fx/Fz
练习与思考:对于多元函数,如何求高阶偏导函数、混合偏导函数?
2.复合函数求导
例8 已知计算
程序:clear
syms t x y
t=exp(sin(x));
y=sin(exp(t));
dy=diff(y,x);
dy=simplify(dy);
pretty(dy)
注意:如果把t=exp(sin(x))和y=sin(exp(t))的输入顺序交换,则dy的结果将截然不同,计算结果为0,这说明在使用Matlab计算复合函数导数时,变量声明一定要按照求导过程中对变量的已知顺序进行。
3.梯度计算和方向导数
Matalb符号运算中由jacobian函数来完成梯度的运算,而数值计算中由函数gradient来完成。
(1)符号运算对梯度的计算
符号计算梯度运算中jacobian函数的调用格式为:jacobian(fun,v),参数fun表示符号函数表达式,v是个向量,定义求导变量组成的向量。
例9 设求梯度
程序:clear
syms x y z
f=x^2+y^2+z^2;
gradf=jacobian(f,[x,y,z])%gradf =[ 2*x, 2*y, 2*z]
Grad=subs(subs(subs(gradf,1),-1),2)%Grad = 2 -2 4
注意:subs函数的应用,调用格式为subs(function,variable,n),将n的值赋值给function的变量variable。
(2)数值运算对梯度的计算
数值计算梯度运算中gradient函数的调用格式为:[fx,fy]=gradient(function)。
例10 对进行梯度计算,绘出相应图形。
程序:clear
x=[-1:0.1:1];
[X,Y]=meshgrid(x);
Z=X.^2+Y.^2;
[DX,DY]=gradient(Z)
subplot(2,1,1)
mesh(Z)
subplot(2,1,2)
quiver(DX,DY)
注意:quiver(x,y)函数用来绘制二维函数的向量场。
(3)方向导数的计算
函数f在某点沿某个方向的方向导数jacobian(f)等于这点的梯度和沿这个方向的单位向量v的数量积:dot(jacobian(f),v)。
例11 求函数在点P(1,0)处沿着从点P(1,0)到点Q(2,-1)的方向导数。
程序:clear
syms x y z
z=x*exp(2*y);
v=[sqrt(2)/2,-sqrt(2)/2];%P、Q方向的单位向量
grad=jacobian(z);%计算梯度
T=dot(grad,v);%方向导数
subs(subs(T,'x',1),'y',0)
4.多元函数求极值
多元函数求极值首先要明确数学分析中多元函数求极值的充分条件定理。
练习与思考:分析函数的极值情况。
五.重积分
因为重积分从计算上来说仍是使用定积分的方法,Matlab没有提供专门的命令函数来处理重积分,因此在我们确定了积分限后仍是使用int函数来处理重积分问题。
练习与思考:(1)计算二重积分,
(2)计算V由曲面围成。
六.曲线积分与曲面积分
曲线积分和曲面积分仍是转化为累次积分或定积分来计算,因此对曲面和曲线积分的计算还是采用int函数来计算。
例12 曲线L是椭圆在第一象限部分,求曲线积分
分析:用参数方程来解决问题,曲线参数方程为:x=a*cos(t),y=b*sin(t),于是ds=sqrt(a^2*sin(t)^2+b^2*cos(t)^2)*dt,t的取值范围为[0,pi/2]
程序:clear
syms x y a b t
x=a*cos(t);y=b*sin(t);
dx=diff(x,t);dy=diff(y,t);
ds=sqrt(dx^2+dy^2);
f=x*y;
I=int(f*ds,t,0,pi/2)
例13 曲面S是球面,计算曲面积分
分析:球面参数方程为:x=a*cos(u)*sin(v),y=a*sin(u)*sin(v),z=a*cos(v),于是ds=sqrt(EG-F^2)*dudv,u、v的取值范围为[0,pi/2]和[0,2*pi],其中
练习与思考:(1)曲线AB是圆周的上半部分,求曲线积分
(2) 曲面S是球面在第一象限部分的外侧,计算曲面积分
(3)symsum(fun,variable,a,b)级数求和
6
展开阅读全文