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!