暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Matlab-高等数学-导数与微分

不糊涂录 2021-09-26
183

一.计算导数:

1.符号解

①显函数

D=diff(fx,x,n);


②隐函数


syms x y
F=exp(y)+x*y-exp(1);
D=-diff(F,y,1)/diff(F,x,1);


③参数方程

function result=diff_para(y,x,t,n)
    % y,x:参数方程表达式
    % t:参数方程符号自变量
    % n:求导阶次
    if n==1
        result=diff(y,t)/diff(y,x);
    else
        result=diff_para(y,x,t,n-1)/diff(x,t);
    end
end


2.数值解(针对离散数据)

原理:已有离散数据,用插值多项式求出其近似函数,然后计算离散点处的导数值

function d=poly_str(xd,yd,xi,N)
    % xd,yd:离散数据
    % xi:数值求导点
    % N:求导阶次
    L=length(xd)-1;
    p=polyfit(xd,yd,L);
    for k=1:N
        p=polyder(p);
    end
    d=polyval(p,xi);
end


3.例子:计算sin(x)的高阶导数


fig=figure;
fig.Color=[0 0 0];
syms x
f=sin(x);
for i=1:11
    fplot(f,[0,2*pi+1],'LineWidth',1.5);
    ax=gca;
    
    ax.XColor=[1,1,1];
    ax.YColor=[1,1,1];
    ax.Color=[0,0,0];
    ax.Box='off';
    ax.XAxisLocation='origin';
    ax.YAxisLocation='origin';
    xticks(0:pi/2:2*pi);
    xticklabels({'0','\pi/2','\pi','3/2*\pi','2*\pi'});
    ylim([-1,1]);
    title([num2str(i),'阶导'],'Color',[1 1 1]);
    
    pause(0.2);
    d=diff(f,x,1);
    f=d;
    
    frame = getframe(fig);
    im = frame2im(frame);
    [A,map] = rgb2ind(im,256);
    if i == 1 
        imwrite(A,map,'1.gif','gif','LoopCount',Inf,'DelayTime',0.5);
    else
        imwrite(A,map,'1.gif','gif','WriteMode','append','DelayTime',0.5);
    end
end


二.计算微分:

syms x
y=sin(x);
dy=[char(diff(y,x,1)),'dx'];


三.泰勒公式:

1.函数

% x,y:数据点坐标
% x0:展开位置
% i:展开至i-1阶
r=taylor(y,x,x0,'Order',i);


2.工具箱

taylortool




3.例子:演示y=sin(x)在x=0处泰勒公式展开情况


x1=-2*pi-0.1:0.01:2*pi+0.1;
y1=sin(x1);
fig=figure;
fig.Color=[0 0 0];
p1=plot(x1,y1,'LineWidth',1.5,'Color',[0.1216 0.4706 0.7059]);
ylim([-2,2]);
xlim([-2*pi-0.1,2*pi+0.1]);
hold on;

syms x
y=sin(x);
for i=1:14 
    r=taylor(y,x,0,'Order',i);
    p2=fplot(r,[-2*pi-0.1,2*pi+0.1],'LineWidth',1.5,'Color',[0.8941 0.102 0.1098]);

    ax=gca;
    ax.XColor=[1,1,1];
    ax.YColor=[1,1,1];
    ax.Color=[0,0,0];
    ax.Box='off';
    ax.XAxisLocation='origin';
    ax.YAxisLocation='origin';
    title(['y=',char(r)],'Interpreter','latex','FontSize',10,'Color',[1,1,1]);
    
    frame = getframe(fig);
    im = frame2im(frame);
    [A,map] = rgb2ind(im,256);
    if i == 1 
        imwrite(A,map,'2.gif','gif','LoopCount',Inf,'DelayTime',0.5);
    else
        imwrite(A,map,'2.gif','gif','WriteMode','append','DelayTime',0.5);
    end
    pause(0.2);
    delete(p2);
end


参考资料:《基于MATLAB的高等问题求解》

文章转载自不糊涂录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论