کلیدستان

نسخه‌ی کامل: حلقه for (کمک)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلام خدمت اساتید

بنده یه سوال در مورد حلقه تکرار for داشتم و اون اینکه در یک حلقه for که مثلا 3 بار تکرار میشه چه دستوری رو اضافه کنم که هر بار که حلقه تکرار میشه یک ماتریس (یا هر چیز دیگری ) به من خروجی بده
به مثال زیر توجه کنید    
 
a یک ماتریس سه بُعدی است

کد:
for   i=1:3
      (p=a(:,:,i
      end

در اینجا خروجی من ماتریس 

کد:
(a(:,:,3
 

خواهد بود ولی بنده می خوام هر سه ماتریس ذیل خروجیم باشه 

کد:
(a(:,:,1
(a(:,:,2
(a(:,:,3
 

ممنون اگر راهنمایی کنید

 

 
سلام.
لطفا از بلوک کد که دکمه آن در ادیتور انجمن هست، برای درج کدها استفاده کنید . خودتون به کدها نگاه کنید، کسی نمیتونه بخوندشون (تازه من کمی تغییرشون دادم تا بهتر بشن ). 
شما خروجیتون p هست، خوب خروجی رو هم چند بعدی بسازید تا در هر بعد آن، یک ماتریس قرار بگیرد. اگر اصرار دارید که حتما ماتریس های مجزا داشته باشید، مبحث زیر را بخوانید :

http://www.kelidestan.com/matlab/matlab-154.php
 

 

 
سلام
ممنون از راهنايى شما
از اون دكمه كد بى خبر بودم از اين به بعد استفاده مى كنم

اما در مورد مشكل من اين كه من حتما احتياج به خروجى هاى مجزا دارم 
و لينكى رو هم كه شما معرفى كرديد خوندم ولى فك نكنم به مشكل من ربطى داشته باشه
سر ازش در نياوردم
من فقط ميخوام از تمام مراحل انجام حلقم ماتريس هاى مجزا داشته باشم همين
ممنون اگر راهنمايى بفرماييد
 
ماتریس های مجزا، یعنی اینکه در هر بار اجرای دستورات حلقه، یک نام جدید برای ماتریس آن مرحله به کار رود. برای این منظور، باید از روش همان مبحث استفاده کنید تا بتوانید مثلا در حلقه ای با 5 بار اجرای دستورات، 5 تا ماتریس با نام های A1 و A2 و A3 و A4 و A5 داشته باشیم (از هر بار اجرا، یک ماتریس با نامی متفاوت حاصل شود). اون مبحث برای متغیر مثال زده، شما روش آن را برای ساخت ماتریس به کار ببرید.
 
سلام مجدد و ممنون از اهتمام admin

والا من کلا هنگ کردم اگر کد زیر رو ببینید و راهنمایی کنید ممنون میشم

کد:
for i = 1:3

max=max(max(A(:,:,i)));

eval(['max', num2str(i) , ' = ' ,num2str(max) ,';']);

end

ماتریس A یک ماتریس 3 بُعدی است
بنده یک حلقه تعریف کردم که  ماکزیمم تک تک ماتریس های ماتریس 3 بُعدی  A  رو بخونه و در آخر   سه تا   ماتریس که بیانگر مقدار max ماتریس های مذکور باشد خروجی دهد .
اما فقط مرحله اول حلقه انجام می شود و ادامه نمی دهد چرا؟؟؟
توجه : بنده آخرین باری که با متلب کار کردم 6 سال پیش بود اون هم در حد نوشتن چنتا برنامه ساده برای دانشگاه
و الان حدود 10 روزه که دوباره دارم با متلب کار می کنم اونم برای نوشتن برنامه های پردازش تصاویر پس در نتیجه به بنده نخندید بزودی با کمک شما راه میفتم
ابتدا مراقب باشید که max نام تابع است و شما نمی توانید متغیری با این نام تعریف کنید. نتیجه عبارتی که در حلقه نوشته اید، یک عدد است، نه یک ماتریس. پس می توان کدهای زیر را نوشت و نیازی به آن روش نیست :

کد:
clear all
close all
clc

A(:,:,1)=[1 2; 3 4];
A(:,:,2)=[5 6; 7 8];
A(:,:,3)=[9 10; 11 12];

maximum=zeros(1,3);
for i=1:3
    maximum(i)=max(max(A(:,:,i)));
end

m1=maximum(1)
m2=maximum(2)
m3=maximum(3)

نتیجه اجرای کد متلب بالا :

کد:
m1 =

     4


m2 =

     8


m3 =

    12
تشكر از راهنمايى شما
اما ماتريس واقعى پروژه من ٢٠٠ بُعديه اونو چيكار كنم؟
بنابراین راه حلش همان مبحثی است که گفتم. ابتدا یک برنامه ساده بنویسید تا عملکرد دستور eval را خوب متوجه بشوید، سپس درون حلقه، می توانید 200 تا ماتریس با نام های A1 تا A200 بسازید.