RuntimeWarning: деление на ноль, встречающееся в журнале при использовании pvlib
Я использую PVLib для моделирования PV системы. Я довольно новичок в программировании и Python, и я впервые использую PVLib, поэтому неудивительно, что я столкнулся с некоторыми трудностями.
В частности, я создал следующий код, используя обширные примеры readthedocs по адресу http://pvlib-python.readthedocs.io/en/latest/index.html
import pandas as pd
import numpy as np
from numpy import isnan
import datetime
import pytz
# pvlib imports
import pvlib
from pvlib.forecast import GFS, NAM, NDFD, HRRR, RAP
from pvlib.pvsystem import PVSystem, retrieve_sam
from pvlib.modelchain import ModelChain
# set location (Royal Greenwich Observatory, London, UK)
latitude, longitude, tz = 51.4769, 0.0005, 'Europe/London'
# specify time range.
start = pd.Timestamp(datetime.date.today(), tz=tz)
end = start + pd.Timedelta(days=5)
periods = 8 # number of periods that the GFS model and/or the model chain allows us to forecast power output.
# specify what irradiance variables we want
irrad_vars = ['ghi', 'dni', 'dhi']
# Use Global Forecast System model. The GFS is the US model that provides forecasts for the entire globe.
fx_model = GFS() # note: gives output in 3-hourly intervals
# retrieve data in processed format (convert temps from Kelvin to Celsius, combine elements of wind speed, complete irradiance data)
# Returns pandas.DataFrame object
fx_data = fx_model.get_processed_data(latitude, longitude, start, end)
# load module and inverter specifications
sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod')
cec_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')
module = sandia_modules['SolarWorld_Sunmodule_250_Poly__2013_']
inverter = cec_inverters['ABB__PVI_3_0_OUTD_S_US_Z_M_A__240_V__240V__CEC_2014_']
# model a fixed system in the UK. 10 strings of 250W panels, with 40 panels per string. Gives a nominal 100kW array
system = PVSystem(module_parameters=module, inverter_parameters=inverter, modules_per_string=40, strings_per_inverter=10)
# use a ModelChain object to calculate modelling intermediates
mc = ModelChain(system, fx_model.location, orientation_strategy='south_at_latitude_tilt')
# extract relevant data for model chain
mc.run_model(fx_data.index, weather=fx_data)
# OTHER CODE AFTER THIS TO DO SOMETHING WITH THE DATA
Использовав в консоли много операторов print() для отладки, я вижу это в последней строке
mc.run_model(fx_data.index....
Я получаю следующую ошибку:
/opt/pyenv/versions/3.6.0/lib/python3.6/site-packages/pvlib/pvsystem.py:1317:
RuntimeWarning: divide by zero encountered in log
module['Voco'] + module['Cells_in_Series']*delta*np.log(Ee) +
/opt/pyenv/versions/3.6.0/lib/python3.6/site-packages/pvlib/pvsystem.py:1323:
RuntimeWarning: divide by zero encountered in log
module['C3']*module['Cells_in_Series']*((delta*np.log(Ee)) ** 2) +
В результате, когда я продолжаю смотреть на выходные данные ac_power, я получаю то, что выглядит как ошибочные данные (каждый час с прогнозом, который не NaN = 3000 Вт).
Я бы очень признателен за любую помощь, которую вы можете оказать, поскольку я не знаю, что является причиной этого. Может я неправильно указываю систему?
Спасибо Мэтт
1 ответ
Я думаю, что предупреждения, которые вы видите, можно игнорировать. Горстка алгоритмов pvlib выдает предупреждения из-за таких вещей, как 0 значений ночью.
Я думаю, что ваша проблема со значениями, отличными от NaN, не связана с предупреждениями. Изучите другие результаты моделирования (хранящиеся в виде атрибутов mc - см. Документацию и исходный код), чтобы узнать, сможете ли вы отследить источник вашей проблемы.