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

时间:2019-04-08 23:37:47

标签: matlab derivative

正如标题中所述,我正在尝试编写一个函数来计算点(a,b)上f的偏导数。

但是,在(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的偏导数。

1 个答案:

答案 0 :(得分:1)

在两种情况下您都错过了括号。
应该是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