Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

fittype

Tipo de ajuste para curvas y superficies

Descripción

ejemplo

aFittype = fittype(libraryModelName) crea el objeto fittype aFittype para el modelo especificado por libraryModelName.

aFittype = fittype(expression) crea un tipo de ajuste para el modelo especificado por la expresión de MATLAB®.

ejemplo

aFittype = fittype(expression,Name,Value) construye el tipo de ajuste con opciones adicionales especificadas por uno o más argumentos de par Name,Value.

ejemplo

aFittype = fittype(linearModelTerms) crea un tipo de ajuste para un modelo lineal personalizado con términos especificados por las expresiones en linearModelTerms.

ejemplo

aFittype = fittype(linearModelTerms,Name,Value) construye el tipo de ajuste con opciones adicionales especificadas por uno o más argumentos de par Name,Value.

ejemplo

aFittype = fittype(anonymousFunction) crea un tipo de ajuste para el modelo especificado por anonymousFunction.

ejemplo

aFittype = fittype(anonymousFunction,Name,Value) construye el tipo de ajuste con opciones adicionales especificadas por uno o más argumentos de par Name,Value.

Ejemplos

contraer todo

Construya tipos de ajuste especificando nombres de modelos de biblioteca.

Construya un objeto fittype para el modelo polinomial cúbico de la biblioteca.

f = fittype('poly3')
f = 
     Linear model Poly3:
     f(p1,p2,p3,p4,x) = p1*x^3 + p2*x^2 + p3*x + p4

Construya un tipo de ajuste para el modelo de biblioteca rat33 (un modelo racional de tercer grado para el numerador y el denominador).

f = fittype('rat33')
f = 
     General model Rat33:
     f(p1,p2,p3,p4,q1,q2,q3,x) = (p1*x^3 + p2*x^2 + p3*x + p4) /
               (x^3 + q1*x^2 + q2*x + q3)

Para ver una lista de nombres de modelos de biblioteca, consulte libraryModelName.

Cree un tipo de ajuste para un modelo no lineal personalizado, designando n como el parámetro dependiente de problemas y u como la variable independiente.

g = fittype("n*u^a",...
            problem="n",...
            independent="u")
g = 
     General model:
     g(a,n,u) = n*u^a

Cree un tipo de ajuste para un ajuste logarítmico para ciertos datos, utilice el tipo de ajuste para crear un ajuste y, después, represente el ajuste.

x = linspace(1,100);  
y = 7*log(x+5);
myfittype = fittype("a*log(x+b)",...
    dependent="y",independent="x",...
    coefficients=["a" "b"])
myfittype = 
     General model:
     myfittype(a,b,x) = a*log(x+b)
myfit = fit(x',y',myfittype)
Warning: Start point not provided, choosing random start point.
myfit = 
     General model:
     myfit(x) = a*log(x+b)
     Coefficients (with 95% confidence bounds):
       a =           7  (7, 7)
       b =           5  (5, 5)
plot(myfit,x,y)

Figure contains an axes object. The axes object 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.

La gráfica muestra que el ajuste sigue los datos.

Para utilizar un algoritmo de ajuste lineal, especifique un arreglo de celdas de términos.

Identifique los términos del modelo lineal que necesita indicar en fittype: a*x + b*sin(x) + c. El modelo es lineal en a, b y c. Tiene tres términos x, sin(x) y 1 (porque c=c*1). Para especificar este modelo utilice este arreglo de celdas de términos: LinearModelTerms = {'x','sin(x)','1'}.

Utilice el arreglo de celdas de términos de modelo lineal como entrada para fittype.

ft = fittype({'x','sin(x)','1'})
ft = 
     Linear model:
     ft(a,b,c,x) = a*x + b*sin(x) + c

Cree un tipo de ajuste de modelo lineal para a*cos(x) + b.

ft2 = fittype({'cos(x)','1'})
ft2 = 
     Linear model:
     ft2(a,b,x) = a*cos(x) + b

Cree de nuevo el tipo de ajuste y especifique los nombres de los coeficientes.

ft3 = fittype({'cos(x)','1'},'coefficients',{'a1','a2'})
ft3 = 
     Linear model:
     ft3(a1,a2,x) = a1*cos(x) + a2

Defina una función en un archivo y utilícela para crear un tipo de ajuste y ajustar una curva.

Defina una función en un archivo de MATLAB.

function y = piecewiseLine(x,a,b,c,d,k)
% PIECEWISELINE   A line made of two pieces
% that is not continuous.

y = zeros(size(x));

% This example includes a for-loop and if statement
% purely for example purposes.
for i = 1:length(x)
    if x(i) < k,
        y(i) = a + b.* x(i);
    else
        y(i) = c + d.* x(i);
    end
end
end

Guarde el archivo.

