ODE45 - seperate function from commandfile

1 view (last 30 days)
fxo
fxo on 14 May 2013
I'm calculating some chemical reactions using the code below but I would like to bring out the "incode" function concentration to a seperate functionfile. I've made a try in the code at the bottom.
s = 1;
q = 1;
w = 0.1610;
% define y = [α(t) β(t) γ(t)] = [y(1) y(2) y(3)], then
concentration = @(t,y) [...
s * (y(2) - y(1)*(y(2)+1) - q*y(1)^2) % α'(t)
(-y(2) - y(1)*y(2) + y(3))/s % β'(t)
w * (y(1)-y(3)) % γ'(t)
];
% initial value
y0 = [30 1 30];
% time span
t_span = [0 10];
% solve numerically
[t, y] = ode45(concentration, t_span, y0);
plot(t,y);
Function draft
function concentration = func(t,y)
concentration=[
s * (y(2) - y(1)*(y(2)+1) - q*y(1)^2) % α'(t)
(-y(2) - y(1)*y(2) + y(3))/s % β'(t)
w * (y(1)-y(3)) % γ'(t)
];
I'm a bit lost and would appreciate some help to do this.
  4 Comments
Jan
Jan on 14 May 2013
@fxo: Please note, that the "why is your question not urgent" thread is the one with the 2nd most votes in this forum. See also: http://www.mathworks.com/matlabcentral/answers/43073-a-guide-to-tags

Sign in to comment.

Accepted Answer

Jan
Jan on 14 May 2013
Save this as file:
function c = func(t, y, s, q, w)
c = [s * (y(2) - y(1)*(y(2)+1) - q*y(1)^2); ... % α'(t)
(-y(2) - y(1)*y(2) + y(3))/s; ... % β'(t)
w * (y(1)-y(3))]; % γ'(t)
Then start the integrator like this:
s = 1;
q = 1;
w = 0.1610;
y0 = [30 1 30];
t_span = [0 10];
[t, y] = ode45(@(t,x) func(t, x, s, q, w), t_span, y0);
  1 Comment
fxo
fxo on 14 May 2013
Thank you for the help, worked very well!:)

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!