انجمن سایت کلیدستان



حلقه تو در تو for (متلب - MATLAB)زمان کنونی: ۱۳۹۷/۰۸/۲۴، ۱۰:۱۶ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: setare7878
آخرین ارسال: setare7878
پاسخ 4
بازدید 310

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
حلقه تو در تو for (متلب - MATLAB)

حلقه تو در تو for (متلب - MATLAB)

#1
سلام به همه دوستان

من به مشکل فهمیدن حلقه تو در تو for  برخوردم که از دوستان خواهشمندم راهنمایی کنند

همانطور که در عکس مشاهده میشود در شکل شماره 1 حلقه بصورت سطر یه سطر به طرف پاین پر میشود و در شکل 2 با توجه به A(i,j)  ابتدا سطر اول با تمام ستونها پر میشود و بعد به سطر دوم میرود اما سوال اینکه
چطوری a(?,?)  را بنویسیم که ابتدا سطر اول را تا اخر پر کند بعد به ستون دوم برود ؟یعنی یک ستون یک ستون پر کند؟
و اینکه من در بعضی برنامه ها میبینم که برای پر کردن ماتریس همراه for از آکولاد استفاده میکند اگر شکلش را درست بنویسم به این صورت  .....=  A[j][i]
 می اورند که من منظور این عبارت را نمیفهمم لطفا کسی یک توضیح مختصر لطف میکند بدهد

با تشکر


فایل‌های پیوست

عکس(ها)
   
پاسخ

حلقه تو در تو for (متلب - MATLAB)

#2
دوستان مگه این انجمن فعال نیست ؟
کسی جواب این سوال را بده؟
لطفا اگر کسی انجمن فعال متلب میشناسه معرفی کنه سوال را در انجا قرار بدهم

ممنون
پاسخ

حلقه تو در تو for (متلب - MATLAB)

#3
سلام.
در مورد انجمن فعال که برای برنامه نویسان حرفه ای مشکل گشا باشد، بنده انجمن انگلیسی زبان stackoverflow.com را توصیه می کنم. اگرچه انگلیسی زبان است، اما بهترین مورد در این زمینه می باشد و توصیه می شود که حتی اگر به زبان انگلیسی مسلط نیستید، باز هم سعی کنید که با ترجمه مناسب سوال خود به انگلیسی، آن را در وب سایت مورد نظر مطرح نمایید. 
البته در هیچ وب سایتی به همه سوالات پاسخ داده نمی شود و تکراری نبودن و درست نوشتن سوال نیز مهم است، اما به هر حال، وب سایت مورد نظر، بهترین می باشد.
در کلیدستان نیز سعی می کنیم که در صورت داشتن زمان، به سوالات پاسخ داده شود، اما اگر زمان نداشته باشیم یا اینکه تسلط کامل به سوال مطرح شده نداشته باشیم، ترجیح می دهیم که پاسخی داده نشود تا کاربر در سایر منابع اینترنتی به جستجو بپردازد.

-------------------------------------------------------------------------

در مورد سوال شما :

ابتدا همان حالت مقداردهی ردیف به ردیف را ذکر می کنیم و بعد بیان می کنیم که با چه تغییری می توان آن را به مقداردهی ستون به ستون تغییر داد.
در انتهای دستور مقداردهی درون حلقه، علامت ; را نمی نویسیم تا بعد از اجرای هر گام از حلقه، مقدار ماتریس را در خروجی متلب (MATLAB) ببینیم و متوجه شویم که کدام عنصر از ماتریس، مقداردهی شده است.
در کد متلب (MATLAB) زیر، یک حلقه تو در تو (Nested Loop) کدنویسی کرده ایم که در هر گام خود، یکی از عناصر ماتریس را مقداردهی می کند و مقداردهی به صورت پر کردن ردیف به ردیف می باشد (مقداردهی بر اساس یک فرمول دلخواه است) :

کد پی‌اچ‌پی:
clear all
close all
clc

zeros(3,3);

for 
i=1:3
    for j
=1:3
        A
(i,j) = (2*i)+j
    end
end



3 خط اول کدها برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب (MATLAB) می باشد.
دستور zeros برای ساخت اولیه ماتریس بر اساس عنصرهای برابر مقدار 0 می باشد.
نتیجه اجرای کد متلب (MATLAB) بالا :

کد پی‌اچ‌پی:
=

 
    3     0     0
     0     0     0
     0     0     0


=

 
    3     4     0
     0     0     0
     0     0     0


=

 
    3     4     5
     0     0     0
     0     0     0


=

 
    3     4     5
     5     0     0
     0     0     0


=

 
    3     4     5
     5     6     0
     0     0     0


=

 
    3     4     5
     5     6     7
     0     0     0


=

 
    3     4     5
     5     6     7
     7     0     0


=

 
    3     4     5
     5     6     7
     7     8     0


=

 
    3     4     5
     5     6     7
     7     8     9


=

 
    3     4     5
     5     6     7
     7     8     9 

اکنون برای مقداردهی به صورت ستون به ستون، تنها کافی است که اندیس i و j را در پرانتز جلوی A تغییر دهیم (جابجا کنیم). بنابراین کد متلب (MATLAB) به صورت زیر خواهد بود :

کد پی‌اچ‌پی:
clear all
close all
clc

zeros(3,3);

for 
i=1:3
    for j
=1:3
        A
(j,i) = (2*i)+j
    end
end



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

کد پی‌اچ‌پی:
=

 
    3     0     0
     0     0     0
     0     0     0


=

 
    3     0     0
     4     0     0
     0     0     0


=

 
    3     0     0
     4     0     0
     5     0     0


=

 
    3     5     0
     4     0     0
     5     0     0


=

 
    3     5     0
     4     6     0
     5     0     0


=

 
    3     5     0
     4     6     0
     5     7     0


=

 
    3     5     7
     4     6     0
     5     7     0


=

 
    3     5     7
     4     6     8
     5     7     0


=

 
    3     5     7
     4     6     8
     5     7     9


=

 
    3     5     7
     4     6     8
     5     7     9 

-------------------------------------------------------------------------

در مورد سوال دوم، باید کد مورد نظر به طور کامل باشد تا بررسی شود. یعنی ببینیم که علامت های [ و ] برای چه منظوری به کار رفته اند.
اما مسلما برای یک ماتریس، شیوه ارجاعی که نوشتید، یک خطا را ایجاد می کند. به عنوان مثال، کد متلب (MATLAB) زیر، یک خطا را ایجاد می کند :

کد پی‌اچ‌پی:
clear all
close all
clc

= [1 2 34 5 67 8 9];

A[1][2

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

کد پی‌اچ‌پی:
>> kelidestan
Error
Filekelidestan.m Line7 Column2
Unbalanced 
or unexpected parenthesis or bracket

اما کد متلب (MATLAB) زیر صحیح می باشد :

کد پی‌اچ‌پی:
clear all
close all
clc

= [1 2 34 5 67 8 9];

A([1,3],:) 

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

کد پی‌اچ‌پی:
ans =

 
    1     2     3
     7     8     9 

بنابراین محل به کار رفتن علامت ها، کاربرد آنها را مشخص می کند.

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط setare7878

حلقه تو در تو for (متلب - MATLAB)

#4
سلام و عرض ادب خدمت شما مدیر محترم انجمن


بابت جواب کامل شما و مفید و عالی شما کمال سپاسگزاری را دارم


همیشه شاد و موفق باشید
پاسخ
 سپاس شده توسط admin


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان