Why are the inputs to the functions used in the ODE45 solver not in the right syntax?

1 visualización (últimos 30 días)
My code should solve an ODE that contains functions which are stored in seperate files. My problem is taht i dont know how to prperly give the inputs to the functions so it is transferred over several files. I was told i should try giving the additional inputs to the function when i call it rather than making the variables global (having the variables global worked the other option did not work yet). Should i keep it global or is the other approach also fine with the right syntax? And what is wrong about my code, that it doesnt work when trying to give the inputs to the function?
Thanks in advance.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%This is in thé main script:
field = [1,0,1 ; 1,1,1];
%in my script i loop through each element of the field-matrix and excute code afterwards but to make it easier to %understand i left that out since its not important for the question
idx1 = 1;
idx2 = 2;
startA = 10;
A = 10;
currbugs = 12;
tspan = [0,1];
y0 = [startA];
[t,y]=ode45(@Aph,tspan,y0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%This is the function which is in a seperate file:
function sol=Aph(t,y,field,idx1,idx2,currbugs)
rgr = 10;
A = y(1);
P = (PRL1(field,idx1,idx2,A)*currbugs(2,1))+(PRad(field,idx1,idx2,A)*currbugs(7,1));
sol = rgr*A*(1-(A/2500))-P;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Within the calculation of the ODE45 equation other function PRL1 and PRad are called but they %are also in seperate files:
function out = PRL1(field,idx1,idx2,A)
sr = 39.1;
ht = 10;
if field(idx1,idx2) == 1
SAI = 1;
else
SAI = 0.6;
end
out = (sr*(A/SAI))/(1+sr*ht*(A/SAI));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%and the second function:
function out = PRad(field,idx1,idx2,A)
sr = 0.0139;
ht = 0.0049
if field(idx1,idx2) == 1
SAI = 1;
else
SAI = 0.6;
end
out = sr*(A/SAI)/(1+sr*ht*(A/SAI));

Respuesta aceptada

Torsten
Torsten el 22 de Nov. de 2022
Editada: Torsten el 23 de Nov. de 2022
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%This is in thé main script:
field = [1,0,1 ; 1,1,1];
%in my script i loop through each element of the field-matrix and excute code afterwards but to make it easier to %understand i left that out since its not important for the question
idx1 = 1;
idx2 = 2;
startA = 10;
A = 10;
currbugs = [1;1;1;1;1;1;7];
tspan = [0,1];
y0 = [startA];
[t,y]=ode45(@(t,y)Aph(t,y,field,idx1,idx2,currbugs),tspan,y0);
plot(t,y)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%This is the function which is in a seperate file:
function sol=Aph(t,y,field,idx1,idx2,currbugs)
rgr = 10;
A = y(1);
P = (PRL1(field,idx1,idx2,A)*currbugs(2,1))+(PRad(field,idx1,idx2,A)*currbugs(7,1));
sol = rgr*A*(1-(A/2500))-P;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Within the calculation of the ODE45 equation other function PRL1 and PRad are called but they %are also in seperate files:
function out = PRL1(field,idx1,idx2,A)
sr = 39.1;
ht = 10;
if field(idx1,idx2) == 1
SAI = 1;
else
SAI = 0.6;
end
out = (sr*(A/SAI))/(1+sr*ht*(A/SAI));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%and the second function:
function out = PRad(field,idx1,idx2,A)
sr = 0.0139;
ht = 0.0049;
if field(idx1,idx2) == 1
SAI = 1;
else
SAI = 0.6;
end
out = sr*(A/SAI)/(1+sr*ht*(A/SAI));
end
  4 comentarios
Dominik Hüfner
Dominik Hüfner el 23 de Nov. de 2022
thanks for that link, that was the information i was looking for.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programming en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by