উত্তর:
ম্যাটল্যাবের ফর লুপ প্রকৃতিতে স্থির; আপনি অন্যান্য ভাষার লুপ কাঠামোর (ইনিশিয়েশন; শর্ত; বৃদ্ধি) এর বিপরীতে পুনরাবৃত্তির মধ্যে লুপের পরিবর্তনশীলটি সংশোধন করতে পারবেন না । এর অর্থ হ'ল নিম্নলিখিত কোডটি বি এর মান নির্বিশেষে সর্বদা 1, 2, 3, 4, 5 মুদ্রণ করে that
A = 1:5;
for i = A
A = B;
disp(i);
end
যদি আপনি পুনরাবৃত্তির সময় ডেটা কাঠামোর পরিবর্তনের প্রতিক্রিয়া জানাতে সক্ষম হতে চান তবে একটি WHILE লুপ আরও উপযুক্ত হতে পারে --- আপনি প্রতিটি পুনরাবৃত্তিতে লুপের শর্তটি পরীক্ষা করতে পারবেন এবং লুপ ভেরিয়েবলের মান সেট করতে পারবেন ( s) আপনার ইচ্ছামতো:
n = 10;
f = n;
while n > 1
n = n-1;
f = f*n;
end
disp(['n! = ' num2str(f)])
বিটিডব্লিউ, জাভা -এর প্রতিটি লুপ (এবং সম্ভবত অন্যান্য ভাষাগুলি) অনির্দিষ্ট আচরণ তৈরি করে যখন পুনরাবৃত্তির সময় ডেটা স্ট্রাকচারটি সংশোধন করা হয়। যদি আপনাকে ডেটা কাঠামোটি সংশোধন করতে হয় তবে আপনার উচিত একটি উপযুক্ত আইট্রেটার উদাহরণ যা আপনাকে পুনরাবৃত্তি করছে এমন সংগ্রহের উপাদানগুলি সংযোজন এবং অপসারণের অনুমতি দেয়। সুসংবাদটি হ'ল ম্যাটল্যাব জাভা অবজেক্টগুলিকে সমর্থন করে, তাই আপনি এরকম কিছু করতে পারেন:
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
A
এটি একটি সারি ভেক্টর, কলাম ভেক্টর নয়। যদি A
ম্যাট্রিক্স হয়, প্রতিটি কে সেই ম্যাট্রিক্সের কলাম ভেক্টর হবে। সুতরাং, প্রয়োজন হলে স্থানান্তর ( A'
) বা ভেক্টরাইজ ( A(:)'
)।
.m
ফাইলগুলিতে মতলবের সাথে কাজ করার জন্য আপনার প্রথম পছন্দ way
প্রশ্নের সরাসরি উত্তর সম্পর্কে জ্যাচ সঠিক।
একটি আকর্ষণীয় পার্শ্ব নোট নিম্নলিখিত দুটি লুপ একই কার্যকর করে না:
for i=1:10000
% do something
end
for i=[1:10000]
% do something
end
প্রথম লুপটি একটি ভেরিয়েবল তৈরি করে i
যা একটি স্কেলার এবং এটি এটি লুপের জন্য সি এর মতো পুনরাবৃত্তি করে। নোট করুন যে আপনি i
লুপের শরীরে সংশোধন করলে , পরিবর্তিত মানটি অগ্রাহ্য করা হবে, যা জাচ বলেছে। দ্বিতীয় ক্ষেত্রে, মতলব একটি 10 কে-উপাদান অ্যারে তৈরি করে, তারপরে এটি অ্যারের সমস্ত উপাদানকে নিয়ে যায়।
এর অর্থ কী
for i=1:inf
% do something
end
কাজ করে, কিন্তু
for i=[1:inf]
% do something
end
না (কারণ এটির জন্য অসীম স্মৃতি বরাদ্দ প্রয়োজন)। বিশদ জন্য লরেন ব্লগ দেখুন ।
এছাড়াও খেয়াল করুন যে আপনি সেল অ্যারেতে পুনরাবৃত্তি করতে পারেন।
লুপের জন্য ম্যাটল্যাব মূলত: সহ বৃহত্তর নমনীয়তার অনুমতি দেয়প্রতিটির জন্যকার্যকারিতা। এখানে কয়েকটি উদাহরণ:
1) সূচনা, বৃদ্ধি এবং শেষ সূচক নির্ধারণ করুন
for test = 1:3:9
test
end
2) ভেক্টর লুপ
for test = [1, 3, 4]
test
end
3) স্ট্রিং লুপ
for test = 'hello'
test
end
4) এক-মাত্রিক সেল অ্যারের উপরে লুপ করুন
for test = {'hello', 42, datestr(now) ,1:3}
test
end
5) একটি দ্বিমাত্রিক সেল অ্যারের উপরে লুপ করুন
for test = {'hello',42,datestr(now) ; 'world',43,datestr(now+1)}
test(1)
test(2)
disp('---')
end
)) কাঠামোর অ্যারেগুলির ক্ষেত্রের নামগুলি ব্যবহার করুন
s.a = 1:3 ; s.b = 10 ;
for test = fieldnames(s)'
s.(cell2mat(test))
end
আপনি যদি কোনও সেল অ্যারে লুপ করার চেষ্টা করছেন এবং ঘরের প্রতিটি উপাদানকে কিছু প্রয়োগ করতে চান তবে দেখুন cellfun
। এছাড়াও আছে arrayfun
, bsxfun
এবং structfun
যা আপনার প্রোগ্রাম প্রক্রিয়া সহজ করতে পারে।
Ooh! ঝরঝরে প্রশ্ন
ল্যাটুপের জন্য লুপ ইনপুট হিসাবে একটি ম্যাট্রিক্স নেয় এবং এর কলামগুলিতে পুনরাবৃত্তি করে। মতলবও কার্যত প্রতিটি জিনিসকে মান দ্বারা পরিচালনা করে (কোনও পাস-বাই-রেফারেন্স নয়) তাই আমি আশা করব যে এটি অপরিবর্তনীয়ভাবে লুপের ইনপুটটির স্ন্যাপশট নেয়।
এখানে একটি উদাহরণ যা চিত্রিত করতে সহায়তা করতে পারে:
>> A = zeros(4); A(:) = 1:16
A =
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
>> i = 1; for col = A; disp(col'); A(:,i) = i; i = i + 1; end;
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> A
A =
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
স্ট্রিংয়ের সেল অ্যারেগুলি পুনরাবৃত্তি করার সময়, লুপ ভেরিয়েবল (আসুন এটি কল করি f
) একটি একক-উপাদান সেল অ্যারে হয়ে যায়। f{1}
সর্বত্র লেখার জন্য ক্লান্তিকর হয়ে ওঠে এবং লুপের ভেরিয়েবলটি সংশোধন করা একটি পরিষ্কার কাজের সুযোগ দেয়।
% This example transposes each field of a struct.
s.a = 1:3;
s.b = zeros(2,3);
s % a: [1 2 3]; b: [2x3 double]
for f = fieldnames(s)'
s.(f{1}) = s.(f{1})';
end
s % a: [3x1 double]; b: [3x2 double]
% Redefining f simplifies the indexing.
for f = fieldnames(s)'
f = f{1};
s.(f) = s.(f)';
end
s % back to a: [1 2 3]; b: [2x3 double]
আজ (27 ফেব্রুয়ারি) অবধি, ম্যাটল্যাব ফাইল এক্সচেঞ্জে একটি নতুন জন্য প্রতিটি টুলবক্স রয়েছে যা এর ধারণাটি সম্পাদন করে foreach
। foreach
ম্যাটল্যাব ভাষার একটি অংশ নয় তবে এই সরঞ্জামবাক্সটির ব্যবহার আমাদের কী foreach
করবে তা অনুকরণ করার ক্ষমতা দেয় ।
Undefined function or variable 'B'
।