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



تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلبزمان کنونی: ۱۳۹۵/۰۹/۱۴، ۱۲:۴۱ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: rezakilidestan
آخرین ارسال: rezakilidestan
پاسخ 5
بازدید 1589

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب

تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب

#1
با سلام
من میخوام بعد از تعریف یک ماتریس تک ستونی و چند سطری ،تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های اون رو به دست بیارم و هر کدوم رو به عنوان یک ماتریس ذخیره کنم .بعد از اون مجموع درایه های ماتریس های تشکیل شده رو هم به دست بیارم.
میتونید لطفاً بمن بگید باید چه طوری این کارو انجام بدم؟
ممنون
پاسخ

تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب

#2
سلام.
دقیقا منظورتان از تمام ترکیبات یه دونه ای، دو تایی و سه تایی چیست ؟
مثلا سه تا عدد 2 که پشت سر هم قرار گرفته اند را ترکیب سه تایی می گویید (یعنی سه بار تکرار یک عدد پشت سر هم) یا در کل، منظورتان تمامی ترکیب های سه تایی غیر تکراری در ماتریس است (سه عدد که پشت سر هم قرار گرفته اند، تازه در این حالت باید ببینیم تکرار عدد مجاز است یا خیر) ؟
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب

#3
(۱۳۹۳/۰۹/۱۴, ۰۲:۵۲ ب.ظ)'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      
با تشکر فراوان
پاسخ

تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب

#4
حالت یک عنصری و حالت دو عنصری را برایتان نوشتم تا از حالت دو عنصری الهام گرفته و خودتان حالت سه عنصری را بنویسید.
کدهای متلب :

کد پی‌اچ‌پی:
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 تا شده است (البته خودتان هم نتیجه را تست کنید).

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

تشخیص تمام ترکیبات یه دونه ای ،دو تایی و سه تایی از درایه های ماتریس، در متلب

#5
(۱۳۹۳/۰۹/۱۵, ۰۵:۱۸ ب.ظ)'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 تا شده است (البته خودتان هم نتیجه را تست کنید).



 


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

 
پاسخ
 سپاس شده توسط admin


پرش به انجمن:


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

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)