总述
由前面给出的算法,可以编写出如下函数来求解隐函数的偏导数。
函数说明
function dy = impldiff(f, x, y, n)
%impldiff
%隐函数求导
% 调用格式:
% f1 = impldiff(f, x, y, n)
% 其中:f=f(x,y), n为导数阶次
% 注意:该函数求解后有时需要手工化简
%
% Examples:
% 已知二元隐函数 z=f(x,y),求该函数的偏导数。
% MATLAB求解语句:
% syms x y
% f=(x^2-2*x)*exp(-x^2-y^2-x*y)
% F1=impldiff(f,x,y,1) % 1阶
% F2=impldiff(f,x,y,2) % 2阶
% F3=impldiff(f,x,y,3); % 3阶
应用举例
例1
问题: 已知二元隐函数 z = f ( x , y ) = ( x 2 − 2 x ) e − x 2 − y 2 − x y = 0 z=f(x,y)=(x^2-2x)e^{-x^2-y^2-xy}=0 z=f(x,y)=(x2−2x)e−x2−y2−xy=0, 求该函数的偏导数。
代码如下:
syms x y
f = (x^2-2*x)*exp(-x^2-y^2-x*y)
F1 = impldiff(f,x,y,1) % 1阶
F2 = impldiff(f,x,y,2) % 2阶
F3 = impldiff(f,x,y,3); % 3阶
[n,d]=numden(F3); n=simplify(n); F3=n/d % 化简
例2
问题: 已知二元隐函数 x 2 + x y + y 2 = 3 x^2+xy+y^2=3 x2+xy+y2=3, 求该函数的偏导数。
代码如下:
syms x y;
f=x^2+x*y+y^2-3;
f1=impldiff(f,x,y,1); F1=subs(f1,x^2+x*y+y^2,3)
f2=impldiff(f,x,y,2); F2=subs(f2,x^2+x*y+y^2,3)
f3=impldiff(f,x,y,3); F3=subs(f3,x^2+x*y+y^2,3)
f4=impldiff(f,x,y,4); F4=subs(f4,x^2+x*y+y^2,3)
F
1
,
F
2
,
F
3
F_1, F_2, F_3
F1,F2,F3分别为:
F
4
F_4
F4为:
化简后得:
函数实现
function dy = impldiff(f, x, y, n)
if mod(n,1)~=0
error('n should positive integer, please correct')
else
F1 = -simplify(diff(f,x)/diff(f,y)); dy = F1;
for i=2:n
dy = simplify(diff(dy,x)+diff(dy,y)*F1);
end
end
此函数源文件可前往下面网址下载: