[運算] 聯立微分方程用lsqcurvefit求參數最佳ꐠ…已回收

看板MATLAB作者 (123木頭人)時間14年前 (2011/06/28 22:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我在執行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)
文章代碼(AID): #1E2UjSrO (MATLAB)