Saltar navegación

Documentación de FlexPro 2025

NonLinCurveFit

Aproxima un modelo no lineal a un conjunto de datos y devuelve los parámetros de modelo encontrados, los datos modelados y una variedad de resultados estadísticos.

Sintaxis

NonLinCurveFit(Model, Data, [ InitialValues ], [ Bounds ], [ WeightingMode = NLCF_WEIGHTING_DATA ], [ Variance ], [ ScalingMode = NLCF_SCALING_NONE ], [ Scaling ], [ OutputOptions = NLCF_OUTPUT_PREDICTED_VALUES ], [ Settings ], [ Algorithm = NLCF_ALGORITHM_FULLNEWTON ] [ , OptionalParameters ])

 

La sintaxis de la función NonLinCurveFit consta de los siguientes elementos:

Parte

Descripción

Model

Determina el modelo que debe adaptarse a los datos.

El argumento puede seleccionarse de una lista de modelos predefinidos o puede especificarse un modelo personalizado.

El modelo personalizado se transfiere como una cadena o como una serie de datos con dos cadenas. La primera cadena contiene el código FPScript para calcular la función del modelo. La segunda cadena se utiliza para transmitir un código FPScript que calcula analíticamente las derivadas parciales de la función del modelo para los parámetros individuales y las emite como una lista. Si solo se especifica una cadena, las derivadas se aproximan numéricamente. Los parámetros de un modelo personalizado con el número de parámetros n deben introducirse como p[0], p[1]... p[n-1]en el código FPScript. La variable independiente es x.

Por ejemplo, para el modelo 'y = a + b x', la serie de datos {"p[0] + p[1] *x", "[1, x]"} para un cálculo analítico, o bien la cadena "p[0] + p[1] * x" para un cálculo numérico de las derivadas.

Debe tenerse en cuenta que x se transfiere como una serie de datos y no como un valor escalar, es decir, la función modelo y las derivadas parciales se calculan en un solo paso para todos los valores de X. El código FPScript debe diseñarse en consecuencia.

También pueden definirse modelos con varias variables dependientes. A continuación, las funciones del modelo se transfieren como una lista y las derivadas como una lista con listas:

{"[ p[0] + p[1] * x.[0], p[1] * x.[1]^2 ]", "[ [1,x.[0] ] , [0, x.[1]^2] ]"}

Las estructuras de datos permitidas son Valor escalar y Serie de datos. Los tipos de datos permitidos son Entero de 16 bits, Entero de 32 bits, Entero de 64 bits y Cadena.

Data

Estos son los datos a los que debe adaptarse el modelo. Si el modelo tiene varias variables dependientes, el argumento debe especificarse como una lista con un conjunto de datos por variable.

Las estructuras de datos permitidas son Serie de datos, Matriz de datos, Señal, Serie de señales y Lista. Se permiten todos los tipos de datos numéricos excepto Tiempo de calendario.

En los tipos de datos complejos se calcula un valor absoluto.

InitialValues

Es la serie de datos con los valores iniciales para los parámetros del modelo que se va a determinar. Si utiliza uno de los modelos predefinidos, puede omitir el argumento. En este caso, se utilizan los valores iniciales específicos del modelo. El número de valores corresponde al número de parámetros del modelo multiplicado por el número de picos.

Las estructuras de datos permitidas son Serie de datos. Se permiten todos los tipos de datos numéricos. Se ignora la unidad del argumento.

En los tipos de datos complejos se calcula un valor absoluto.

Bounds

Es la matriz de datos con los límites de los parámetros del modelo que se va a determinar. La matriz contiene una columna con dos límites por parámetro. Si se omite el argumento, no se utilizan valores límite o se utilizan valores límite específicos del modelo. Puede invalidar límites individuales. Los límites deben estar dentro del rango especificado por el modelo correspondiente. El límite superior debe ser mayor que el límite inferior.

Las estructuras de datos permitidas son Matriz de datos. Se permiten todos los tipos de datos numéricos. Se ignora la unidad del argumento.

En los tipos de datos complejos se calcula un valor absoluto.

WeightingMode

Especifica cómo se ponderan los puntos de datos individuales a los que debe ajustarse el modelo. Por defecto, la ponderación se basa en los datos.

