system of differential equations, function call
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I have written the following code. Trying to simulate the zombie apocalypse. There might be something wrong with my ode45, and it might be something wrong with my function. I'd be grateful if someone could help me out :)
(I'm not quite sure about the 'options' either...)
%%%%%%%%%%%%%%%%%%%%%%%%%
syms x t;
tspan = [1 100];
options = odeset('RelTol',1e-6,'AbsTol',1,'InitialStep',tspan);
a = 1.4e-6;
b = 3.1e-8;
bd = 5.6e-16;
d = 2.8e-8;
i = 2.6e-6;
n = 1.4e-6;
r = 2.8e-7;
qi = 2.7e-6;
qz = 2.7e-6;
dq = 2.8e-5;
H0 = (b-d)/bd;
[t1,x1]=ode45(@(t,x) zombie1(t, x, a, b, bd, d, i, n, r),tspan,[H0,0,0,0]',options);
%%%%%%%ERROR MESSAGE%%%%%%%
zombie = 4×1
-0.0000
0
0
0.1500
Output argument "zombie1" (and maybe others) not assigned during call to "zombie1".
Error in MS_Ov3 (line 43)
[t1,x1]=ode45(@(t,x) zombie1(t, x, a,b,bd,d,i,n,r),tspan,[H0,0,0,0]',options);
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[t2,x2]=ode45(@(t,x) zombie2(t, x, a,b,bd,d,i,n,r,qi,qz,dq),tspan,[H0,0,0,0,0]',options);
figure(1)
subplot(1,2,1);
grid on;
plot(t1, x1, '-o');
title('Zombieapokalypse');
subplot(1,2,2);
grid on;
plot(t2, x2, '-o');
title('Zombieapokalypse m karantene');
%%%%%%%%%%%%%%%%%%%%%%%%
The code is written in matlab livescript, the functions are in different scripts, same path.
Here's the function: (Second one is similar)
%%%%%%%%%%%%%%%%
function zombie1 = zombie(t, x, a,b,bd,d,i,n,r)
zombie = [b*x(1) - d*x(1) - i*x(1)*x(3) - bd*x(1)^2;
i*x(1)*x(3) - a*x(2) - d*x(2);
a*x(2) - n*x(1)*x(3) + r*x(4);
d*(x(1) - x(2)) + n*x(1)*x(3) - r*x(4)]
end
0 comentarios
Respuestas (1)
Star Strider
el 28 de En. de 2021
Try this:
function zombie1 = zombie(t, x, a,b,bd,d,i,n,r)
zombie1 = [b*x(1) - d*x(1) - i*x(1)*x(3) - bd*x(1)^2;
i*x(1)*x(3) - a*x(2) - d*x(2);
a*x(2) - n*x(1)*x(3) + r*x(4);
d*(x(1) - x(2)) + n*x(1)*x(3) - r*x(4)];
end
Also, there is no ‘zombie2’ function in the code you posted, and there are too many input arguments to ‘zombie’ in the second ode45 call. You need to fix those, as well as the problem with the odeset call.
0 comentarios
Ver también
Categorías
Más información sobre Ordinary Differential Equations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!