4 votos

¿Existe una fórmula para predecir la temperatura delta según la tendencia anterior?

Necesito una manera de predecir delta curva de temperatura basado en la tendencia anterior. Hago un montón de aumento de calor en pruebas de conductores eléctricos y me gustaría ser capaz de obtener al menos una aproximación de la curva antes de hacerlo.

Por ejemplo, si ya tengo los puntos de datos en esta curva antes de la línea. Quiero que me capaces de predecir el resto después de la línea. No tiene que ser exacta. Si estoy dentro de los 10% que estaría bien.

enter image description here


ETA: Me gustaría por delante algo más de luz sobre esta cuestión. Creo que parte del problema con decaimiento exponencial no se ajustan a mi gráfica es que la temperatura aumentó a lo largo del tiempo. Vea a continuación he añadido ambiente a mi gráfico y crear otro que se aumentan con el paso del ambiente. Caso omiso de el gran chapuzón en aumento ambiente después se estabilizó. Estos datos provienen de una prueba a la que se hace fuera, así que el viento y el sol/sombra podría dar cuenta de eso.

Muestra las Temperaturas Ambiente y del enter image description here Elevación sobre el Ambiente enter image description here

3voto

Lorenzo Donati Puntos 6644

Ya le han dado buenas respuestas, así que no voy a ampliar aquellos. Sólo señalo algo que parece que nadie ha mencionado: la extrapolación de un valor de la función puede ser peligroso si usted no tiene alguna justificación teórica que garantiza que la curva extrapolada sigue el modelo que usted ha elegido. En otras palabras, usted debe estar seguro de antemano de que la "forma" de la curva real de ruido (a un lado) coincide con la de la modelo, de lo contrario, usted debe verificar que los resultados tengan sentido. Por lo que dices parece que sus sistemas siguen el mismo patrón (algún tipo de térmica "RC" circuito equivalente con un exponencialmente aplanamiento de la respuesta, como la carga de un condensador), así que usted debe ser seguro. Si usted trata con los sistemas/configuraciones de pruebas que presentan un patrón diferente ser consciente de que tiene que cambiar su modelo.

2voto

Ryan Ginstrom Puntos 8354

Como Majenko dijo, ajuste de curvas mediante mínimos Cuadrados es una solución apropiada. Sin embargo, usted debe escoger una función adecuada para adaptarse a. La línea directa para el ajuste no es apropiado aquí por mucho tiempo, predicciones, pero es lo suficientemente bueno para un corto tiempo de predicciones.

Una más apropiada de la función es una función de decaimiento exponencial: \begin{align*} T = a - b e^{-c t} \end{align*}

Esta es una función no lineal y por lo tanto requiere de algún tipo de proceso iterativo para obtener los parámetros de ajuste a, b, y c de. Sin embargo, no es demasiado difícil de hacer. La idea básica es utilizar un Newton-Raphson búsqueda de raíces algoritmo junto con un algoritmo de mínimos cuadrados. Por suerte, hay varios pre-existentes de las implementaciones. Si usted está interesado en el aprendizaje de la matemática de la derivación, ver aquí (aunque no se muy técnico).

Aquí es una aplicación con Scipy del leastsq función. Yo uso explícito matriz Jacobiana porque, por alguna razón, la estimación de la Jacobiana da loco resultados.

import numpy as np
from scipy.optimize import leastsq
def exp_decay(args, t):
    '''
    args: list-like with the 3 curve fitting parameters a,b,c
    t: times
    '''
    a,b,c = args
    return a - b*np.exp(-c*t)

def jac(args, T, t):
    a,b,c=args
    res = np.zeros([3,len(t)])
    res[0,:] = -1
    res[1,:] = np.exp(-c*t)
    res[2,:] = -b*t*np.exp(-c*t)
    return res

def find_coeffs(T, t):
    '''
    helper for finding the fitting coefficients
    '''
    resid = lambda args,T,t: T-exp_decay(args, t)
    return leastsq(resid, np.array([1,1,1e-9]), args=(T,t), Dfun=jac, col_deriv=True)[0]

# some dummy data to demonstrate usage
T = np.array([-5,0,5,7,9,12.5,15,17])
t = np.array([1,500,935,1402,1869,2803,3737,4600])

coeffs = find_coeffs(T,t)

# plot the results to show the fit
t_p = np.linspace(1,25000,25000)
from matplotlib.pyplot import *
plot(t_p, exp_decay(coeffs, t_p), label='exponential decay fit')
plot(t,T,'o')
grid(True)
show()

Para demostrar por qué el uso de una adecuada función de los asuntos, me sacó un par de áspero de datos de puntos de su parcela (marcado en verde en el gráfico) y ajuste tanto de una línea y el decaimiento exponencial de la función a ellos. Como se puede ver, una línea de ajuste se obtiene la respuesta de aproximadamente el derecho por un período muy corto de tiempo, pero se desvía mucho durante tiempos más largos. El decaimiento exponencial de ajuste es mucho mayor, y añadiendo más puntos de datos daría una mejor respuesta final.

enter image description here

1voto

user4245 Puntos 324

Yo creo que lo que está después es el "mínimos Cuadrados" algoritmo.

