Первая производная в Matlab

Я хочу вычислить первую производную функции с помощью Matlab. Однако я не знаю формулу функции, у меня есть доступ только к ее входам и выходам. Например:

f([1 2 3 4 5]) = [1 4 9 16 25]; %Square function for the example

Я не удовлетворен результатом:

diff([1 2 3 4 5]) %Which is [3 5 7 9]

Я видел на этом форуме, что я не единственный, кто пытается вычислить первую производную функции с помощью matlab. Но так как я не знаю математическую формулу своей функции, я не могу использовать символический Math Toolbox.

Итак, мои вопросы:

  • Как я могу вычислить производную функции в Matlab, зная только ее входы и выходы?
  • Могу ли я найти способ получить математическую формулу моей функции, чтобы я мог использовать символический набор инструментов Math?

Спасибо за помощь.

2 ответа

Предполагая, что вы можете легко оценить функцию, вот простой способ оценить производную. (Предполагая, что функция ведет себя хорошо)

x = 1:5
h = 0.0001;

dir_est= (f(x)-f(x+h))/h

Обратите внимание, что это очень похоже на определение производного.

Чтобы решить вашу проблему, как описано, я бы использовал комбинацию polyfit а также polyval с подходом грубой силы. Что-то вроде этого.

in = [1 2 3 4 5];
out = fun(in); % in this case, simply y = x.^2 
epsilon = 0.000001;
test = inf;
best = 0;
% some large term count
test = inf;
best = 0;
for n = 0:7
    p = polyfit(in, out, n);
    val = sqrt(sumsqr(polyval(p, in) - out));
    if ((val < test) & (abs(val - test) > epsilon))
        best = n;
        test = val;
    end
end
p = polyfit(in, out, best);
syms x, f;
expo = best:-1:0;
f = p * (x.^expo).';

Тогда вы можете использовать символическую математику в переменной f, В приведенном вами примере это возвращает многочлен с преобладанием x^2,

Тем не менее, кажется, что лучшим подходом было бы использование либо определения производной, либо более надежных численных методов, чем простая разница, как предлагали другие.

Другие вопросы по тегам