Defina algunos datos, cree un tipo de ajuste especificando la función piecewiseLine, cree un ajuste con el tipo de ajuste ft y represente los resultados.

x = [0.81;0.91;0.13;0.91;0.63;0.098;0.28;0.55;...
    0.96;0.96;0.16;0.97;0.96];
y = [0.17;0.12;0.16;0.0035;0.37;0.082;0.34;0.56;...
    0.15;-0.046;0.17;-0.091;-0.071];
ft = fittype( 'piecewiseLine( x, a, b, c, d, k )' )
f = fit( x, y, ft, 'StartPoint', [1, 0, 1, 0, 0.5] )
plot( f, x, y ) 

Cree un tipo de ajuste con una función anónima.

g = fittype( @(a, b, c, x) a*x.^2+b*x+c )

Cree un tipo de ajuste con una función anónima y especifique los parámetros dependientes e independientes.

g = fittype( @(a, b, c, d, x, y) a*x.^2+b*x+c*exp(...
 -(y-d).^2 ), 'independent', {'x', 'y'},...
     'dependent', 'z' );

Cree un tipo de ajuste para una superficie con una función anónima y especifique los parámetros dependientes e independientes, y los parámetros de problema que especificará más adelante cuando llame a fit.

g = fittype( @(a,b,c,d,x,y) a*x.^2+b*x+c*exp( -(y-d).^2 ), ...
        'problem', {'c','d'}, 'independent', {'x', 'y'}, ...
        'dependent', 'z' ); 

Utilice una función anónima para pasar datos del área de trabajo a las funciones fittype y fit.

Cree y represente una curva con forma de S. En pasos posteriores, expandirá y moverá esta curva para ajustar ciertos datos.

% Breakpoints.
xs = (0:0.1:1).';
% Height of curve at breakpoints.
ys = [0; 0; 0.04; 0.1; 0.2; 0.5; 0.8; 0.9; 0.96; 1; 1];
% Plot S-shaped curve.
xi = linspace( 0, 1, 241 );
plot( xi, interp1( xs, ys, xi, 'pchip' ), 'LineWidth', 2 )
hold on
plot( xs, ys, 'o', 'MarkerFaceColor', 'r' )
hold off
title S-curve

Cree un tipo de ajuste con una función anónima, tomando los valores del área de trabajo para los puntos de interrupción de la curva (xs) y la altura de la curva en los puntos de interrupción (ys). Los coeficientes son b (base) y h (altura).

ft = fittype( @(b, h, x) interp1( xs, b+h*ys, x, 'pchip' ) )

Represente el fittype especificando coeficientes de ejemplo de base b=1.1 y altura h=-0.8.

plot( xi, ft( 1.1, -0.8, xi ), 'LineWidth', 2 )
title 'Fittype with b=1.1 and h=-0.8'

Cargue y ajuste algunos datos, utilizando el tipo de ajuste ft creado con los valores del área de trabajo.

% Load some data
xdata = [0.012;0.054;0.13;0.16;0.31;0.34;0.47;0.53;0.53;...
   0.57;0.78;0.79;0.93];
ydata = [0.78;0.87;1;1.1;0.96;0.88;0.56;0.5;0.5;0.5;0.63;...
   0.62;0.39];
% Fit the curve to the data
f = fit( xdata, ydata, ft, 'Start', [0, 1] )
% Plot fit
plot( f, xdata, ydata )
title 'Fitted S-curve'

Este ejemplo muestra las diferencias entre utilizar funciones anónimas con parámetros de problema y valores de las variables del área de trabajo.

Cargue datos, cree un tipo de ajuste para una curva con una función anónima con parámetros de problema y llame a fit especificando los parámetros de problema.

% Load some data.
xdata = [0.098;0.13;0.16;0.28;0.55;0.63;0.81;0.91;0.91;...
    0.96;0.96;0.96;0.97];
ydata = [0.52;0.53;0.53;0.48;0.33;0.36;0.39;0.28;0.28;...
    0.21;0.21;0.21;0.2];

% Create a fittype that has a problem parameter.
g = fittype( @(a,b,c,x) a*x.^2+b*x+c, 'problem', 'c' )

% Examine coefficients. Observe c is not a coefficient.
coeffnames( g )

% Examine arguments. Observe that c is an argument.
argnames( g )

% Call fit and specify the value of c.
f1 = fit( xdata, ydata, g, 'problem', 0, 'StartPoint', [1, 2] )

% Note: Specify start points in the calls to fit to
% avoid warning messages about random start points
% and to ensure repeatability of results.

% Call fit again and specify a different value of c,
% to get a new fit.
f2 = fit( xdata, ydata, g, 'problem', 1, 'start', [1, 2] )

% Plot results. Observe the specified c constants
% do not make a good fit.
plot( f1, xdata, ydata )
hold on
plot( f2, 'b' )
hold off