Yo lo uso en mi Promedio de librería para Arduino para predecir el aumento de la temperatura de mi horno de reflujo en cuenta el calor latente de los elementos de que se puede apagar en el tiempo.

Este es un fragmento de código a partir de la plantilla de biblioteca basado en:

template <class T> void Average<T>::leastSquares(float &m, float &c, float &r) {
    float   sumx = 0.0;                        /* sum of x                      */
    float   sumx2 = 0.0;                       /* sum of x**2                   */
    float   sumxy = 0.0;                       /* sum of x * y                  */
    float   sumy = 0.0;                        /* sum of y                      */
    float   sumy2 = 0.0;                       /* sum of y**2                   */

    for (int i=0;i<_count;i++)   {
        sumx  += i;
        sumx2 += sqr(i);
        sumxy += i * _store[i];
        sumy  += _store[i];
        sumy2 += sqr(_store[i]);
    }

    float denom = (_count * sumx2 - sqr(sumx));
    if (denom == 0) {
        // singular matrix. can't solve the problem.
        m = 0;
        c = 0;
        r = 0;
        return;
    }

    m = 0 - (_count * sumxy  -  sumx * sumy) / denom;
    c = (sumy * sumx2  -  sumx * sumxy) / denom;
    r = (sumxy - sumx * sumy / _count) / sqrt((sumx2 - sqr(sumx)/_count) * (sumy2 - sqr(sumy)/_count));
}

template <class T> T Average<T>::predict(int x) {
    float m, c, r;
    leastSquares(m, c, r); // y = mx + c;

    T y = m * x + c;
    return y;
}

La primera función de una matriz de datos (en _store[]) y calcula la pendiente de la forma y = mx + c. Se le da la M y C (I, pero se me olvido lo que es ahora). La segunda función, a continuación, sólo utiliza la fórmula de predecir lo que el valor será en algún momento en el futuro.

1voto

Rory Alsop Puntos 2709

Mientras que yo, en general, de acuerdo con las otras respuestas, los métodos para lograr el resultado son complicadas. Utilice la herramienta correcta para hacer el trabajo, y está hecho en un par de líneas que se concentran en el trabajo en sí. Por ejemplo gnuplot:

t(x)=a-b*exp(c*x)
a=25
b=30
c=0.00001
fit t(x) "temperature" via a, b, c
plot "temperature", t(x)

Aquí, temperature es un simple archivo de texto que contiene el tiempo y la temperatura en dos columnas.

Los valores iniciales se calcula de la siguiente manera, después de la fit-comando, que contienen los último de los valores calculados:

a que es la temperatura final, cuando la exponencial es =0 para x grande
b es el cambio total en la forma y
c es sólo una suposición

Como resultado, también tengo esta impresión:

Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 27.7729          +/- 0.2875       (1.035%)
b               = 30.9734          +/- 0.6285       (2.029%)
c               = -0.000225597     +/- 1.115e-05    (4.941%)

Si me toman en cuenta sólo los datos en el xrange 0...4500, me sale:

Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 19.192           +/- 0.4385       (2.285%)
b               = 25.5059          +/- 0.3719       (1.458%)
c               = -0.00051065      +/- 2.074e-05    (4.061%)

Aquí es un gráfico de los resultados. (Yo WebPlotDigitizer en http://arohatgi.info/WebPlotDigitizer/ para obtener algunos datos de su parcela)

enter image description here


Como se puede ver, la fórmula dada por @helloworld922 se adapta muy bien los datos si se mira el x-rango de 0...4500 sólo (curva verde). Pero después, los datos se eleva a alrededor de 27°C, mientras que la fórmula dice que la temperatura final es de 19°C.

Si utiliza el conjunto de los datos, la (azul) de la curva se ajusta a los datos en general , de alguna manera, pero no en detalle, especialmente en el xrange <4500.

La diferencia en la temperatura final es de ~8.5 K.

¿El "10%" tener sentido en una escala celsius?

El celsius escala es arbitrario, el origen (0°C) no es ningún tipo de físico "cero". Imagina que heredan una cuenta de banco y no saben el saldo inicial, ni va a conseguir nunca el saldo real. Así, usted acaba de decir que tengo con $0.00 and keep track of what you pay into and take out. One day, you know there should be $a 50 más de la cuenta ya que heredaste, otro día, su $100. So, is the balance of the second day twice the balance on the first? What if your grandma left you $1,000,000 en esa cuenta, y simplemente no lo saben? Finalmente, esto no tiene sentido. Sólo si se usa el Kelvin escala, donde 0 es la física menor temperatura posible, los porcentajes de sentido. En este contexto, 8.5 K <-> 300K (~temperatura ambiente) es de 2.8% ...

Como se ha dicho, la fórmula no es describir la totalidad de los datos muy bien, especialmente del procesamiento de sólo la primera parte de los datos no dan una buena predicción. Usted necesita una fórmula de ajuste el conjunto de los datos de rango muy bien. Esta sería una fórmula que consta de más de una función exponencial. (Esto podría describir que calentar un poco de material, que en algún momento comienza a disipar el calor a otro lugar)

Pero: Como la fórmula que describe la primera parte de los datos muy muy bien, (por lo que no hay desviación de dar más información), una función más compleja de fallar para darle una mejor predicción.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X