Salut, je suis en train d'analyser les données de vent pour estimer l'énergie d'une éolienne.
J'ai pris 10 ans de données de vent et tracé un histogramme;
ma deuxième étape a été d'adapter une distribution de Weibull aux données.
J'ai utilisé R avec le package lmom
pour calculer la forme et l'échelle de Weibul, voici le code que j'ai utilisé:
>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)
Il semble qu'il y ait un certain décalage entre les données et la fonction de densité; Peux-tu m'aider avec ceci? Une autre question est: pouvez-vous m'aider à calculer l'énergie annuelle à partir de la fonction de densité?
Merci
r
distributions
eliavs
la source
la source
Réponses:
lmom
La fonctionpelwei
s'adapte à une distribution de Weibull à trois paramètres, avec des paramètres d' emplacement , d'échelle et de forme.rweibull
génère des nombres aléatoires pour une distribution de Weibull à deux paramètres. Vous devez soustraire le paramètre d'emplacementmoments["zeta"]
. Cela devrait donner un meilleur ajustement, mais il ne semble pas que cela donnera un bon ajustement à vos données particulières.Je remarque que http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm dit "Les vitesses du vent dans la plupart du monde peuvent être modélisées en utilisant la distribution Weibull.". Peut-être que vous n'avez pas de chance et que vous vivez dans une partie du monde où ils ne peuvent pas!
la source
integrate()
fonction de R peut être utile pour cela.J'ai recréé votre intrigue avec des données de http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (j'ai pris les 1200 mesures). J'ai obtenu un ajustement décent des données, généralement en utilisant votre code:
Désolé, je ne suis pas sûr que votre problème puisse être, mais je pense que vous devriez pouvoir adapter Weibull à vos données. Ce qui me rend suspect, c'est la courbe en cloche de votre graphique de densité, je ne sais pas d'où cela vient.
Voici les moments que j'ai générés:
wind.moments
des moments
WTR à la sortie annuelle: Je suppose que je générerais des valeurs discrètes pour la fonction de densité de probabilité, multiplierais ces valeurs par la fonction de sortie et les résumerais. Alternativement, vous pouvez simplement utiliser vos données brutes, multiplier les valeurs avec la fonction de sortie, les résumer et calculer la moyenne annuelle, vous devez contrôler la saisonnalité de manière appropriée (par exemple, assurez-vous d'utiliser des années entières ou de pondérer en conséquence) .
Voici la sortie non contrôlée (en utilisant la formule de http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- et-vitesse-de-vent-moyenne-à-votre-emplacement-513080.html )
la source
Voici un article récent à SO sur les éoliennes. Ma réponse sur ce lien contient trois liens qui pourraient vous intéresser:
/programming/4843194/r-language-sorting-data-into-ranges-averaging-ignore-outliers/4844783#4844783
Je viens de vérifier l'un des liens Weibull dans la réponse SO ci-dessus. Pour une raison quelconque, le lien est en panne. Voici quelques liens qui fournissent les mêmes informations de base:
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
De plus, à partir de la puissance générée par le vent, la saisonnalité est évidente.
la source
Je ne sais pas si quelqu'un a déjà fait valoir ce point, mais pelwei peut en fait être forcé de fonctionner comme une fonction weibull à 2 paramètres en ajoutant une limite fixe.
Au lieu d'appeler,
moments<-pelwei(wind.moments)
vous devez simplement appelermoments<-pelwei(wind.moments,bound=0)
vous pouvez toujours vérifier quelle est la valeur zêta. Si ce n'est pas 0 et que vous utilisez dweibull, vous devez faire quelque chose.
la source