我想實現一個例程來擬合我的實驗中的電泳數據。Matlab非線性,多參數曲線擬合問題
目標是根據數據集中峯的面積,從電泳圖中峯的相對面積推導出生物體相互作用的動力學參數。
由於所有相關的微分方程是已知的,因爲該組方程的具有解析解,如下所述:
Analytical solution manuscript
我設定有關輸入的相關等式(6,8,13,。 ..從參考手稿)在matlab中。
這樣創建的函數可以工作,我可以用它來模擬相互作用物種的電泳圖譜。我現在想用函數來擬合實驗數據並檢索參數(總共8個,Va,Vc,MUa,MUc,k,A0,C0,基線噪聲)。
其中一些顯然是相關的。例如值可能是(給予其規模的想法):
params0 = [ ...
8.44E-02; ... % Va
1.25E-01; ... % Vc
5.32E-05; ... % MUa
8.87E-05; ... % MUc
4.48E-03; ... % k
6.06E-01; ... % A0
3.00E-00; ... % C0
4.64E-03 ... % noise
];
我的問題是,如果我提供的實驗數據和嘗試類似lsqcurvefit:
[x,resnorm,residual] = lsqcurvefit(@(param,xdata) Electropherogram2(param,xdata,column), params0, time, ydata,lb, ub);
我往往得到的結果非常差,因爲我要麼用完了迭代,我碰到了一些(顯然不合適的)本地最小值或任何其他值...
只有當我用起始值和允許的間隔修改很多(即因爲我知道可能通過其他實驗的值)我最終會得到或多或少的d即使這樣,適合性也不如原始手稿中報道的那麼好。 3)。
該手稿的作者使用了Excel求解器,並且足夠提供圖3中使用的原始數據,但我似乎無法完全符合他們的要求,幾乎沒有提供幾乎正確的起始值。
我沒有足夠的經驗知道我可以調整什麼,使這個過程更少的反覆試驗。
會像全局優化工具箱幫助我嗎?
任何提示,歡迎...
這些問題非常討厭。使用8個自由變量,問題變得非常困難,初始值的小改變使最終值有很大差異。你跑什麼樣的測試?我的意思是你能設計你的測試,以便某些術語變得無足輕重?任何通過將數據推入求解器來解決此問題的嘗試都可能不起作用。如果您的測試可以解耦一些參數,我會很感興趣。 – macduff
嗨macduff,您的評論似乎證實了我的擔憂。參考文獻的作者在這方面做了大量的工作,但呈現出來似乎可以很容易地應用這些擬合。然而,我認爲他們也只是「獨眼」設置參數並基於獨立的數據,並讓lsq例程只關注最終的調諧...... MUa和MUc(擴散率)不能準確地獨立確定,而不會經過極端的數量麻煩...... A0和C0基本上是未知的,因爲你需要k(和相關的Kd)在平衡狀態下知道它們。 – Kris
如果任何參數都是線性的,您可以使用[可分離](http://www.mathworks.com/support/solutions/en/data/1-18E03/index.html?product=OP&solution=1-18E03)問題。分別擬合線性和非線性參數可顯着提高收斂性。此外,全局優化工具箱可以提供幫助。 – Jonas