El argumento WeightingMode puede tener los siguientes valores:

Constante

Significado

NLCF_WEIGHTING_NONE

Sin ponderación.

NLCF_WEIGHTING_RELATIVE

Ponderación relativa con 1 / Y2.

NLCF_WEIGHTING_POISSON

Ponderación Poisson con 1/Y.

NLCF_WEIGHTING_DATA

Si los datos están disponibles como una matriz de datos o serie de señales, entonces la ponderación será 1 / σ2, de lo contrario no se ponderará.

NLCF_WEIGHTING_CUSTOM

Ponderación con 1 / σ2, se especifica σ2.

Se establece el valor predeterminado NLCF_WEIGHTING_DATA si no se especifica el argumento.

Variance

Es una serie de datos con las varianzas de los puntos de datos individuales. Si utiliza un modelo personalizado con varias variables dependientes, debe especificar una lista con una serie de datos por variable. Solo tiene que especificar el argumento si ha seleccionado la ponderación personalizada.

Las estructuras de datos permitidas son Serie de datos y Lista. Se permiten todos los tipos de datos numéricos. Se ignora la unidad del argumento.

En los tipos de datos complejos se calcula un valor absoluto.

ScalingMode

Especifica qué escalado debe utilizarse para el problema.

(*) No para el algoritmo de Levenberg-Marquardt

El argumento ScalingMode puede tener los siguientes valores:

Constante

Significado

NLCF_SCALING_NONE

Sin escalado.

NLCF_SCALING_ADAPTIVE

Escalado adaptativo. En cada iteración, los parámetros se escalan utilizando la matriz jacobiana.

NLCF_SCALING_CUSTOM

Escalado personalizado.

NLCF_SCALING_BOUNDS

Escalado a partir de límites: 1 / Maximum(Absolute(ParameterLowerLimit),Absolute(ParameterUpperLimit)) (*)

NLCF_SCALING_INITIAL

Escalado a partir de la matriz jacobiana inicial. Este escalado corresponde al escalado adaptativo. Sin embargo, los parámetros solo se escalan antes de la primera iteración. (*)

Se establece el valor predeterminado NLCF_SCALING_NONE si no se especifica el argumento.

Scaling

Es una serie de datos con un factor de escala positivo por parámetro del modelo. Solo tiene que introducir este argumento si ha seleccionado el escalado personalizado.

Las estructuras de datos permitidas son Serie de datos. Se permiten todos los tipos de datos numéricos. Se ignora la unidad del argumento.

En los tipos de datos complejos se calcula un valor absoluto.

OutputOptions

Especifica qué resultados deben devolverse. Si hay varios resultados, se emiten en forma de lista. Si, por ejemplo, se desea obtener la matriz de correlación y la matriz de covarianza, el argumento debe tener el valor NLCF_OUTPUT_CORRELATION + NLCF_OUTPUT_COVARIANCE. Las opciones de salida estadística del ajuste de curva no lineal ayudan a determinar la calidad del ajuste.

(m = número de puntos de datos, n = número de parámetros)

(*) Para calcular estos parámetros estadísticos se utiliza la matriz de covarianza. El cálculo de la matriz de covarianza no es posible cuando se utiliza el algoritmo Full Newton si se especifican límites y un escalado (todos excepto NLCF_SCALING_NONE).

El argumento OutputOptions puede tener los siguientes valores:

Constante

Significado

+ NLCF_OUTPUT_ALL

Todas las salidas disponibles.

+ NLCF_OUTPUT_AVERAGE_RESIDUAL

Residuo medio. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_BASELINE

Línea de base para modelos con múltiples picos. El resultado es una serie de señales con m valores de 64 bits en coma flotante.

+ NLCF_OUTPUT_CONFIDENCE95

Intervalo de confianza del 95 %. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes. (*)

+ NLCF_OUTPUT_CONFIDENCE99

Intervalo de confianza del 99 %. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes. (*)

+ NLCF_OUTPUT_CONFIDENCE999

Intervalo de confianza del 99,9 %. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes. (*)

+ NLCF_OUTPUT_CONFIDENCE95_PARA

Intervalo de confianza de los parámetros del 95 %. El resultado es una serie de datos con n valores en coma flotante de 64 bits. (*)

