Apakah ada struktur foreach di MATLAB? Jika demikian, apa yang terjadi jika data yang mendasarinya berubah (yaitu jika objek ditambahkan ke set)?
FOR loop MATLAB bersifat statis; Anda tidak dapat mengubah variabel loop antara iterasi, tidak seperti struktur loop untuk (inisialisasi; kondisi; kenaikan) dalam bahasa lain. Ini berarti bahwa kode berikut selalu mencetak 1, 2, 3, 4, 5 terlepas dari nilai B.
A = 1:5;
for i = A
A = B;
disp(i);
end
Jika Anda ingin dapat menanggapi perubahan dalam struktur data selama iterasi, loop WHILE mungkin lebih tepat --- Anda akan dapat menguji kondisi loop di setiap iterasi, dan mengatur nilai variabel loop ( s) sesuai keinginan:
n = 10;
f = n;
while n > 1
n = n-1;
f = f*n;
end
disp(['n! = ' num2str(f)])
Btw, untuk-setiap loop di Jawa (dan mungkin bahasa lain) menghasilkan perilaku yang tidak ditentukan ketika struktur data dimodifikasi selama iterasi. Jika Anda perlu mengubah struktur data, Anda harus menggunakan instance Iterator yang sesuai yang memungkinkan penambahan dan penghapusan elemen dalam koleksi yang Anda iterasi. Berita baiknya adalah bahwa MATLAB mendukung objek Java, sehingga Anda dapat melakukan sesuatu seperti ini:
A = java.util.ArrayList();
A.add(1);
A.add(2);
A.add(3);
A.add(4);
A.add(5);
itr = A.listIterator();
while itr.hasNext()
k = itr.next();
disp(k);
% modify data structure while iterating
itr.remove();
itr.add(k);
end
Undefined function or variable 'B'
.A
adalah vektor baris, bukan vektor kolom. JikaA
sebuah matriks, setiap k akan menjadi vektor kolom dari matriks itu. Jadi, transpos (A'
) atau vektorisasi (A(:)'
) jika perlu..m
file.Zach benar tentang jawaban langsung untuk pertanyaan itu.
Catatan samping yang menarik adalah bahwa dua loop berikut tidak menjalankan yang sama:
Loop pertama membuat variabel
i
yang merupakan skalar dan iterates seperti C untuk loop. Perhatikan bahwa jika Anda memodifikasii
di badan loop, nilai yang diubah akan diabaikan, seperti kata Zach. Dalam kasus kedua, Matlab menciptakan array 10k-elemen, lalu berjalan semua elemen array.Apa ini artinya itu
bekerja, tapi
tidak (karena yang ini akan membutuhkan alokasi memori tak terbatas). Lihat blog Loren untuk detailnya.
Perhatikan juga bahwa Anda dapat beralih di atas array sel.
sumber
MATLAB untuk loop pada dasarnya memungkinkan fleksibilitas yang sangat besar, termasukuntuk setiapKegunaan. Berikut beberapa contoh:
1) Tetapkan indeks awal, kenaikan, dan akhir
2) Lingkaran di atas vektor
3) Lingkarkan melewati tali
4) Lingkarkan di atas larik sel satu dimensi
5) Loop di atas array sel dua dimensi
6) Gunakan nama bidang array struktur
sumber
Jika Anda mencoba untuk mengulang larik sel dan menerapkan sesuatu ke setiap elemen dalam sel, periksa
cellfun
. Ada jugaarrayfun
,,bsxfun
danstructfun
yang dapat menyederhanakan program Anda.sumber
ooh! pertanyaan rapi.
Matlab's for loop mengambil matriks sebagai input dan beralih ke kolomnya. Matlab juga menangani hampir semua hal berdasarkan nilai (tanpa pass-by-reference) jadi saya berharap bahwa ia mengambil snapshot dari input for-loop sehingga tidak dapat diubah.
inilah contoh yang dapat membantu menggambarkan:
sumber
Saat mengulangi array sel string, variabel loop (sebut saja
f
) menjadi array sel elemen tunggal. Harus menulis dif{1}
mana-mana menjadi membosankan, dan memodifikasi variabel loop memberikan solusi yang bersih.sumber
Katakanlah Anda memiliki array data:
maka Anda bisa 'pramuka' seperti ini:
Ini akan menggemakan setiap elemen dalam n (tapi tentu saja mengganti i dengan hal-hal yang lebih menarik juga mungkin!)
sumber
Saya pikir inilah yang benar-benar diinginkan OP:
sumber
numel(array)
jumlah elemen dalam array. mungkin maksudmu1:numel(array)
?for i = -1:0.1:10; disp(i); end;
akan lebih baik?Mulai hari ini (27 Februari), ada kotak alat Untuk-Setiap di MATLAB File Exchange yang memenuhi konsep
foreach
.foreach
bukan bagian dari bahasa MATLAB tetapi penggunaan kotak alat ini memberi kita kemampuan untuk meniru apa yangforeach
akan dilakukan.sumber