1.数值导数的计算
[问题]求正弦函数的一阶导数和二阶导数
y = sinx
[数学模型]
函数的一阶导数为
y' = cosx
函数的二阶导数为
y'' = -sinx
[算法]求差分函数为diff,对于数值向量,其功能是求后一元素与前一元素之差,如果数值间隔取得足够小,就能表示导数的近似值。
对于符号函数,可用同样的函数diff计算符号导数。 [程序]zyq3_1diff.m如下。
%正弦函数的导数
clear %清除变量 a=0:5:360; %度数向量 x=a*pi/180; %弧度向量 dx=x(2); %间隔(第1个值为零) y=sin(x); %正弦曲线
dy=diff(y)/dx; %用差分求导数的近似值 dy=[dy(1),(dy(1:end-1)+dy(2:end))/2,dy(end)];%求平均值 figure %创建图形窗口
%plot(x,cos(x),x(1:end-1),dy,'.') %画导数曲线(数值导数偏左) %plot(x,cos(x),x(2:end),dy,'.') %画导数曲线(数值导数偏右) plot(x,cos(x),x,dy,'.') %画导数曲线(数值导数适中)
s=sym('sin(x)'); %定义符号函数 sdy=diff(s); %符号导数 ssdy=subs(sdy,'x',x); %替换数值 hold on %保持图像 plot(x,ssdy,'ro') %画导数曲线 legend('公式解','数值解','符号解',4) %加图例 title('正弦函数的一阶导数') %标题
d2y=diff(dy)/dx; %用差分求导数的近似值 d2y=[d2y(1),(d2y(1:end-1)+d2y(2:end))/2,d2y(end)];%求平均值 figure %创建图形窗口
plot(x,-sin(x),x,d2y,'.') %画导数曲线(数值导数适中) sd2y=diff(s,2); %符号二阶导数 ssd2y=subs(sd2y,'x',x); %替换数值 hold on %保持图像 plot(x,ssd2y,'ro') %画导数曲线
legend('公式解','数值解','符号解',4) %加图例 title('正弦函数的二阶导数') %标题
[图示]
2.函数极值的计算
[问题]求如下函数的极值
y = x3 – 3x2 + x (1)
[数学模型] 求导数
y' = 3x2 – 6x + 1 (2)
令y' = 0,解得
1x(36)=1.8165,0.1835 (3)
3[算法]将自变量设计为向量,函数设计为内线函数,用max函数和min函数求极大值和极小值。
用fminbnd函数也可求函数的极小值。将原函数定义为负的内线函数,用fminbnd函数求极小值,就是原函数的极大值。
将原函数定义为符号函数,求原函数的导数,利用fzero函数可求导数的零点,从而求原函数的极值。
[程序]zqy3_2diff.m如下。
%函数的极值和导数
clear %清除变量 x=0:0.01:2.5; %自变量向量
f=inline('x.^3-3*x.^2+x'); %定义原函数的内线函数 figure %开创图形窗口 plot(x,f(x),'LineWidth',2) %画原函数曲线 grid on %加网格 xlabel('\\itx','FontSize',16) %横坐标 title('函数曲线和极值','FontSize',16) %标题
[ym,im]=max(f(x)); %求极大值和下标 xm=x(im); %求极大值的横坐标 hold on %保持图像 plot(xm,ym,'*') %画极大值
text(xm,ym,[num2str(xm),',',num2str(ym)],'FontSize',16)%标记极大值 [ym,im]=min(f(x)); %求极小值和下标 xm=x(im); %求极小值的横坐标 plot(xm,ym,'*') %画极小值
text(xm,ym,[num2str(xm),',',num2str(ym)],'FontSize',16)%标记极小值 xm=fminbnd(f,0,3); %求最小值 plot(xm,f(xm),'o') %画极小值
text(xm,0,[num2str(xm),',',num2str(f(xm))],'FontSize',16)%显示极小值 ff=inline('-(x.^3-3*x.^2+x)'); %定义原函数的内线函数 xm=fminbnd(ff,0,3); %求最小值 plot(xm,f(xm),'o') %画极小值
text(xm,0,[num2str(xm),',',num2str(f(xm))],'FontSize',16)%显示极小值 %return
y=sym('x^3-3*x^2+x') %原函数的符号函数 dy=diff(y) %求导数
df=inline(char(dy)) %定义导数的内线函数 x1=fzero(df,0) %求零点 x2=fzero(df,2) %求零点 stem([x1,x2],[f(x1),f(x2)],'--o') %画杆线
text(x1,0,[num2str(x1),',',num2str(f(x1))],'FontSize',16)%标记极值 text(x2,0,[num2str(x2),',',num2str(f(x2))],'FontSize',16)%标记极值
[结果] y =
x^3-3*x^2+x dy =
3*x^2-6*x+1 df =
Inline function: df(x) = 3*x^2-6*x+1 x1 =
0.1835 x2 =
1.8165
3.参数方程的导数
[问题]求下面参数方程的一阶导数和二阶导数
x1 (1) t1yt (2)
2(t1)[数学模型] 由(1)式得
t1x1 上式代入(2)式得
y = x – x2 这是开口向下的抛物线。其导数为
y' = 1 – 2x 这是一条直线。由此可得二阶导数
y'' = – 2 将(1)式和(2)式对时间求导数
dx1dt(t1)2 dy(t1)2t2(t1)t1dt(t1)4(t1)3 y对x的一阶导数为
ydydxdy/dtdx/dtt1t1 将(3)式代入上式可得(7)式。上式再对时间求导数
dy2dt(t1)2 y对x的二阶导数为
ydydxdy/dtdx/dt2 [算法]将x和y定义为参数t的符号函数,依次求符号导数。 [程序]zqy3_3diff.m如下。
%参数方程导数的计算
clear %清除变量 x=sym('1/(t+1)'); %定义x符号函数 y=sym('t/(t+1)^2'); %定义y符号函数 t=-0.5:0.1:20; %参数向量 xx=subs(x,'t',t); %替换数值求横坐标 yy=subs(y,'t',t); %替换数值求纵坐标 figure %创建图形窗口
(3) (4)
(5)
(6)
(7) (8) (9) (10) (11) plot(xx,yy,'LineWidth',2) %画函数曲线 grid on %加网格 xlabel('\\itx','FontSize',16) %横坐标 ylabel('\\ity','FontSize',16) %纵坐标 title('函数曲线','FontSize',16) %标题
dx=diff(x) %求x符号导数 dy=diff(y) %求y符号导数 dy_dx=dy/dx %求y对x的导数 simplify(dy_dx) %化简
dy=subs(dy_dx,'t',t); %替换数值求导数 figure %创建图形窗口 plot(xx,dy,'LineWidth',2) %画导数曲线 grid on %加网格 xlabel('\\itx','FontSize',16) %横坐标 ylabel('d\\ity\\rm/d\\itx','FontSize',16) %纵坐标 title('函数的导数曲线','FontSize',16) %标题
d2y=diff(dy_dx) %求符号二阶导数 d2y_dx2=d2y/dx %求y对x的二阶导数 simplify(d2y_dx2) %化简
[结果] dx =
-1/(t+1)^2 dy =
1/(t+1)^2-2*t/(t+1)^3 dy_dx =
-(1/(t+1)^2-2*t/(t+1)^3)*(t+1)^2 ans =
(t-1)/(t+1) d2y =
-(-4/(t+1)^3+6*t/(t+1)^4)*(t+1)^2-2*(1/(t+1)^2-2*t/(t+1)^3)*(t+1) d2y_dx2 =
-(-(-4/(t+1)^3+6*t/(t+1)^4)*(t+1)^2-2*(1/(t+1)^2-2*t/(t+1)^3)*(t+1))*(t+1)^2
ans = -2
4.隐函数的导数
[问题]求下面参数方程的一阶导数和二阶导数
y5 + 2y – x – 3x7 = 0 (1)
[数学模型]
(1)式对x求导数
5y4y' + 2y' – 1 – 21x6 = 0 (2)
因此y对x的一阶导数为
121x6 (3) y425yy对x的二阶导数为
(25y4)126x5(121x6)20y3y (4) y42(25y)将(3)式代入上式,可得
126x520(121x6)2y3 (5) y25y4(25y4)3[算法]利用符号计算求一阶导数和二阶导数。
取横坐标和纵坐标向量,化为矩阵,计算表达式(1)之值,利用contour函数画零值线,这就是函数曲线。取出零值线的横坐标和纵坐标,利用(3)式和(5)式画导数曲线。
[程序]zqy3_4diff.m如下。
%隐函数导数的计算
clear %清除变量 syms dy y %定义符号变量 z=sym('y(x)^5+2*y(x)-x-3*x^7'); %定义符号函数 dz=diff(z,'x') %求符号导数
s=subs(dz,{'diff(y(x),x)','y(x)'},{dy,y})%替换导数和变量符号 dy_dx=solve(s,dy) %求符号导数 d=subs(dy_dx,{'y'},{'y(x)'}) %替换y为函数y(x) d2z=diff(d) %求导数
d2y_dx2=subs(d2z,{'diff(y(x),x)','y(x)'},{dy_dx,y})%替换导数和变量符号
x=-2:0.01:2; %横坐标向量 y=-2:0.01:2; %纵坐标向量 [X,Y]=meshgrid(x,y); %坐标矩阵 Z=Y.^5+2*Y-X-3*X.^7; %二元函数值 figure %创建图形窗口 C=contour(x,y,Z,[0,0]); %画零值线 grid on %加网格 xlabel('\\itx','FontSize',16) %横坐标
ylabel('\\ity','FontSize',16) %纵坐标 title('函数曲线','FontSize',16) %标题 x=C(1,2:end); %取横坐标 y=C(2,2:end); %取纵坐标 hold on %保持图像 plot(x,y,'.') %再画函数曲线
dy=(1+21*x.^6)./(2+5*y.^4); %一阶导数 figure %创建图形窗口 plot(x,dy,'LineWidth',2) %画导数曲线 grid on %加网格 xlabel('\\itx','FontSize',16) %横坐标 ylabel('d\\ity\\rm/d\\itx','FontSize',16) %纵坐标 title('一阶导数曲线','FontSize',16) %标题
d2y=126*x.^5./(2+5*y.^4)-20*(1+21*x.^6).^2.*y.^3./(2+5*y.^4).^3;%二阶导数 figure %创建图形窗口 plot(x,d2y,'LineWidth',2) %画二阶导数曲线 grid on %加网格 xlabel('\\itx','FontSize',16) %横坐标 ylabel('d^2\\ity\\rm/d\\itx\\rm^2','FontSize',16)%纵坐标 title('二阶导数曲线','FontSize',16) %标题
[结果] dz =
5*y(x)^4*diff(y(x),x)+2*diff(y(x),x)-1-21*x^6 s =
5*y^4*dy+2*dy-1-21*x^6 dy_dx =
(1+21*x^6)/(5*y^4+2) d =
(1+21*x^6)/(5*y(x)^4+2) d2z =
126*x^5/(5*y(x)^4+2)-20*(1+21*x^6)/(5*y(x)^4+2)^2*y(x)^3*diff(y(x),x) d2y_dx2 =
126*x^5/(5*y^4+2)-20*(1+21*x^6)^2/(5*y^4+2)^3*y^3
作业:(1)求余弦函数的一阶和二阶导数,通过曲线验证结果。 (2)求下面参数方程的一阶导数和二阶导数
x = t – ln(t + 1) (1) y = t3 + t2 (2)
湖南大学物电院 周群益MATLAB电子教案之三。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo3.com 版权所有 蜀ICP备2023022190号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务