MATLAB: Updating the parameter of ODE45

MATLABode45

I have an ODE system such as
b=1;
f = @(t,x) -(b/N)*x(1)*x(2);
ODE45
I want to write a loop that changes the value of b. But it does not seem to me that just changing the value of b will not update the equation f thus the solution.
b=2;
f = @(t,x) -(b/N)*x(1)*x(2)
ODE45
What should be done here?

Best Answer

Actually, ‘f’ needs to be a (2x1) matrix, since there are two values of ‘x’, and they both need to be defined, so something like this will work:
f = @(t,x,b,N) [x(1); -(b/N)*x(1)*x(2)];
tspan = [0 5];
ic = rand(2,1);
b = rand;
N = 42;
[t,x] = ode45(@(t,x)f(t,x,b,N), tspan, ic);
I am not certain what you are doing, so this may need to be changed. However to integrate two dependent variables, the ODE function has to have that structure, even if you only use the ‘x(:,2)’ result. I would need to know the original differential equation to know if this is correct for it.