Chcę utworzyć pętlę, która będzie iterować przez kilka ciągów, ale nie można tego zrobić w programie Matlab.pętla foreach z ciągami w Matlab
Co działa to:
for i=1:3
if (i==1)
b='cow';
elseif (i==2)
b='dog';
else
b='cat';
end
disp(b);
end
a wynik jest:
cow
dog
cat
Ale co chcę jest coś bardziej eleganckie, że będzie wyglądać następująco:
for i=['cow','dog','cat']
disp (i);
end
i dać ten sam wynik.
Czy istnieje opcja w Matlab, aby to zrobić?
Ponadto:
muszę słowa jak ciągi później użyć, a nie tylko do wyświetlania (the disp
był tylko jako przykład). Próbowałem używać tablic komórkowych w moim prawdziwym programie:
clear all;
close all;
clc;
global fp_a
global TEST_TYPE
global SHADE_METHODE
for fp_a=11:24
for shade={'full','fast'}
SHADE_METHODE=shade(1);
for test={'bunny','city'}
TEST_MODE=test(1);
fprintf ('fp_a:%d | test: %s | shade: %s',fp_a,TEST_TYPE,SHADE_METHODE);
ray_tracing;
end
end
end
To nie działa jako wartości pozostać jako komórki, a nie ciągi otrzymuję komunikat o błędzie:
??? Błąd przy użyciu ==> fprintf Funkcja nie jest zdefiniowana dla wejść "komórki".
* - Naprawdę nie potrzebuję fprintf
Po prostu używam go do sprawdzenia, czy wartości są prawidłowe.
** - ray_tracing
jest mój kod, który używa wartości ciągów
Problem w dodawaniu to tylko składnia. Musisz użyć nawiasów klamrowych - 'test {1}' - aby wyodrębnić tablicę znaków z komórki, a nie normalne nawiasy - 'test (1)' - która właśnie wybiera pierwszą komórkę w tablicy, skutecznie nic tu nie robiąc. Ponownie sprawdź przykładowy kod Oli; zauważ, że używa nawiasów klamrowych w 'i {1}'. (Nie wolno również używać globali, jeśli można tego uniknąć.) –
Powinieneś użyć 'SHADE_METHODE = shade {1};' zamiast 'SHADE_METHODE = shade (1);' – Oli
możliwy duplikat [Czy istnieje foreach w MATLAB? Jeśli tak, jak się zachowuje, jeśli zmieniają się dane?] (Http://stackoverflow.com/questions/408080/is-there-a-foreach-in-matlab-if-so-how-does-it-behave -if-the-basis-data-c) –