[運算] 聯立微分方程用lsqcurvefit求參數最佳ꐠ…已回收
我在執行lsqcurvefit這最佳化時MATLAB出現這些紅字的訊息
??? Attempted to access k(1); index out of bounds because numel(k)=0.
Error in ==> ODE_1 at 8
f=-k(1)*n(1)-k(2)*n(2)+k(3)*n(4)+k(4)*n(6).........
.
.
.
Caused by:
Failure in initial user-supplied objective function evaluation.
LSQCURVEFIT cannot continue.
想請教板上高手我的問題是出在哪邊,為什麼k(1)會超出索引範圍??
我已經困在這好幾天了@@
以下是我的程式
==============主程式====================================
global k c0 ga gb
tindexp=[100 200 300 400 500 600 800]; % ydata
c0=[3e19 4e19 5e19 6e19 7e19 8e19 9e19]; % xdata
ga=[1 2 3 4 5 6 7]; % ODE內已知的參數
gb=[8 9 10 11 12 13 14]; % ODE內已知的參數
p0=[1.8e-2, 2.2e-2, 5, 2.5]; % 參數k起始猜測值(四個)
[p,resnorm,residual]=lsqcurvefit('fun',p0,c0,tindexp);
k=[p(1) p(2) p(3) p(4)];
=======================================================
=======================副程式(fun)=====================
function tind=fun(p,c0)
global ga gb
┌n01=[3e19 zeros(1,ga(1)-1) 3e19 zeros(1,gb(1)+3)]; % ODE初始值
│tspan1=(1:30000);
│[t1,n1]=ode45('ODE_1',tspan1,n01');
│
│y01=(n1(:,ga(1)+gb(1)+1)+n1(:,ga(1)+gb(1)+3))./n1(:,ga(1));
│[u(1) v(1)]=min(abs(y01-ga(1)));
└tind(1)=t1(v(1));
上面這樣的方程式共有七組(僅列出一組表示,每組初始值和時間不一樣)
主要是求出每一組聯立ODE達到特定條件時的時間(tind)
=========================================================
=======================副程式的副程式(ODE_1)==============
function f=ODE_1(t,n)
global ga gb k
f=-k(1)*n(1)-k(2)*n(2)+k(3)*n(4)+k(4)*n(6).........
f=..........
.
.
.
ODE內容大約是這樣(微分方程式很多,大概打的意思),也是共七組
============================================================
小弟我是MATLAB新手,週遭朋友也不太懂MATLAB,只能請板上高手幫忙了
感謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.126.69.63
※ 編輯: yichen1006 來自: 122.126.69.63 (06/28 23:03)