Python ND интерполяция: как найти оставшиеся координаты по заданным значениям функции и координатам по произвольному подмножеству общего количества осей - PullRequest
0 голосов
/ 30 апреля 2020

Это длинная и, вероятно, плохо поставленная проблема. Пожалуйста, потерпите меня. Я даже не уверен, что это подходящий форум.

С одной стороны, у меня есть сетка моделей звездного спектрального распределения энергии (SED) (измерения интенсивности в зависимости от частоты фотонов, в основном в MIR). в радиодиапазон), рассчитывается численно с помощью программы, которая в настоящее время принимает 4 введенных пользователем входных параметра. В целях, которые я сейчас пытаюсь использовать, это означает, что выходы ( F ) являются функцией 5 параметров: частота ( nu ), яркость звезды ( L) ), звездная масса ( M ), звездная огибающая ( M_env ) и напряженность поля межзвездного излучения ( ISRF ). Учитывая ограничения моей доступной вычислительной мощности, сетка довольно грубая (всего ~ 400 моделей), в основном с логарифмическим разнесением, и не все разнесены с использованием одной и той же логарифмической c базы (большинство из них база-2, ISRF является основанием-10). Однако частотная шкала является линейной и одинаковой для всех моделей.

Чтобы выразить это в математической записи, эти модели дают мне F (nu, L, M, M_env, ISRF). Длина осей по порядку (100, 6, 6, 6, 4), но не все комбинации L и M допускаются, поэтому общее количество точек данных составляет 3-40000, а не 86400.

С другой стороны, у меня есть набор наблюдаемых SED для нескольких реальных протозвездных ядер, что означает, что у меня есть выход и 1 из 5 параметров: F_obs = F (nu_obs,?,?,?, ?) . Если я возьму интегралы моих наблюдений за номинал, у меня будет F_obs = F (nu_obs, L_obs,?,?,?) . Мне нужно выяснить, как интерполировать мою сетку из F (nu, L, M, M_env, ISRF) , учитывая F в nu_obs , чтобы получить M_obs, M_env_obs, ISRF_obs и, возможно, L_obs . Поскольку некоторые части спектров плохо отбираются существующими наблюдательными средствами, я написал свой код, чтобы уменьшить выборку сетка модели вдоль оси частот, чтобы соответствовать длине моих наблюдательных спектров.

Это звучит как идеальная байесовская установка для MCM C, и я бы go по этому маршруту, если бы у меня была аналитическая модель, которая работала на всех частотах. К сожалению, высокочастотная половина спектра может быть рассчитана только численно из-за стохастического c излучения и ряда агрегированных спектральных характеристик, и она плавно смешивается с низкочастотной частью, которая в противном случае могла бы быть рассчитана аналитически . Большая часть массы находится в холодной пыли, которую я уже аналитически рассчитал как для массы ядра, так и для оболочки, но они очень неопределенные (примерно в 2-3 раза), и я делаю этот анализ как независимую проверку. Если есть простой способ Pythoni c сделать MCM C с числовыми моделями, я был бы очень заинтересован. Я никогда не делал MCM C на численных моделях раньше, и мне не хватало большого статистического фона, я никогда не видел, чтобы это делалось таким образом, чтобы я мог понять, если я когда-либо видел это вообще.

В противном случае, я надеялся, что я смогу использовать https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html или какой-либо другой ND-интерполятор в scipy, но я не могу сказать из документации, могут ли мои данные быть структурированы, чтобы сделать вид Я хочу одну интерполяцию go, или, если мне нужно выполнить итерацию, или как мне следует структурировать свои входные данные, чтобы получить желаемый выходной результат. Я в основном заблудился и изо всех сил пытаюсь своевременно получить нужную мне помощь или даже express суть проблемы из-за блокировки.

...