Olá, estou analisando dados de vento para estimar energia de uma turbina eólica.
Eu peguei 10 anos de dados de vento e fiz um gráfico de um histograma;
meu segundo estágio foi ajustar uma distribuição Weibull aos dados.
Eu usei R com o pacote lmom
para calcular a forma e escala de Weibul. Este é o código que eu usei:
>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 há algum atraso entre os dados e a função de densidade; Você pode me ajudar com isto? Outra pergunta é: você pode me ajudar a calcular a energia anual a partir da função densidade?
obrigado
r
distributions
eliavs
fonte
fonte
Respostas:
lmom
A funçãopelwei
se encaixa em uma distribuição Weibull de três parâmetros, com parâmetros de localização , escala e forma.rweibull
gera números aleatórios para uma distribuição Weibull de dois parâmetros. Você precisa subtrair o parâmetro locationmoments["zeta"]
. Isso deve dar um ajuste melhor , mas não parece que dará um bom ajuste aos seus dados específicos.Observo que http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm diz que "a velocidade do vento na maior parte do mundo pode ser modelada usando a distribuição Weibull". Talvez você seja apenas azarado e viva em uma parte do mundo onde eles não podem!
fonte
integrate()
função de R pode ser útil para isso.Recriei sua plotagem com dados de http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (fiz as 1200 medições). Consegui um ajuste decente dos dados, geralmente usando seu código:
Desculpe, não tenho certeza se seu problema poderia ser, mas acho que você deve ajustar os dados aos seus dados. O que me deixa desconfiada é a curva do sino do seu gráfico de densidade, não tenho ideia de onde isso veio.
Aqui estão os momentos que eu gerei:
wind.moments
momentos
WTR para a produção anual: suponho que eu geraria valores discretos para a função de densidade de probabilidade, multiplicaria esses valores pela função de saída e resumiria. Como alternativa, você pode simplesmente usar seus dados brutos, multiplicar os valores pela função de saída, resumir e calcular a média anual. Você deve controlar a sazonalidade de uma maneira adequada (por exemplo, certifique-se de usar anos inteiros ou ponderar adequadamente) .
Aqui está a saída não controlada (usando a fórmula de http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- e a velocidade média do vento na sua localização-513080.html )
fonte
Aqui está um post recente na SO sobre turbinas eólicas. Minha resposta nesse link tem três links nos quais você pode estar interessado:
/programming/4843194/r-language-sorting-data-into-ranges-averaging-ignore-outliers/4844783#4844783
Acabei de verificar um dos links Weibull na resposta SO acima. Por alguma razão, o link está inoperante. Aqui estão alguns links que fornecem as mesmas informações básicas:
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
Além disso, a partir da energia gerada pelo vento, a sazonalidade é óbvia.
fonte
Não tenho certeza se alguém já fez esse argumento, mas o pelwei pode realmente ser forçado a funcionar como uma função weibull de 2 parâmetros, adicionando um limite fixo.
Em vez de ligar,
moments<-pelwei(wind.moments)
você deve simplesmente ligarmoments<-pelwei(wind.moments,bound=0)
você sempre pode verificar qual é o valor zeta. Se não for 0 e você estiver usando o dweibull, precisará fazer algo sobre isso.
fonte