Modifique el ejemplo previo para crear el mismo ajuste con los valores del área de trabajo para las variables, en lugar de utilizar parámetros de problema. Con los mismos datos, cree un tipo de ajuste para una curva usando una función anónima con un valor del área de trabajo para la variable c:

% Remove c from the argument list.
try
    g = fittype( @(a,b,x) a*x.^2+b*x+c )
catch e
    disp( e.message )
end
% Observe error because now c is undefined.
% Define c and create fittype:
c = 0;
g1 = fittype( @(a,b,x) a*x.^2+b*x+c )

% Call fit (now no need to specify problem parameter).
f1 = fit( xdata, ydata, g1, 'StartPoint', [1, 2] )
% Note that this f1 is the same as the f1 above.
% To change the value of c, recreate the fittype.
c = 1;
g2 = fittype( @(a,b,x) a*x.^2+b*x+c ) % uses c = 1
f2 = fit( xdata, ydata, g2, 'StartPoint', [1, 2] )
% Note that this f2 is the same as the f2 above.
% Plot results
plot( f1, xdata, ydata )
hold on
plot( f2, 'b' )
hold off

Argumentos de entrada

contraer todo

Modelo de biblioteca para el ajuste, especificado como un vector de caracteres o escalar de cadena. Esta tabla muestra algunos ejemplos habituales.

Nombre de modelo de biblioteca

Descripción

'poly1'

Curva polinomial lineal

'poly11'

Superficie polinomial lineal

'poly2'

Curva polinomial cuadrática

'linearinterp'

Interpolación lineal por tramos

'cubicinterp'

Interpolación cúbica por tramos

'smoothingspline'

Spline de suavizado (curva)

'lowess'

Regresión lineal local (superficie)

'log10'

Curva logarítmica en base 10

'logistic4'

Curva logística de cuatro parámetros

Para ver una lista de nombres de modelos de biblioteca, consulte Nombres y ecuaciones de modelos.

Ejemplo: 'poly2'

Tipos de datos: char | string

Modelo para el ajuste, especificado como un vector de caracteres o escalar de cadena. Puede especificar cualquier comando de MATLAB y, por lo tanto, cualquier archivo .m. Consulte Ajustar una curva definida por un archivo.

Tipos de datos: char | string

Modelo para el ajuste, especificado como un arreglo de celdas de vectores de caracteres o un arreglo de cadenas. Especifique los términos del modelo con las expresiones de los vectores de caracteres o escalares de cadena. No incluya coeficientes en las expresiones para los términos. Consulte Términos de modelo lineal.

Tipos de datos: cell

Modelo para el ajuste, especificado como una función anónima. Para obtener más detalles, consulte Orden de entrada para funciones anónimas.

Tipos de datos: char

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value el valor correspondiente. Los argumentos nombre-valor deben aparecer tras otros argumentos, aunque no importa el orden de los pares.

En versiones anteriores a R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: 'coefficients',{'a1','a2'}

Nombres de coeficientes, especificados como el par separado por comas compuesto por 'coefficients' y un vector de caracteres, escalar de cadena, arreglo de celdas de vectores de caracteres o arreglo de cadenas. Puede utilizar nombres de símbolos multicaracter. No puede utilizar estos nombres: i, j, pi, inf, nan, eps.

Tipos de datos: char | string | cell

Nombre de variable (respuesta) dependiente, especificado como el par separado por comas compuesto por 'dependent' y un vector de caracteres o escalar de cadena. Si no especifica la variable dependiente, la función da por supuesto que y es la variable dependiente.

Tipos de datos: char | string

Nombres de variable (respuesta) independiente, especificados como el par separado por comas compuesto por 'independent' y un vector de caracteres, escalar de cadena, arreglo de celdas de vectores de caracteres o arreglo de cadenas. Si no especifica la variable independiente, la función da por supuesto que x es la variable independiente.

Tipos de datos: char | string | cell

Opciones de ajuste, especificadas como el par separado por comas compuesto por 'options' y el nombre de un objeto fitoptions.

Nombres de parámetros dependientes de problemas (fijos), especificados como el par separado por comas compuesto por 'problem' y un vector de caracteres, escalar de cadena, arreglo de celdas de vectores de caracteres o arreglo de cadenas con un elemento por constante dependiente de problema.

Tipos de datos: char | string | cell

Argumentos de salida

contraer todo

Modelo para el ajuste, devuelto como un fittype. Un fittype contiene información que describe un modelo. Para crear un ajuste, necesita datos, un fittype y (opcionalmente) fitoptions y una regla de exclusión. Puede utilizar un fittype como entrada para la función fit.

Más acerca de

contraer todo

Variables dependientes e independientes

¿Cómo decido qué variables son dependientes e independientes?

