Как написать функцию для аппроксимации первых частных производных - PullRequest
0 голосов
/ 09 апреля 2019

Как указано в заголовке, я пытаюсь написать функцию, которая оценивает частную производную 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.

1 Ответ

1 голос
/ 09 апреля 2019

Вы пропустили скобки в обоих случаях.
Это должно быть 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
...