+ NLCF_OUTPUT_CONFIDENCE99_PARA

Intervalo de confianza de los parámetros del 99 %. El resultado es una serie de datos con n valores en coma flotante de 64 bits. (*)

+ NLCF_OUTPUT_CONFIDENCE999_PARA

Intervalo de confianza de los parámetros del 99,9 %. El resultado es una serie de datos con n valores en coma flotante de 64 bits. (*)

+ NLCF_OUTPUT_CORRELATION

Matriz de correlación. El resultado es una matriz n x n con valores en coma flotante de 64 bits. (*)

+ NLCF_OUTPUT_COVARIANCE

Matriz de covarianza. El resultado es una matriz n x n con valores en coma flotante de 64 bits. (*)

+ NLCF_OUTPUT_ERROR_VARIANCE

Varianza del error. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_ITERATIONS

Número de iteraciones necesarias. El resultado es un entero de 32 bits.

+ NLCF_OUTPUT_PARAMERROR

Error estándar de los parámetros. El resultado es una serie de datos con n valores en coma flotante de 64 bits. (*)

+ NLCF_OUTPUT_PEAKS

Curvas del picos para modelos con múltiples picos. El resultado es una serie de señales con m valores de 64 bits en coma flotante.

+ NLCF_OUTPUT_PREDICTION95

Banda de predicción del 95 %. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes. (*)

+ NLCF_OUTPUT_PREDICTION99

Banda de predicción del 99 %. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes. (*)

+ NLCF_OUTPUT_PREDICTION999

Banda de predicción del 99,9 %. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes. (*)

+ NLCF_OUTPUT_PREDICTED_VALUES

Los datos modelados. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes.

+ NLCF_OUTPUT_R2

Coeficiente de determinación R2. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_RA2

Coeficiente de determinación ajustado Ra2. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_RESIDUAL

Residuos. El resultado es una serie de datos o una señal con m valores en coma flotante de 64 bits o una lista con varias variables dependientes.

+ NLCF_OUTPUT_RESIDUAL_SUM

Suma de los residuos. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_SOLUTION

Los parámetros encontrados. El resultado es una serie de datos con n valores en coma flotante de 64 bits.

+ NLCF_OUTPUT_SSE

Suma absoluta de los cuadrados de los residuos. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_SSER

Suma cuadrática relativa de los residuos. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_SSR

Suma cuadrática de regresión. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_SST

Suma cuadrada total. El resultado es un valor en coma flotante de 64 bits.

+ NLCF_OUTPUT_STATUS

Salida de estado del algoritmo. El resultado es un entero de 32 bits.

Se establece el valor predeterminado NLCF_OUTPUT_PREDICTED_VALUES si no se especifica el argumento.

Settings

Es una lista que cambia la configuración del algoritmo utilizado.

El argumento puede tener los siguientes elementos con nombre:

Constante

Significado

<MaximumNumberOfFunctionCalls>

Número máximo permitido de llamadas a funciones durante el cálculo. El valor predeterminado es 100.

<XTolerance>

Tolerancia a la convergencia X. El valor predeterminado es 10-8.

<YTolerance>

Tolerancia de la convergencia relativa de la función. El valor predeterminado es 10-8.

<FTolerance>**

Tolerancia absoluta de convergencia de la función. El valor predeterminado es 10-15.

<GTolerance>*

Tolerancia para el coseno del ángulo entre las columnas de la matriz jacobiana actual y el vector residual correspondiente. El valor predeterminado es 10-8.

<StepBound>

Límite de paso. El valor predeterminado es 100.

* Solo con el algoritmo de Levenberg-Marquardt

** Solo con el algoritmo Full Newton

Los valores se transfieren en forma de lista, por ejemplo:

[<MaximumNumberOfFunctionCalls> 100, <XTolerance> 1e-015,<YTolerance> 1e-015, <FTolerance> 1e-015, <StepBound> 1e+002]

Las estructuras de datos permitidas son Lista. Se permiten todos los tipos de datos numéricos. Se ignora la unidad del argumento.

Algorithm

Especifica qué algoritmo debe utilizarse.

El argumento Algorithm puede tener los siguientes valores:

Constante

Significado

