کلیدستان

نسخه‌ی کامل: تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلام
من میخوام بعد از تعریف یک ماتریس تک ستونی و چند سطری ،تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های اون رو به دست بیارم و هر کدوم رو به عنوان یک ماتریس ذخیره کنم .بعد از اون مجموع درایه های ماتریس های تشکیل شده رو هم به دست بیارم.
میتونید لطفاً بمن بگید باید چه طوری این کارو انجام بدم؟
ممنون
سلام.
دقیقا منظورتان از تمام ترکیبات یه دونه ای، دو تایی و سه تایی چیست ؟
مثلا سه تا عدد 2 که پشت سر هم قرار گرفته اند را ترکیب سه تایی می گویید (یعنی سه بار تکرار یک عدد پشت سر هم) یا در کل، منظورتان تمامی ترکیب های سه تایی غیر تکراری در ماتریس است (سه عدد که پشت سر هم قرار گرفته اند، تازه در این حالت باید ببینیم تکرار عدد مجاز است یا خیر) ؟
(۱۳۹۳/۰۹/۱۴, ۰۲:۵۲ ب.ظ)'admin' نوشته: [ -> ]سلام.
دقیقا منظورتان از تمام ترکیبات یه دونه ای، دو تایی و سه تایی چیست ؟
مثلا سه تا عدد 2 که پشت سر هم قرار گرفته اند را ترکیب سه تایی می گویید (یعنی سه بار تکرار یک عدد پشت سر هم) یا در کل، منظورتان تمامی ترکیب های سه تایی غیر تکراری در ماتریس است (سه عدد که پشت سر هم قرار گرفته اند، تازه در این حالت باید ببینیم تکرار عدد مجاز است یا خیر)
 

