کلیدستان

نسخه‌ی کامل: تعیین زیر مجموعه های یک مجموعه n عضوی (متلب - MATLAB)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با عرض سلام و ادب
یه مجموعه 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}
سلام.
می توانید ترکیبی از دستورهای 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