NLCF_ALGORITHM_FULLNEWTON

Algoritmo Newton completo. (NL2SOL)

NLCF_ALGORITHM_LEVENBERGMARQUARDT

Algoritmo de Levenberg-Marquardt. (MINPACK)

Se establece el valor predeterminado NLCF_ALGORITHM_FULLNEWTON si no se especifica el argumento.

OptionalParameters

Es una lista que se puede transferir al modelo.

El argumento puede tener los siguientes elementos con nombre:

Constante

Significado

<NumberOfPeaks>

Número de picos del modelo que se va a calcular. Esta opción solo es relevante para los modelos de pico.

<Baseline>

Especifica qué modelo debe utilizarse para la línea de base. El valor predeterminado es NLCF_BASELINE_NONE. Esta opción solo es relevante para los modelos de pico. El modelo seleccionado se añade al modelo de pico.El argumento puede tener los siguientes valores:

Constante

Modelo

NLCF_BASELINE_NONE

ningún modelo

NLCF_BASELINE_CONSTANT

A

NLCF_BASELINE_LINE

A+Bx

NLCF_BASELINE_QUADRATIC

A+Bx+Cx2

NLCF_BASELINE_CUBIC

A+Bx+Cx2+Dx3

NLCF_BASELINE_POLY4

A+Bx+Cx2+Dx3+Ex4

NLCF_BASELINE_POLY5

A+Bx+Cx2+Dx3+Ex4+Fx5

<FixedParameters>

Es una serie de datos con valores booleanos que indican si un parámetro puede modificarse o no. El número de valores corresponde al número de parámetros del modelo multiplicado por el número de picos. TRUE significa fijo, FALSE significa variable.

<SharedParameters>

Es una serie de datos con valores booleanos que indican si un parámetro debe ser compartido en un modelo de pico con múltiples picos. Esta opción solo es relevante para picos múltiples. TRUE significa compartir. El número corresponde al número de parámetros del modelo.

<AuxData>

Cualquier dato que pueda transferirse de forma opcional al modelo personalizado como argumento 'd'.

Los valores se transfieren en forma de lista. Ejemplo de modelo con 3 parámetros y 2 picos:

[<NumberOfPeaks>2, <FixedParameters>{FALSE, TRUE, FALSE, FALSE, FALSE, FALSE}, <SharedParameters>{FALSE, FALSE, FALSE}]

Las estructuras de datos permitidas son Lista. Se permiten todos los tipos de datos. Se ignora la unidad del argumento.

Notas

La salida de estado describe el motivo de la cancelación de un cálculo. Se distinguen dos grupos. El algoritmo se completa correctamente cuando se cumplen determinados criterios de convergencia. En caso contrario, el algoritmo anula el cálculo por criterios de anulación. El resultado de la función es entonces solo la salida de estado.

Criterios de convergencia:

Constante

Significado

0

Convergencia X.

1

Convergencia funcional relativa.

2

Convergencia absoluta de funciones.

3

La convergencia X y la convergencia relativa de la función.

4

Tolerancia para el coseno del ángulo entre las columnas de la matriz jacobiana actual y el vector residual correspondiente.

Criterios de anulación:

Constante

Significado

5

Convergencia singular.

6

Convergencia falsa.

7

Número máximo de iteraciones alcanzado.

8

Valores iniciales incorrectos.

9

No se puede calcular el gradiente.

10

Anulación manual del cálculo.

11

Error interno del algoritmo.

12

Número máximo de llamadas a la función alcanzado.

13

No se puede calcular el modelo.

Se puede acceder a los resultados con los siguientes nombres de los elementos de lista:

Constante

Significado

.["AverageResidual"]

Residuo medio.

.["Baseline"]

Línea de base para modelos con múltiples picos.

.["Confidence95"]

Intervalo de confianza del 95 %.

.["Confidence99"]

Intervalo de confianza del 99 %.

.["Confidence999"]

Intervalo de confianza del 99,9 %.

.["ConfidenceParameter95"]

Intervalo de confianza de los parámetros del 95 %.

.["ConfidenceParameter99"]

Intervalo de confianza de los parámetros del 99 %.

.["ConfidenceParameter999"]

Intervalo de confianza de los parámetros del 99,9 %.

