Hola, estoy analizando datos de viento para estimar la energía de una turbina eólica.
He tomado 10 años de datos de viento y graficado un histograma;
mi segunda etapa fue ajustar una distribución de Weibull a los datos. Usé
R con el paquete lmom
para calcular la forma y escala de Weibul, este es el código que usé:
>library(lmom)
wind.moments<-samlmu(as.numeric(pp$WS))
moments<-pelwei(wind.moments)
x.wei<-rweibull(n=length(pp$WS), shape=moments["delta"], scale=moments["beta"])
hist(as.numeric(pp$WS), freq=FALSE)
lines(density(x.wei), col="red", lwd=4)
Parece que hay algún retraso entre los datos y la función de densidad; ¿Me puede ayudar con esto? Otra pregunta es ¿me pueden ayudar a calcular la energía anual de la función de densidad?
gracias
r
distributions
eliavs
fuente
fuente
Respuestas:
lmom
La función sepelwei
ajusta a una distribución Weibull de tres parámetros, con parámetros de ubicación , escala y forma.rweibull
genera números aleatorios para una distribución Weibull de dos parámetros. Necesita restar el parámetro de ubicaciónmoments["zeta"]
. Eso debería dar un mejor ajuste, pero no parece que se ajuste bien a sus datos particulares.Me doy cuenta de que http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm dice "La velocidad del viento en la mayor parte del mundo se puede modelar usando la Distribución Weibull". ¡Quizás solo tienes mala suerte y vives en una parte del mundo donde no pueden!
fuente
integrate()
función de R puede ser útil para eso.Recreé su trama con datos de http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (tomé las 1200 mediciones). Obtuve un ajuste decente de los datos, generalmente usando su código:
Lo siento, no estoy seguro de cuál podría ser su problema, pero creo que debería poder adaptar weibull a sus datos. Lo que me hace sospechar es la curva de campana de su diagrama de densidad, no tengo idea de dónde vino eso.
Aquí están los momentos que generé:
wind.moments
momentos
WTR a la producción anual: supongo que generaría valores discretos para la función de densidad de probabilidad, multiplicaría estos valores con la función de salida y lo resumiría. Alternativamente, puede usar sus datos en bruto, multiplicar los valores con la función de salida, resumirlos y calcular el promedio anual, debe controlar la estacionalidad de una manera adecuada (por ejemplo, asegúrese de usar años enteros o de ponderar en consecuencia) .
Aquí está la salida no controlada (usando la fórmula de http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- y-velocidad-media-del-viento-en-su-ubicación-513080.html )
fuente
Aquí hay una publicación reciente en SO sobre turbinas eólicas. Mi respuesta en ese enlace tiene tres enlaces en los que podría estar interesado:
/programming/4843194/r-language-sorting-data-into-ranges-averaging-ignore-outliers/4844783#4844783
Acabo de marcar uno de los enlaces de Weibull en la respuesta SO anterior. Por alguna razón, el enlace está caído. Aquí hay algunos enlaces que proporcionan la misma información básica:
http://www.gso.uri.edu/ozone/
http://www.weru.ksu.edu/new_weru/publications/pdf/Comparison%20of%20the%20Weibull%20model%20with%20measured%20wind%20speed%20distributions%20for%20stochastic%20wind%20genera.pdf
http://www.kfupm.edu.sa/ri/publication/cer/41_JP_Weibull_parameters_for_wind_speed_distribution_in_Saudi_Arabia.pdf
http://journal.dogus.edu.tr/13026739/2008/cilt9/sayi1/M00195.pdf
http://www.eurojournals.com/ejsr_26_1_01.pdf
Además, a partir de la energía generada por el viento, la estacionalidad es obvia.
fuente
No estoy seguro de si alguien ya ha dicho esto, pero en realidad se puede obligar a Pelwei a funcionar como una función weibull de 2 parámetros agregando un límite fijo.
En lugar de llamar
moments<-pelwei(wind.moments)
, simplemente debes llamarmoments<-pelwei(wind.moments,bound=0)
siempre puede verificar cuál es el valor zeta. Si no es 0 y está usando dweibull, debe hacer algo al respecto.
fuente