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



تعیین زیر مجموعه های یک مجموعه n عضوی (متلب - MATLAB)زمان کنونی: ۱۳۹۷/۱۱/۲۸، ۰۷:۵۴ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: kasraei
آخرین ارسال: admin
پاسخ 2
بازدید 1155

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تعیین زیر مجموعه های یک مجموعه n عضوی (متلب - MATLAB)

تعیین زیر مجموعه های یک مجموعه n عضوی (متلب - MATLAB)

#1
با عرض سلام و ادب
یه مجموعه n عضوی داریم مثلا به عنوان مثال یه مجموعه سه عضوی: {2, 4, 6}
من میخواسم بدونم دستوری که در متلب تمام زیر مجموعه های n عضوی یک مجموعه n عضوی رو بده چیه مثلا برای مجموعه بالا 6 تا زیر مجموعه 3 تایی داریم که به شرح ذیل می باشند:
{6,4,2} {6,2,4} {2,6,4} {2,4,6} {4,2,6} {4,6,2}
پاسخ

تعیین زیر مجموعه های یک مجموعه n عضوی (متلب - MATLAB)

#2
سلام.
می توانید ترکیبی از دستورهای nchoosek و perms در متلب (MATLAB) را به کار ببرید.
دستور nchoosek ، کلیه زیرمجموعه های (subset) دارای n عضو از یک مجموعه (set) را به ما می دهد و البته ترتیب عضوهای مجموعه در آن مهم نیست، یعنی عضوها را جابجا نمی کند و مجموعه دارای عضوهای تکراری (با تغییر چیدمان) را در نتایج نمی آورد (در صورتی که جابجایی عضوها برای ما مهم است و بنابراین در مرحله بعد، از دستور perms کمک خواهیم گرفت).
دستور perms ، کلیه چیدمان های ممکن برای اعداد داده شده به آن را در خروجی به ما می دهد.
بنابراین ما در برنامه ای که می نویسیم، ابتدا از دستور nchoosek برای به دست اوردن کلیه ترکیب های ممکن از اعداد به عنوان زیرمجموعه استفاده می کنیم و سپس از ماتریس نتیجه شده، در یک حلقه for ، ردیف های آن را خوانده (هر ردیف، یک زیرمجموعه است) و از دستور perms برای به دست آوردن کلیه چیدمان های ممکن برای آن ردیف (row)، استفاده می کنیم و این نتایج را هم در یک ماتریس جدید ذخیره می نماییم.
بنده کد زیر را نوشتم، ولی خود شما نیز صحت آن را بررسی نمایید (البته شاید خود متلب دستور خاصی برای این منظور داشته باشد، ولی چون با کمی جستجو، موردی پیدا نکردم، ترجیح دادم که کد زیر را بنویسم) :

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

= [6,4,2]
nchoosek(A,2)
B_size size(B)
= [];
for 
nn=1:B_size(1) % loop for rows
    B_row 
B(nn,:);
 
   C perms(B_row);
 
   D = [C];
end


3 خط اول کدها برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب (MATLAB) می باشد.
دستور size ، اندازه ماتریس را بر می گرداند.
نتیجه اجرای کد متلب (MATLAB) بالا :

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

 
    6     4     2


=

 
    6     4
     6     2
     4     2


B_size 
=

 
    3     2


=

 
    4     6
     6     4
     2     6
     6     2
     2     4
     4     2 

قبلی برای زیرمجموعه های 2 عضوی بود، این بار برای زیرمجموعه های 3 عضوی کد را اجرا می کنیم :

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

= [6,4,2]
nchoosek(A,3)
B_size size(B)
= [];
for 
nn=1:B_size(1) % loop for rows
    B_row 
B(nn,:);
 
   C perms(B_row);
 
   D = [C];
end


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

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

 
    6     4     2


=

 
    6     4     2


B_size 
=

 
    1     3


=

 
    2     4     6
     2     6     4
     4     2     6
     4     6     2
     6     4     2
     6     2     4 


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


پرش به انجمن:


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