having if/else statement go to previous input

5 visualizaciones (últimos 30 días)
Kitt
Kitt el 1 de Nov. de 2024
Editada: Bruno Luong el 2 de Nov. de 2024
I have a matrix, opt, that consists of 3 outputs, 1/2/3. Output 1 goes through a bunch of steps, output 2 goes through a bunch of different steps, and if opt is 3 there's a 50/50 chance it goes through either set of steps. How do I set this up? I want something like this:
if opt == 1
abc
elseif opt == 2
xyz
else
if rand() < 0.5
opt == 1 %go back up to where "if opt == 1" is and go through steps abc
else
opt == 2 %go back up to where "if opt == 2" is and go through steps xyz
end
end
instead of having to do this:
if opt == 1
abc
elseif opt == 2
xyz
else
if rand() < 0.5
abc
else
xyz
end
end
The code is already about 1000 lines and I don't want to double it. Is there anyway I can have it go back up to where those previous elseif statements are?
  3 comentarios
Umar
Umar el 2 de Nov. de 2024
Recursive calls can lead to stack overflow if not managed carefully, especially with deep recursion.
Walter Roberson
Walter Roberson el 2 de Nov. de 2024
or use a label with a conditional jump
I don't think I understand what you are saying there, @Umar . MATLAB does not have any concept of GOTO or labeled statements.

Iniciar sesión para comentar.

Respuestas (3)

Torsten
Torsten el 1 de Nov. de 2024
Editada: Torsten el 1 de Nov. de 2024
r = rand();
if opt == 1 || (opt == 3 && r < 0.5)
abc
else
xyz
end

Anjaneyulu Bairi
Anjaneyulu Bairi el 1 de Nov. de 2024
Editada: Anjaneyulu Bairi el 1 de Nov. de 2024
Hi,
These are the points to be noted here:
  • If "opt" is equal to 1 then execute abc
  • If "opt" is equal to 2 then execute xyz
  • if "opt" is 3 or something else then based on rand() value execute either abc( if rand()<0.5) or xyz
Refer the below code for above logic implementation
if opt == 1 || (opt ~= 2 && rand() < 0.5)
abc
else
xyz
end

Bruno Luong
Bruno Luong el 2 de Nov. de 2024
Editada: Bruno Luong el 2 de Nov. de 2024
This is how I would do. It seems clearer to me.
if opt == 3
opt = randi([1 2]); % randi(2) is also fine
end
if opt == 1
abc
else % if opt == 2
xyz
end

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by