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


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

حلقه تو در تو 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) - توسط setare7878 - ۱۳۹۷/۰۵/۳۰, ۱۲:۱۸ ب.ظ
RE: حلقه تو در تو for - توسط setare7878 - ۱۳۹۷/۰۵/۳۱, ۰۴:۴۵ ب.ظ
RE: حلقه تو در تو for (متلب - MATLAB) - توسط admin - ۱۳۹۷/۰۶/۰۱, ۰۷:۱۴ ق.ظ
RE: حلقه تو در تو for (متلب - MATLAB) - توسط setare7878 - ۱۳۹۷/۰۶/۰۱, ۰۹:۰۷ ق.ظ

پرش به انجمن:


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