با عرض سلام و خسته نباشید،
منظور من اینه که مثلا یه ماتریس 1*6 ایجاد کنم(این ماتریس خودش میتونه درایه های تکراری داشته باشه)بعد ماتریس های جدیدی رو از این ماتریس بسازم و ذخیره کنم به نحوی که شامل 6 ماتریس تک درایه ،15 ماتریس 2 درایه( !2*!4 / !6 ) و 20ماتریس 3درایه( !3*!3 / !6 ) باشد.ماتریس های  تک درایه ای که هر کدام شامل یکی از  6 درایه ی ماتریس اصلی هستند.ماتریس های 2 درایه ای ماتریس هایی هستند که با استفاده از تمام حالت های 2تایی از 6 درایه ی ماتریس اصلی ساخته می شوند و 3 درایه ای ها هم حالت های 3تایی از ماتریس اصلی هستند. حال چنانچه به سبب برابری اعداد ماتریس اصلی حالت تکراری به وجود بیاید مشکلی نیست.فقط مهم است که بتوانم هر ماتریس را جداگانه داشته باشم،مثلا ماتریس های (1)Aتا  (A(41      
با تشکر فراوان
حالت یک عنصری و حالت دو عنصری را برایتان نوشتم تا از حالت دو عنصری الهام گرفته و خودتان حالت سه عنصری را بنویسید.
کدهای متلب :

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

= [12356]

one element
A_lenghth
=length(A)
for 
nn=1:A_lenghth
    
eval(['A_one_element_'num2str(nn) , ' = ' num2str(A(nn))]);
end

two element
A_lenghth
=length(A)
number=0;
used_indexes=[];
for 
nn=1:A_lenghth
    
for mm=1:A_lenghth
        
if(nn~=mm) % not equal
            used_indexes_size
=size(used_indexes);
            
is_repeated_or_not=0;
            for 
gg=1:used_indexes_size(1)
                if(
nn==used_indexes(gg,2) && mm==used_indexes(gg,1)) % check is repeated or not
                    is_repeated_or_not
=1;
                
end
            end
            
if(is_repeated_or_not==0)
                
number=number+1;
                
used_indexes(number,1)=nn;
                
used_indexes(number,2)=mm;
                eval([
'A_two_element_'num2str(number) , ' = [' num2str(A(nn)), ','num2str(A(mm)), ']']);
            
end
        end
    end
end
number 

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

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

     
1
     2
     3
     4
     5
     6


A_lenghth 
=

     
6


A_one_element_1 
=

     
1


A_one_element_2 
=

     
2


A_one_element_3 
=

     
3


A_one_element_4 
=

     
4


A_one_element_5 
=

     
5


A_one_element_6 
=

     
6


A_lenghth 
=

     
6


A_two_element_1 
=

     
1     2


A_two_element_2 
=

     
1     3


A_two_element_3 
=

     
1     4


A_two_element_4 
=

     
1     5


A_two_element_5 
=

     
1     6


A_two_element_6 
=

     
2     3


A_two_element_7 
=

     
2     4


A_two_element_8 
=

     
2     5


A_two_element_9 
=

     
2     6


A_two_element_10 
=

     
3     4


A_two_element_11 
=

     
3     5


A_two_element_12 
=

     
3     6


A_two_element_13 
=

     
4     5


A_two_element_14 
=

     
4     6


A_two_element_15 
=

     
5     6


number 
=

    
15 

دقت کنید که چگونه با ذخیره کردن index مربوط به حالت های ساخته شده، چک می کنیم که ماتریسی برای حالت های تکراری ساخته نشود (برای حالت سه تایی، باید دو شرط چک شود، زیرا به جای دو تا index این بار سه تا index داریم). تعداد هم برابر 15 تا شده است (البته خودتان هم نتیجه را تست کنید).

(۱۳۹۳/۰۹/۱۵, ۰۵:۱۸ ب.ظ)'admin' نوشته: [ -> ]حالت یک عنصری و حالت دو عنصری را برایتان نوشتم تا از حالت دو عنصری الهام گرفته و خودتان حالت سه عنصری را بنویسید.
کدهای متلب :

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

= [12356]

one element
A_lenghth
=length(A)
for 
nn=1:A_lenghth
    
eval(['A_one_element_'num2str(nn) , ' = ' num2str(A(nn))]);
end

two element
A_lenghth
=length(A)
number=0;
used_indexes=;
for 
nn=1:A_lenghth
    
for mm=1:A_lenghth
        
if(nn~=mm) % not equal
            used_indexes_size
=size(used_indexes);
            
is_repeated_or_not=0;
            for 
gg=1:used_indexes_size(1)
                if(
nn==used_indexes(gg,2) && mm==used_indexes(gg,1)) % check is repeated or not
                    is_repeated_or_not
=1;
                
end
            end
            
if(is_repeated_or_not==0)
                
number=number+1;
                
used_indexes(number,1)=nn;
                
used_indexes(number,2)=mm;
                eval([
'A_two_element_'num2str(number) , ' = [' num2str(A(nn)), ','num2str(A(mm)), ']']);
            
end
        end
    end
end
number 

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

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

     
1
     2
     3
     4
     5
     6


A_lenghth 
=

     
6


A_one_element_1 
=

     
1


A_one_element_2 
=

     
2


A_one_element_3 
=

     
3


A_one_element_4 
=

     
4


A_one_element_5 
=

     
5


A_one_element_6 
=

     
6


A_lenghth 
=

     
6


A_two_element_1 
=

     
1     2


A_two_element_2 
=

     
1     3


A_two_element_3 
=

     
1     4


A_two_element_4 
=

     
1     5


A_two_element_5 
=

     
1     6


A_two_element_6 
=

     
2     3


A_two_element_7 
=

     
2     4


A_two_element_8 
=

     
2     5


A_two_element_9 
=

     
2     6


A_two_element_10 
=

     
3     4


A_two_element_11 
=

     
3     5


A_two_element_12 
=

     
3     6


A_two_element_13 
=

     
4     5


A_two_element_14 
=

     
4     6


A_two_element_15 
=

     
5     6


number 
=

    
15 

دقت کنید که چگونه با ذخیره کردن index مربوط به حالت های ساخته شده، چک می کنیم که ماتریسی برای حالت های تکراری ساخته نشود (برای حالت سه تایی، باید دو شرط چک شود، زیرا به جای دو تا index این بار سه تا index داریم). تعداد هم برابر 15 تا شده است (البته خودتان هم نتیجه را تست کنید).



 


سلام خیلی ممنون
خیلی خوبه،لطف کردید
من سعی میکنم که گسترشش بدم