Объект Differentiate cfit или sfit
fx = differentiate(FO, X)
[fx, fxx] = differentiate(...)
[fx, fy] = differentiate(FO, X, Y)
[fx, fy] = differentiate(FO, [x, y])
[fx, fy, fxx, fxy, fyy] = differentiate(FO, ...)
Для кривых
fx = differentiate(FO, X) дифференцирует объект cfit FO в точках, заданных векторным X, и возвращает результат в fx.
[fx, fxx] = differentiate(...) также возвращает вторую производную в fxx.
Все возвращаемые аргументы одного размера и формируют как X.
Для поверхностей
[fx, fy] = differentiate(FO, X, Y) дифференцирует поверхностный FO в точках, заданных X и Y, и возвращает результат в fx и fy.
FO является поверхностным подходящим объектом (sfit), сгенерированным функцией fit.
X и Y должны быть массивами с двойной точностью и тем же размером и формой друг как друг.
Все возвращаемые аргументы одного размера и формируют как X и Y.
Если FO представляет поверхность , затем FX содержит производные относительно x, то есть, , и FY содержит производные относительно y, то есть, .
[fx, fy] = differentiate(FO, [x, y]), то, где X и Y являются вектор-столбцами, позволяет вам задавать точки оценки как отдельный аргумент.
[fx, fy, fxx, fxy, fyy] = differentiate(FO, ...) вычисляет первые и вторые производные поверхностного подходящего объекта FO.
fxx содержит вторые производные относительно x, то есть, .
fxy содержит смешанные вторые производные, то есть, .
fyy содержит вторые производные относительно y, то есть, .
Для кривых
Создайте базовый синусоидальный сигнал:
xdata = (0:.1:2*pi)'; y0 = sin(xdata);
Добавьте зависимый ответом Гауссов шум в сигнал:
noise = 2*y0.*randn(size(y0)); ydata = y0 + noise;
Соответствуйте шумным данным пользовательской синусоидальной моделью:
f = fittype('a*sin(b*x)');
fit1 = fit(xdata,ydata,f,'StartPoint',[1 1]);Найдите производные сглаженной функции в предикторах:
[d1,d2] = differentiate(fit1,xdata);
Отобразите на графике данные, подгонку и производные:
subplot(3,1,1)
plot(fit1,xdata,ydata) % cfit plot method
subplot(3,1,2)
plot(xdata,d1,'m') % double plot method
grid on
legend('1st derivative')
subplot(3,1,3)
plot(xdata,d2,'c') % double plot method
grid on
legend('2nd derivative')

Можно также вычислить и построить производные непосредственно с
методом plot cfit, можно следующим образом:
plot(fit1,xdata,ydata,{'fit','deriv1','deriv2'})Метод plot, однако, не возвращает данные по производным, в отличие от метода differentiate.
Для поверхностей
Можно использовать метод differentiate, чтобы вычислить градиенты подгонки и затем использовать функцию quiver, чтобы построить эти градиенты как стрелки. Следующий пример строит градиенты поверх контурного графика.
x = [0.64;0.95;0.21;0.71;0.24;0.12;0.61;0.45;0.46;... 0.66;0.77;0.35;0.66]; y = [0.42;0.84;0.83;0.26;0.61;0.58;0.54;0.87;0.26;... 0.32;0.12;0.94;0.65]; z = [0.49;0.051;0.27;0.59;0.35;0.41;0.3;0.084;0.6;... 0.58;0.37;0.19;0.19]; fo = fit( [x, y], z, 'poly32', 'normalize', 'on' ); [xx, yy] = meshgrid( 0:0.04:1, 0:0.05:1 ); [fx, fy] = differentiate( fo, xx, yy ); plot( fo, 'Style', 'Contour' ); hold on h = quiver( xx, yy, fx, fy, 'r', 'LineWidth', 2 ); hold off colormap( copper )

Если вы хотите использовать производные в оптимизации, можно, например, реализовать целевую функцию для fmincon можно следующим образом.
function [z, g, H] = objectiveWithHessian( xy )
% The input xy represents a single evaluation point
z = f( xy );
if nargout > 1
[fx, fy, fxx, fxy, fyy] = differentiate( f, xy );
g = [fx, fy];
H = [fxx, fxy; fxy, fyy];
end
endДля моделей библиотеки с закрытыми формами тулбокс вычисляет производные аналитически. Для всех других моделей тулбокс вычисляет первую производную с помощью отношения приращений в центре
где x является значением, в котором тулбокс вычисляет производную, небольшое число (на порядке кубического корня eps), fun, оцененный в , и fun, оцененный в .
Тулбокс вычисляет вторую производную с помощью выражения
Тулбокс вычисляет смешанную производную для поверхностей с помощью выражения