differentiate

Дифференцируйте cfit или sfit объект

Описание

Примечание

Используйте эти синтаксисы для cfit объекты.

fx = differentiate(FO, X) дифференцирует cfit объект FO в точках, заданных векторным X и возвращает результат в fx.

пример

[fx, fxx] = differentiate(FO, X) дифференцирует cfit объект FO в точках, заданных векторным X и возвращает результат в fx и вторая производная в fxx.

Примечание

Используйте эти синтаксисы для sfit объекты.

[fx, fy] = differentiate(FO, X, Y) дифференцирует поверхностный FO в точках, заданных X и Y и возвращает результат в fx и fy.

FO поверхностная подгонка (sfit) объект сгенерирован fit функция.

X и Y должны быть массивы с двойной точностью и тот же размер и форма друг как друг.

Все возвращаемые аргументы одного размера и формируют как X и Y.

Если FO представляет поверхность z=f(x,y), затем FX содержит производные относительно x, то есть, dfdx, и FY содержит производные относительно y, то есть, dfdy.

[fx, fy] = differentiate(FO, [X, Y]), где X и Y вектор-столбцы, позволяет вам задавать точки оценки как отдельный аргумент.

[fx, fy, fxx, fxy, fyy] = differentiate(FO, ...) вычисляет первые и вторые производные поверхностного подходящего объекта FO.

fxx содержит вторые производные относительно x, то есть, 2fx2.

fxy содержит смешанные вторые производные, то есть, 2fxy.

fyy содержит вторые производные относительно y, то есть, 2fy2.

Примеры

свернуть все

Создайте базовый синусоидальный сигнал.

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')

Figure contains 3 axes. Axes 1 contains 2 objects of type line. These objects represent data, fitted curve. Axes 2 contains an object of type line. This object represents 1st derivative. Axes 3 contains an object of type line. This object represents 2nd derivative.

Можно также вычислить и построить производные непосредственно с cfit plot метод, можно следующим образом:

figure
plot(fit1,xdata,ydata,{'fit','deriv1','deriv2'})

Figure contains 3 axes. Axes 1 contains 2 objects of type line. These objects represent data, fitted curve. Axes 2 contains an object of type line. This object represents first derivative. Axes 3 contains an object of type line. This object represents second derivative.

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 );

Вычислите градиенты подгонки с помощью differentiate функция.

[fx, fy] = differentiate( fo, xx, yy );

Используйте quiver функционируйте, чтобы построить градиенты.

plot( fo, 'Style', 'Contour' );
hold on
h = quiver( xx, yy, fx, fy, 'r', 'LineWidth', 2 );
hold off
colormap( copper )

Figure contains an axes. The axes contains 2 objects of type contour, quiver.

Если вы хотите использовать производные в оптимизации, можно, например, реализовать целевую функцию для 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

Входные параметры

свернуть все

Функция, чтобы дифференцироваться в виде cfit объект для кривых или как sfit объект для поверхностей.

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

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

Выходные аргументы

свернуть все

Первая производная функции, возвращенной как вектор, одного размера и форма X и Y.

Если FO является поверхностью, z=f(x,y), затем fx содержит производные относительно x.

Вторая производная функции, возвращенной как вектор, одного размера и форма X и Y.

Если FO является поверхностью, z=f(x,y), затем fxx содержит вторые производные относительно x.

Первая производная функции, возвращенной как вектор, одного размера и форма X и Y.

Если FO является поверхностью, z=f(x,y), затем fy содержит производные относительно y.

Вторая производная функции, возвращенной как вектор, одного размера и форма X и Y.

Если FO является поверхностью, z=f(x,y), затем fyy содержит вторые производные относительно y.

Смешанная вторая производная функции, возвращенной как вектор, одного размера и форма X и Y.

Советы

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

dfdx=f(x+Δx)f(xΔx)2Δx

где x является значением, в котором тулбокс вычисляет производную, Δx небольшое число (порядка кубического корня eps), f(x+Δx) fun оцененный в x+Δx, и f(xxΔ) fun оцененный в xΔx.

Тулбокс вычисляет вторую производную с помощью выражения

d2fdx2=f(x+Δx)+f(xΔx)2f(x)(Δx)2

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

2fxy(x,y)=f(x+Δx,y+Δy)f(xΔx,y+Δy)f(x+Δx,yΔy)+f(xΔx,yΔy)4ΔxΔy

Смотрите также

| |

Представлено до R2006a