Я написал некоторый код, который выполняет моделирование по методу Монте-Карло и выдает кривые зависимости интенсивности сигнала от времени.Форма такой кривой зависит от различных параметров, два из которых мой сотрудник хочет определить по «реальной версии» эксперимента, который я моделирую.
Мы готовы сравнить ее экспериментальные данные с моими смоделированными кривыми, но теперь я застрял, поскольку я еще не смог выполнить какую-либо подгонку (пока я заменил экспериментальные данные смоделированными данными с шумом длятестирование).Я попытался использовать scipy.optimize.leastsq
, который завершается с кодом 2 (в соответствии с документацией это означает, что подгонка прошла успешно), но в основном он просто возвращает значения (не совсем те же, но близкие), которые я ввел в качестве начального предположения,независимо от того, насколько близко или далеко они были от истинных ценностей.Если он сообщает о других значениях, результирующая кривая все еще значительно отличается от истинной.
Другое наблюдение состоит в том, что infodict['nfev']
неизменно содержит
The relative error between two consecutive iterates is at most 0.000000
При использовании моих смоделированных данных с шумомпоиграл с истинными значениями обоих параметров того же порядка величины (как я думал, что используемый размер шага мог бы только ощутимо повлиять на один из них в противном случае), с совершенно другим порядком величины, и я изменил размер шага(параметр epsfcn
), но безрезультатно.
Кто-нибудь знает, что я могу делать неправильно, или какую функцию подгонки я мог бы использовать вместо leastsq
?Если так: большое спасибо заранее!
РЕДАКТИРОВАТЬ
По совету Расса я сейчас предоставлю некоторые подробности о том, как выполняется симуляция: мы смотрим намаленькие молекулы связываются с большими молекулами.Это происходит с вероятностью, которая зависит от их взаимного сродства (сродство является одним из значений, извлекаемых из экспериментальных данных).Как только связывание произошло, мы также моделируем, сколько времени потребуется, чтобы комплекс снова распался (постоянная времени диссоциации - второй интересующий нас параметр).Существует ряд других параметров, но они становятся релевантными только тогда, когда рассчитывается ожидаемая интенсивность сигнала, поэтому они не имеют отношения к реальному моделированию.
Мы начнем с заданного числа малых молекул, состояниякаждого из которых моделируется в течение ряда временных шагов.На каждом временном шаге мы используем значение сродства, чтобы определить, связывается ли эта молекула, если она не связана, с большой молекулой.Если он уже связан, мы используем постоянную времени диссоциации и количество времени, в течение которого он уже был связан, чтобы определить, диссоциирует ли он на этом шаге.
В обоих случаях параметр (сродство, постоянная времени диссоциации)используется для вычисления вероятности, которая затем сравнивается со случайным числом (между 0 и 1), и от этого сравнения зависит, изменяется ли состояние маленькой молекулы (связано / не связано).
РЕДАКТИРОВАТЬ 2
Нет четко определенной функции, которая определяет форму получаемой кривой, и, хотя форма четко воспроизводима, существует элемент случайностик каждой отдельной точке данных. Поэтому я попытался использовать optimize.fmin
вместо leastsq
, но он не сходится и просто выходит после выполнения максимального числа итераций.
РЕДАКТИРОВАТЬ 3
По предложению Андреа я загрузил образец графика .Я действительно не думаю, что предоставление данных выборки очень помогло бы, это только одно значение y (интенсивность сигнала) на значение x (время) ...