Save parameters at each ODE iteration
3 ビュー (過去 30 日間)
古いコメントを表示
Hi, I would like to know how to save at each iteration of a parametric ODE the vector of my parameters 'p'.
function f=bernardode(p,t)
t=temposp;
options=odeset('AbsTol',1e-6,'RelTol',1e-6);
[T,Z]=ode45(@bernard2,t,z0,options);
function dz = bernard2(t,z)
dzdt=zeros(4,1);
dzdt(1)=-(p(3)*(1-qmin/z(1)))*(((Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2))))/(p(4)+(Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2)))))*z(1);
dzdt(2)=(p(3)*(1-qmin/z(1)))*(((Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2))))/(p(4)+(Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2)))))*z(2);
dzdt(3)=p(2)*z(4)+(p(3)*(1-qmin/z(1)))*(((Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2))))/(p(4)+(Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2)))))*(1-p(1)-z(3));
dzdt(4)=(p(1)-z(4))*(p(3)*(1-qmin/z(1)))*(((Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2))))/(p(4)+(Io/(sigma*L*z(2)))*(1-exp(-sigma*L*z(2)))))-p(2)*z(4);
dz=dzdt;
end
f=Z;
end
In particular the optimal parameters are found by simulated annealing algorithm.
I tried to add a string parameter=p before the second 'end' but the code overwrite p at each cycle.
I tried also to use 'save' command but it doesn't work.
Thank you in advance.
2 件のコメント
回答 (1 件)
Samatha Aleti
2019 年 11 月 5 日
As per my understanding, you want to save the vector "p" of each iteration. To do this, you can initialize a matrix, let “store” of size (number of iterations) x (length of vector p) as follows:
% numIterations : number of iteration
% len : length of vector p
store = zeros(numIterations, len); % Initialization
idx = 0; % Row index
Then save each ‘p’ in a separate row of “store” using “idx” as follows:
% Before end in your code
idx = idx+1;
store(idx,:) = p;
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Ordinary Differential Equations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!