calling of functions and subfunctions

hi guys i am trying to make a switch case . however, the code i have involves a function calling other functions and so i cant create the switch. (when i create the switch and remove the function title for the subfunction, the main function cant run the case. for example:
function main
for ...
Y = EulerODE(tspan, Init,dt, Repressor, Vm(i), Kx(i));
...
...
...
...
end
...
...
Y = EulerODE2(tspan, Init,dt);
...
end
%subfunction 1
function Y = EulerODE(tspan,init,dt,Repressor,Vm,Kx)
...
end
%subfunction 2
function Y = EulerODE2(tspan,init,dt)
end

4 commentaires

Adam Danz
Adam Danz le 12 Nov 2019
Where does the switch come in?
Guillaume
Guillaume le 12 Nov 2019
Modifié(e) : Guillaume le 13 Nov 2019
Yes, your question is really not clear. Whether or not a function calls other function doesn't matter at all for switch statements. Whether there are subfunctions, local functions, nested functions, whatever doesn't change anything to the behaviour of switch
On the other hand, beginners tend to use switch all over the place when some much simpler coding patterns (e.g. look-up tables) would make their life easier.
per isakson
per isakson le 12 Nov 2019
Is there an error message? If so show us the full error message.
I assume that your problem isn't caused by the switch-statement. What happens if you comment out the switch-statement?
"and memove the function title for the subfunction" what exactly does that mean?
i havent actually made a switch because what ive tried isnt working. what ive written above works fine. basically i want to change what ive written in my question to something like what ive written below but i believe i cant have a function inside the switch? :
function main
switch
case1
for ...
Y = EulerODE(tspan, Init,dt, Repressor, Vm(i), Kx(i));
...
...
...
...
end
function Y = EulerODE(tspan,init,dt,Repressor,Vm,Kx)
...
end
case 2
...
...
Y = EulerODE2(tspan, Init,dt);
...
function Y = EulerODE2(tspan,init,dt)
end
end %end switch
end %ends function main

Connectez-vous pour commenter.

 Réponse acceptée

Cam Salzberger
Cam Salzberger le 12 Nov 2019

0 votes

Hey Geoffrey,
Which version of MATLAB are you using? If you remove the main "function" declaration, it will consider the file to be a script. Local functions in scripts only started being supported in R2016b, so if you have a version earlier than that, then MATLAB will error. If you would prefer to use a script, you'll need to make separate function files for each of your local functions.
-Cam

2 commentaires

gb
gb le 13 Nov 2019
Modifié(e) : gb le 13 Nov 2019
im using the online version of matlab, i have also the R2019b version. i havent actually made a switch because what ive tried isnt working. basically i want to change what ive written in my question to something like what ive written below but believe i cant have a function inside the switch? :
function main
switch
case1
for ...
Y = EulerODE(tspan, Init,dt, Repressor, Vm(i), Kx(i));
...
...
...
...
end
function Y = EulerODE(tspan,init,dt,Repressor,Vm,Kx)
...
end
case 2
...
...
Y = EulerODE2(tspan, Init,dt);
...
function Y = EulerODE2(tspan,init,dt)
end
end %end switch
end %ends function main
Walter Roberson
Walter Roberson le 13 Nov 2019
You are correct that functions cannot be defined inside control statements such as switch or if.
You can move all of the nested function definitions to just inside the "end" statement of the function.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Programming dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by