如何编写一个函数来逼近一阶偏导数
How to write a function to approximate the first partial derivatives
如标题所述,我正在尝试编写一个函数来计算 f 在点 (a,b) 的偏导数。
但是,在 (0,0) 处计算的偏导数的输出太大了。
我的假设是我计算偏导数的算法是错误的。但是我不知道怎么办。
自从我上次使用 MATLAB 以来已经有很长时间了,所以如果我犯了一些错误或使用了低效的代码编写方式,我深表歉意。
我的代码如下:
function derivative = PartialDeriv(f, a, b, i)
h = 0.0001;
fn = zeros(1,2);
if i == 1
fn(i) = (f(a+h,b)-f(a,b)/h);
elseif i==2
fn(i) = (f(a,b+h)-f(a,b)/h);
end
derivative = fn(i);
end
调用我的函数我得到:
PartialDeriv(f, a, b, i)
f 在哪里
f = @(x,y)(x-1).^2+(y-1).^2
我得到:
f = -1.9998e+04
手工做我应该得到-2。
参数中的i为:
PartialDeriv(f,a,b,i)
表示我的索引,为了区分关于x和y的偏导数。
意味着 fn(1) 是关于 x 的偏导数,并且
fn(2) 是关于 y 的偏导数。
你在这两种情况下都漏掉了括号。
它应该是 fn(i) = (f(a+h,b)-f(a,b))/h;
而不是 fn(i) = (f(a+h,b)-f(a,b)/h);
.
稍微修改一下你的代码,我相信这个结构更符合你的意图:
function derivative = PartialDeriv(f, a, b)
h = 0.0001;
derivative = zeros(1,2);
derivative(1) = (f(a+h,b)-f(a,b))/h;
derivative(2) = (f(a,b+h)-f(a,b))/h;
end
如标题所述,我正在尝试编写一个函数来计算 f 在点 (a,b) 的偏导数。
但是,在 (0,0) 处计算的偏导数的输出太大了。
我的假设是我计算偏导数的算法是错误的。但是我不知道怎么办。
自从我上次使用 MATLAB 以来已经有很长时间了,所以如果我犯了一些错误或使用了低效的代码编写方式,我深表歉意。
我的代码如下:
function derivative = PartialDeriv(f, a, b, i)
h = 0.0001;
fn = zeros(1,2);
if i == 1
fn(i) = (f(a+h,b)-f(a,b)/h);
elseif i==2
fn(i) = (f(a,b+h)-f(a,b)/h);
end
derivative = fn(i);
end
调用我的函数我得到:
PartialDeriv(f, a, b, i)
f 在哪里
f = @(x,y)(x-1).^2+(y-1).^2
我得到:
f = -1.9998e+04
手工做我应该得到-2。
参数中的i为:
PartialDeriv(f,a,b,i)
表示我的索引,为了区分关于x和y的偏导数。
意味着 fn(1) 是关于 x 的偏导数,并且 fn(2) 是关于 y 的偏导数。
你在这两种情况下都漏掉了括号。
它应该是 fn(i) = (f(a+h,b)-f(a,b))/h;
而不是 fn(i) = (f(a+h,b)-f(a,b)/h);
.
稍微修改一下你的代码,我相信这个结构更符合你的意图:
function derivative = PartialDeriv(f, a, b)
h = 0.0001;
derivative = zeros(1,2);
derivative(1) = (f(a+h,b)-f(a,b))/h;
derivative(2) = (f(a,b+h)-f(a,b))/h;
end