如何编写一个函数来逼近一阶偏导数

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