Main Content

differentiate

Diferenciar un objeto cfit o sfit

Descripción

Nota

Utilice estas sintaxis para los objetos cfit.

fx = differentiate(FO, X) diferencia el objeto cfit denominado FO en los puntos especificados por el vector X y devuelve el resultado en fx.

ejemplo

[fx, fxx] = differentiate(FO, X) diferencia el objeto cfit denominado FO en los puntos especificados por el vector X y devuelve el resultado en fx y la segunda derivada en fxx.

Nota

Utilice estas sintaxis para los objetos sfit.

[fx, fy] = differentiate(FO, X, Y) diferencia la superficie FO en los puntos especificados por X e Y y devuelve el resultado en fx y fy.

FO es un objeto de ajuste de superficie (sfit) generado por la función fit.

X e Y deben ser arreglos de doble precisión y del mismo tamaño y forma entre sí.

Todos los argumentos de retorno tienen el mismo tamaño y forma que X e Y.

Si FO representa la superficie z=f(x,y), FX contiene las derivadas con respecto a x, es decir, dfdx, y FY contiene las derivadas con respecto a y, es decir, dfdy.

[fx, fy] = differentiate(FO, [X, Y]), donde X e Y son vectores columna, permite especificar los puntos de evaluación como un único argumento.

[fx, fy, fxx, fxy, fyy] = differentiate(FO, ...) calcula la primera y segunda derivadas del objeto de ajuste de superficie FO.

fxx contiene las segundas derivadas con respecto a x, es decir, 2fx2.

fxy contiene las segundas derivadas mixtas, es decir, 2fxy.

fyy contiene las segundas derivadas con respecto a y, es decir, 2fy2.

Ejemplos

contraer todo

Cree una señal sinusoidal de referencia.

xdata = (0:.1:2*pi)';
y0 = sin(xdata);

Añada a la señal ruido gaussiano dependiente de la respuesta.

noise = 2*y0.*randn(size(y0)); 											
ydata = y0 + noise;

Ajuste los datos ruidosos con un modelo sinusoidal personalizado.

f = fittype('a*sin(b*x)');
fit1 = fit(xdata,ydata,f,'StartPoint',[1 1]);

Encuentre las derivadas del ajuste en los valores predictores.

[d1,d2] = differentiate(fit1,xdata);

Represente los datos, el ajuste y las derivadas.

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 with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers 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.

También puede calcular y representar derivadas directamente con el método plot cfit, como se indica más abajo:

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

Figure contains 3 axes objects. Axes object 1 with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent data, fitted curve. Axes object 2 with xlabel x contains an object of type line. This object represents first derivative. Axes object 3 with xlabel x contains an object of type line. This object represents second derivative.

Sin embargo, el método plot no devuelve datos sobre las derivadas, a diferencia del método differentiate.

Puede utilizar el método differentiate para calcular los gradientes de un ajuste y, a continuación, utilizar la función quiver para representar estos gradientes como flechas. Este ejemplo representa los gradientes sobre una gráfica de contorno.

Cree los puntos de derivación y ajuste los datos.

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

Calcule los gradientes del ajuste mediante la función differentiate.

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

Use la función quiver para representar los gradientes.

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.

Si desea utilizar derivadas en una optimización, puede, por ejemplo, implementar una función objetivo para fmincon de la siguiente manera.

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

Argumentos de entrada

contraer todo

Función que se desea diferenciar, especificada como objeto cfit para curvas o como objeto sfit para superficies.

Puntos en los que diferenciar la función, especificados como un vector. Para las superficies, este argumento debe tener el mismo tamaño y forma que Y.

Puntos en los que diferenciar la función, especificados como un vector. Para las superficies, este argumento debe tener el mismo tamaño y forma que X.

Argumentos de salida

contraer todo

Primera derivada de la función, devuelta como un vector del mismo tamaño y forma que X e Y.

Si FO es una superficie, z=f(x,y), entonces fx contiene las derivadas con respecto a x.

Segunda derivada de la función, devuelta como un vector del mismo tamaño y forma que X e Y.

Si FO es una superficie, z=f(x,y), entonces fxx contiene las segundas derivadas con respecto a x.

Primera derivada de la función, devuelta como un vector del mismo tamaño y forma que X e Y.

Si FO es una superficie, z=f(x,y), entonces fy contiene las derivadas con respecto a y.

Segunda derivada de la función, devuelta como un vector del mismo tamaño y forma que X e Y.

Si FO es una superficie, z=f(x,y), entonces fyy contiene las segundas derivadas con respecto a y.

Segunda derivada mixta de la función, devuelta como un vector del mismo tamaño y forma que X e Y.

Sugerencias

Para los modelos de biblioteca con formas cerradas, la toolbox calcula las derivadas de forma analítica. Para todos los demás modelos, la toolbox calcula la primera derivada utilizando el cociente de diferencias centrado

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

donde x es el valor en el que la toolbox calcula la derivada, Δx es un número pequeño (del orden de la raíz cúbica de eps), f(x+Δx) es fun evaluado en x+Δx y f(xxΔ) es fun evaluado en xΔx.

La toolbox calcula la segunda derivada mediante la expresión

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

La toolbox calcula la derivada mixta para superficies mediante la expresión

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

Historial de versiones

Introducido antes de R2006a