Para determinar las variables y coeficientes dependientes e independientes, tenga en cuenta esta ecuación:

y=f(x)=a+(b*x)+(c*x2).

  • y es el valor dependiente.

  • x es el valor independiente.

  • a, b y c son los coeficientes.

La variable 'independent' es lo que usted controla. La variable 'dependent' es lo que usted mide, es decir, depende de la variable independiente. Los 'coefficients' son los parámetros que estima el algoritmo de ajuste.

Por ejemplo, si tiene datos de censo, entonces el año es la variable independiente porque no depende de nada. La población es la variable dependiente, porque su valor depende del año en el que se toma el censo. Si un parámetro como la tasa de crecimiento es parte del modelo, el algoritmo de ajuste la estima. De esta forma, el parámetro es uno de los 'coefficients'.

La función fittype determina argumentos de entrada buscando la entrada de la expresión del tipo de ajuste para nombres de variables. fittype da por supuesto que x es la variable independiente, y es la variable dependiente, y el resto de variables son coeficientes del modelo. x se utiliza si no existe variable alguna.

Orden de entrada para funciones anónimas

Si la entrada de la expresión de tipo de ajuste es una función anónima, entonces el orden de entradas debe ser correcto. El orden de entradas permite que la función fittype determine qué entradas son coeficientes que estimar, parámetros dependientes de problemas y variables independientes.

El orden de los argumentos de entrada para la función anónima debe ser:

fcn = @(coefficients,problemparameters,x,y) expression
Necesita al menos un coeficiente. Los parámetros de problema e y son opcionales. Los últimos argumentos, x e y, representan las variables independientes: solo x para las curvas, pero x e y para superficies. Si no quiere utilizar x o y para nombrar las variables independientes, entonces especifique nombres distintos con el argumento de par nombre-valor 'independent'. Sin embargo, cualquiera que sea el nombre o los nombres que elija, estos argumentos deben ser los últimos de la función anónima.

Las funciones anónimas facilitan pasar otros datos a las funciones fittype y fit.

  1. Cree un tipo de ajuste con una función anónima y un valor de la variable (c) del área de trabajo.

    c = 1;
     g = fittype( @(a, b, x) a*x.^2+b*x+c )
  2. La función fittype puede utilizar los valores de las variables de su área de trabajo cuando crea un tipo de ajuste. Para pasar nuevos datos desde el área de trabajo, recree el tipo de ajuste como, por ejemplo:

    c = 5 % Change value of c.
    g = fittype( @(a, b, x) a*x.^2+b*x+c )
    
  3. Aquí, el valor de c es fijo cuando crea el tipo de ajuste. Para especificar el valor de c en el momento en el que llame a fit puede utilizar parámetros de problema. Por ejemplo, haga un ajuste con c = 2 y luego un nuevo ajuste con c = 3.

    g = fittype( @(a,b,x,c) a*x.^2+b*x+c, 'problem', 'c' )
    f1 = fit( xdata, ydata, g, 'problem', 2 )
    f2 = fit( xdata, ydata, g, 'problem', 3 ) 

Términos de modelo lineal

¿Cómo defino términos de modelo lineal?

Para utilizar un algoritmo de ajuste lineal, especifique linearModelTerms como un arreglo de celdas o un arreglo de cadenas de términos. Por ejemplo:

afittype = fittype({expr1,...,exprn})
Especifique los términos del modelo con las expresiones de los vectores de caracteres expr2,...,exprn. No incluya coeficientes en las expresiones para los términos. Si hay un término constante, utilice '1' como la expresión correspondiente en el arreglo de celdas.

Para especificar un modelo lineal de la siguiente forma:

 coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...
en el que no aparece ningún coeficiente dentro de term1, term2, etc., utilice un arreglo de celdas o un arreglo de cadenas en el que cada término, sin coeficientes, se especifique en una celda o elemento de expr, de esta manera:
LinearModelTerms = {'term1', 'term2', 'term3', ... }

Por ejemplo, el modelo

a*x + b*sin(x) + c
es lineal en a, b y c. Tiene tres términos x, sin(x) y 1 (porque c=c*1) y por lo tanto expr es:
LinearModelTerms = {'x','sin(x)','1'}

En la app Curve Fitter, seleccione un ajuste Linear Fitting del grupo Custom dentro de la sección Fit Type.

Algoritmos

Si la entrada de la expresión del tipo de ajuste es un vector de caracteres, un escalar de cadena o una función anónima, entonces la toolbox utiliza un algoritmo de ajuste no lineal para ajustar el modelo a los datos.

Si la entrada de la expresión del tipo de ajuste es un arreglo de celdas o un arreglo de cadenas de términos, entonces la toolbox utiliza un algoritmo de ajuste lineal para ajustar el modelo a los datos.

Historial de versiones

Introducido antes de R2006a

expandir todo