天天看點

python繪制拟合曲線與樣本點_使用Python拟合模拟和實驗資料點

我編寫了一些執行蒙特卡羅模拟的代碼,并生成信号強度與時間的曲線.這種曲線的形狀取決于各種參數,我的合作者想要通過我模拟的實驗的“真實版本”确定其中的兩個參數.

我們準備将她的實驗資料與我的模拟曲線進行比較,但現在我卡住了,因為我還沒有能夠執行任何拟合(到目前為止,我已經用模拟的噪聲資料替換了實驗資料進行測試).我已經嘗試使用scipy.optimize.leastsq,它以代碼2退出(根據文檔,這意味着拟合成功),但它主要隻傳回我輸入的值(不完全相同,但接近)猜測,無論他們與真正的價值觀有多接近或遠離.如果它确實報告了不同的值,則生成的曲線仍然與真實曲線顯着不同.

另一個觀察是,infodict [‘nfev’]總是包含

The relative error between two consecutive iterates is at most 0.000000

在使用我模拟的噪聲資料時,我已經玩了兩個參數的真實值具有相同的數量級(因為我認為使用的步長可能隻會合理地影響其中一個),具有非常不同的數量級,我改變了步長(參數epsfcn),但無濟于事.

有沒有人知道我可能做錯了什麼,或者我可以使用什麼拟合函數而不是leastsq?如果是這樣的話:非常感謝!

編輯

正如Russ所建議的,我現在将提供有關如何進行模拟的一些細節:我們正在研究與大分子結合的小分子.這種情況發生的機率取決于它們的互相親和力(親和力是從實驗資料中提取的值之一).一旦發生了綁定,我們還會模拟複合體再次分離所需的時間(解離時間常數是我們感興趣的第二個參數).還有許多其他參數,但它們僅在計算預期信号強度時才變得相關,是以它們與實際模拟無關.

我們從給定數量的小分子開始,每個小分子的狀态被模拟多個時間步長.在每個時間步驟,我們使用親和力值來确定該分子是否未結合,是否與大分子結合.如果它已被綁定,我們使用解離時間常數和它已被綁定的時間量來确定它是否在此步驟中解離.

在兩種情況下,參數(親和力,解離時間常數)用于計算機率,然後将其與随機數(0和1之間)進行比較,并且在此比較中,它取決于小分子的狀态(束縛/未綁定的)更改.

編輯2

沒有明确定義的函數來确定所得曲線的形狀,并且即使形狀清晰可再現,每個單獨的資料點也有一個随機元素.是以,我現在嘗試使用optimize.fmin而不是leastsq,但它不會收斂,隻是在執行了最大疊代次數後退出.

編輯3

正如Andrea所建議的,我上傳了一個sample plot.我真的不認為提供樣本資料會有很大幫助,它隻是每個x值(時間)的一個y值(信号強度)……

解決方法:

不完全是答案,但也有PyMinuit嘗試.

你想要做的是将你的pdf和資料點轉換為chi ^ 2或-ln(似然)或你選擇的度量,并使用PyMinuit來最小化該名額.它可以配置得非常冗長,這樣你就可以找出出錯的地方(如果它确實出錯了).