.["Correlation"]

Matriz de correlación.

.["Covariance"]

Matriz de covarianza.

.["ErrorVariance"]

Varianza del error.

.["Iterations"]

Número de iteraciones necesarias.

.["ParameterError"]

Error estándar de los parámetros.

.["Peaks"]

Curvas del picos para modelos con múltiples picos.

.["Prediction95"]

Banda de predicción del 95 %.

.["Prediction99"]

Banda de predicción del 99 %.

.["Prediction999"]

Banda de predicción del 99,9 %.

.["PredictedValues"]

Los datos modelados.

.["R2"]

Coeficiente de determinación R2.

.["Ra2"]

Coeficiente de determinación ajustado Ra2.

.["Residual"]

Residuos.

.["ResidualSum"]

Suma de los residuos.

.["Solution"]

Los parámetros encontrados.

.["SSE"]

Suma absoluta de los cuadrados de los residuos.

.["SSER"]

Suma cuadrática relativa de los residuos.

.["SSR"]

Suma cuadrática de regresión.

.["SST"]

Suma cuadrada total.

.["Status"]

Salida de estado del algoritmo.

También puede utilizar la sintaxis Formula.ListElementName. Sin embargo, debe tener en cuenta que las propiedades de la fórmula a las que se puede acceder del mismo modo tienen prioridad sobre los elementos de la lista con el mismo nombre. Esto se aplica, por ejemplo, al elemento R2.

Disponibilidad

FlexPro Basic, Professional, Developer Suite

Ejemplos

Dim list = NonLinCurveFit(MODEL_EXP_EXPONENTIAL_DECAY2, Ag, {13.33,980.56,33.92,133.80,188.28}, , _
NLCF_WEIGHTING_DATA, , NLCF_SCALING_NONE, , NLCF_OUTPUT_ALL, _
[<MaximumNumberOfFunctionCalls> 100, _
<XTolerance> 1e-008, _
<YTolerance> 1e-008, _
<FTolerance> 1e-015, _
<StepBound> 1e+002], _
NLCF_ALGORITHM_FULLNEWTON, _
[<NumberOfPeaks>1, _
<BaseLine>NLCF_BASELINE_NONE , _
<FixedParameters>{FALSE,FALSE,FALSE,FALSE,FALSE}, _
<SharedParameters>{FALSE,FALSE,FALSE,FALSE,FALSE}])
 

Aproxima la señal 'Ag' con el modelo de función exponencial decreciente (variante 2). El resultado del cálculo es una lista de todos los gastos disponibles. Este es un ejemplo del tutorial Ajuste de curva no lineal.

list.["PredictedValues"]

Resultados en los datos modelizados.

NonLinCurveFit(MODEL_EXP_EXPONENTIAL_DECAY2, Ag, {13.33,980.56,33.92,133.80,188.28})

También produce los datos modelizados. Esta es una llamada de función simplificada del ejemplo anterior, en la que se utilizan los valores por defecto.

NonLinCurveFit("Dim a = p[0]\r\n _
Dim b = p[1]\r\n _
Dim c = p[2]\r\n _
a + b * x + c * x^2", _
Data, {1,1,0,0}, , , , , , , [<MaximumNumberOfFunctionCalls> 300])
 

Aproxima el conjunto de datos 'Datos' con el modelo personalizado a + b * x + c *x2. Se permite un máximo de 300 iteraciones.

NonLinCurveFit("Dim a = p[0]\r\n _
Dim b = p[1]\r\n _
Dim s1 = d.[0]\r\n _
Dim s2 = d.[1]\r\n _
a * s1 + b * s2", _
Data, {1,1}, , , , , , , [<MaximumNumberOfFunctionCalls> 300], , [<AuxData> [Series1, Series2] ])
 

Aproxima el conjunto de datos 'Datos' con el modelo personalizado a * Serie1 + b * Serie2. Las dos series de datos 'Series1' y 'Series2' se transfieren como una lista con dos elementos.

Véase también

Función ParameterEstimation

Función NonLinModel

Objeto de análisis Ajuste de curva no lineal

Tutorial Ajuste de curva no lineal

Opciones de salida estadística para el ajuste de curva no lineal

Modelos no lineales