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, то есть, ∂2f∂x2.

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

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

Примеры

свернуть все

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

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 objects. Axes object 1 contains 2 objects of type line. These objects represent data, fitted curve. Axes object 2 contains an object of type line. This object represents 1st derivative. Axes object 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 objects. Axes object 1 contains 2 objects of type line. These objects represent data, fitted curve. Axes object 2 contains an object of type line. This object represents first derivative. Axes object 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 object. The axes object 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(x−xΔ) fun оцененный в x−Δx.

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

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

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

∂2f∂x∂y(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