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


رتبه موضوع:
  • 1 رای - 3 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تبدیل یک ماتریس به چند ماتریس کوچکتر

تبدیل یک ماتریس به چند ماتریس کوچکتر

#7
(۱۳۹۲/۰۵/۰۲, ۰۱:۴۴ ق.ظ)'admin' نوشته: در همان کدها، دو ماتریس با نام های C و D ایجاد می کنیم.
ماتریس C درون حلقه for به عنوان نتیجه پردازش بر روی ماتریس B خواهد بود و ماتریس D نیز همان ماتریس نهایی است که نتایج کلی را در آن ذخیره کرده ایم (ماتریس خروجی نهایی).

کدهای متلب به صورت زیر می باشند :


کد:
clear all
close all
clc

A=rand(5,5)
A_size=size(A);
row_divide=2;
column_divide=2;

if (mod(A_size(1),row_divide)==0)
row=floor(A_size(1)/row_divide);
else
row=floor(A_size(1)/row_divide)+1;
end

if (mod(A_size(2),column_divide)==0)
column=floor(A_size(2)/column_divide);
else
column=floor(A_size(2)/column_divide)+1;
end

D=A;
for nn=1:row
for mm=1:column
clear B C
if (nn==row && mm==column)
B=A((nn-1)*row_divide+1:end,(mm-1)*column_divide+1:end);
elseif (nn==row)
B=A((nn-1)*row_divide+1:end,(mm-1)*column_divide+1:mm*column_divide);
elseif (mm==column)
B=A((nn-1)*row_divide+1:nn*row_divide,(mm-1)*column_divide+1:end);
else
B=A((nn-1)*row_divide+1:nn*row_divide,(mm-1)*column_divide+1:mm*column_divide);
end

% your code for processing B matrix
C=B*2;

% save to output matrix
if (nn==row && mm==column)
D((nn-1)*row_divide+1:end,(mm-1)*column_divide+1:end)=C;
elseif (nn==row)
D((nn-1)*row_divide+1:end,(mm-1)*column_divide+1:mm*column_divide)=C;
elseif (mm==column)
D((nn-1)*row_divide+1:nn*row_divide,(mm-1)*column_divide+1:end)=C;
else
D((nn-1)*row_divide+1:nn*row_divide,(mm-1)*column_divide+1:mm*column_divide)=C;
end
end
end
D

به عنوان مثال، پردازش بر روی B را به صورت دو برابر کردن (ضرب در 2) انتخاب کرده ایم (شما می توانید پردازش مورد نظر خود را بنویسید).

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


کد:
A =

0.2760 0.4984 0.7513 0.9593 0.8407
0.6797 0.9597 0.2551 0.5472 0.2543
0.6551 0.3404 0.5060 0.1386 0.8143
0.1626 0.5853 0.6991 0.1493 0.2435
0.1190 0.2238 0.8909 0.2575 0.9293


D =

0.5521 0.9967 1.5025 1.9186 1.6814
1.3594 1.9195 0.5102 1.0944 0.5086
1.3102 0.6808 1.0119 0.2772 1.6286
0.3252 1.1705 1.3982 0.2986 0.4870
0.2380 0.4476 1.7818 0.5150 1.8585

مشاهده می کنید که تمامی عناصر ماتریس نهایی (ماتریس D)، دو برابر عناصر ماتریس اولیه (ماتریس A) می باشند. (ماتریس های B و C هم که به طور موقت، درون حلقه for تعریف می شوند.)

Flower

 

ممنون از شما، بسیار عالی بود. اگر دقت کنین شما یه ماتریس رو به چند قسمت تقسیم کردین و اون قسمت های کوچکتر رو همه در یک عدد ثابت 2 ضرب کردید. معمولا هدف از تقسیم کردن اینه که هر قسمت رو یه عملیات روش انجام بدیم. سوال من اینه که اگر بخواهیم هر کدوم از این قسمت ها رو در اعداد مختلف ضرب کنیم (و مثلا این اعداد رو از یه ماتریس دیگه بخونه)، اون قسمت your code for processing B matrix رو باید چجوری نوشت و مرحله بعدش چجوری باید ذخیره اش کرد؟
ممنون از زحمات شما

 
پاسخ


پیام‌های این موضوع
تبدیل یک ماتریس به چند ماتریس کوچکتر - توسط 4i469x - ۱۳۹۲/۰۴/۲۹, ۰۳:۰۴ ب.ظ
RE: تبدیل یک ماتریس به چند ماتریس کوچکتر - توسط admin - ۱۳۹۲/۰۴/۲۹, ۰۴:۱۱ ب.ظ
RE: تبدیل یک ماتریس به چند ماتریس کوچکتر - توسط admin - ۱۳۹۲/۰۴/۳۰, ۰۱:۱۱ ق.ظ
RE: تبدیل یک ماتریس به چند ماتریس کوچکتر - توسط admin - ۱۳۹۲/۰۵/۰۲, ۰۱:۴۴ ق.ظ
RE: تبدیل یک ماتریس به چند ماتریس کوچکتر - توسط mspyhm2001 - ۱۳۹۳/۰۴/۱۸, ۱۲:۱۲ ق.ظ

پرش به انجمن:


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