How do I declare and iterate a variable in an ODE driver file?
Show older comments
I have a pair of function and ode driver files. Currently, all values except initial conditions are declared as variables in the function file.
I would like to iterate on one variable, and check if the result is better than the previous value.
For example,
- start with Snh_in_1=1,
- run the ODE,
- print y(end,3).
- +0.1 to Ssnh (i.e. Snh_in_1 = 1.1)
- run the ODE,
- print new y(end,3).
- if new y(end,3), > original y(end, 3), repeat from step 1.
- stop when new y(end,3) less than or equal to previous y(end,3), and report this value of Snh_in_1.
These are my code so far
Function file: https://pastebin.com/Mp43ea1v
Driver file: https://pastebin.com/ct8iNL8W
I can imagine an if loop that might work:
result2 = 2;
result1 = 1;
Ssnh_in_1 = 1;
if result2 >= result1
[t,y]=ode15s(@pha_cont,[0,15],y0);
result1 = y(end,3);
Ssnh_in_1 = Ssnh_in_1 + 0.1;
[t,y]=ode15s(@pha_cont,[0,15],y0);
result2 = y(end,3);
else
disp(Ssnh_in_1)
end
But I have no idea how to pass this variable from the driver into the function file.
How can I do what I want in Matlab? Thanks in advance!
Accepted Answer
More Answers (1)
Bjorn Gustavsson
on 9 Sep 2019
The way I read your ODE-function your Snh_in_1 is the initial value of the second component of y. If so it should be no more difficult than something like this:
Snh_in_1 = 1;
dSnh_in_1 = 0.1;
for i_iter = 1:10
y0 = [a0,Snh_in_1+(i_iter-1)*dSnh_in_1,c0,d0,e0]; % I lost track of how many components you used
[t,y] = ode15s(@pha_cont,[0,15],y0);
results(i_iter,:) = y(end,:);
Results{i_iter,1} = t; % If you've integrated all your ODE's you might just
Results{i_iter,2} = y; % as well save the entire solution - if it doesn't become too big...
end
% Then do the rest of the analysis after all the ODE-integrations
HTH
1 Comment
Miraculous Mongoose
on 9 Sep 2019
Categories
Find more on Ordinary Differential Equations in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!