作者:半学修心半读书
编辑:Matlab学习空间
导数又叫微商,是数学微积分领域的基础知识,几乎任何与数学建模有关的任务都离不开导数。举一个最简单的例子,求曲线在某点处的斜率就是求函数在改点的导数值;求导数分为求一阶导数和多阶导数,按函数形式分为求显函数的导数和求隐函数的导数。具体数学原理在此不再阐述,下面对利用MATLAB求导数的方案展开讨论。
01利用工具箱diff函数求导
基本形式为
D=diff(f,x,n)
其中,D是求得的导数,f是函数的符号表达式,x是符号变量, n是求导阶数,其默认值为1(即不设定参数n时只求一阶导)。
例如,
syms x;
D=diff(sin(x^2),x)
结果为
由于未输入阶数参数,默认求函数的一阶导。
02
求隐函数导数
例如,求由方程e^y+xy-e=0所确定的隐函数的导数dy/dx。思路是:
(1)建立含有x和y的新函数F;
(2)F对x求导(求完导的函数带有dy/dx);
(3)然后从求完导的函数中解出dy/dx。
代码如下:
syms x
y=sym('y(x)'); %利用sym函数建立y
F=exp (y) +x*y-exp (1);
dFdx=diff(F,x);
[r,s]=subexpr(dFdx,'s'); % subexpr函数提取公因子(即dydx)
dydx=solve(r,'s') %求解dydx
得出结果为
03
参数方程确定的函数导数
若x=f(t)和y=g(t),则y对x 的1阶导数为dy/dt=f'(t)/g'(t),根据递推公式,n阶导数为
求参数方程的低阶导数(2、3阶等),通常使用的策略是一阶一阶求导。而针对高阶导数一般采用准备好的求导函数求导,这里给出一个参数方程求高阶导的通用函数代码:
function result=diff_para(y,x,t,n)
% diff_para 参数方程求导
% 输入参数:
% ---y,x:参数方程的符号表达式
% ---t:参数方程的符号自变量
% ---n:求导阶次
% 输出参数:
% ---result:参数方程求导结果
% 变量:
% ---nargin:输入参数数目
if nargin<4
n=1;
end
if nargin==2 || isempty(t)
t=symvar(x); %搜索标识符函数symvar,找出x中的标识符
if length(t)>1
error('The Symbolic variable not point out.')
end
end
if n==1
result=diff(y,t)/diff(x,t);
else
result=diff(diff_para(y,x,t,n-1),t)/diff(x,t);
end
使用上面这个函数时,若输入参数个数小于4个,指定求导阶次n为1; 输入参数个数为2或第3个输入参数为空时,指定符号自变量t由自由变量替代;最后的if-else语句进行1阶或者多阶的求导(多阶为递归算法求导)。