ورود

View Full Version : ماتریس



emranrostami
یک شنبه 03 خرداد 1394, 17:20 عصر
سلا م خسته نباشید یه سوال داشتم اگه امکانش هست راهنمایی کنید ممنون میشم


من یک سری داده به شکل ردیفی دارم


1 2 3 4 5 6

7 8 9 10 11 12


حالا میخوام دو تا ماتریس به شکل زیر داشته باشم.


a=[1 2 3


5 4


6] که بالا مثلثی هست حالا اون رو تبدیل به یک ماتریس کامل به شکل زیر کنه (با ترانهاده خودش جمع کنه منهای قطر اصلی):


b=[1 2 3


5 4 2


6 5 1].در نهایت این ماتریس را میخوام.


برای ردیف دوم هم به هم ین صورت


9 8 a=[7


11 10


12]. این نیز بالا مثلثی هست


نتیجه خروجی


c=[7 8 9


11 10 8


[12 11 9


خیلی خیلی ممنون میشم

rahnema1
یک شنبه 03 خرداد 1394, 18:33 عصر
سلام
این تابع را برای همین کار می تونید استفاده کنید

function mat_transformed = transform_matrix(data)
n = numel(data);
root_poly = roots([0.5 0.5 -n]);
mat_size = root_poly(root_poly > 0);
upper_mat = triu(ones(mat_size))';
upper_mat(upper_mat > 0) = data;
upper_mat = upper_mat';
mat_transformed = upper_mat + upper_mat' - diag(diag(upper_mat));
end

نحوه استفاده:

x = [1 2 3 4 5 6;
7 8 9 10 11 12];
transform_matrix(x(1, :))
transform_matrix(x(2, :))

emranrostami
یک شنبه 03 خرداد 1394, 20:06 عصر
ببخشید اما هر کاری میکنم برنامه اجرا نمیشه ...حتی برای همین چند عددی که نوشتم ..
لطفا بیشتر توضیح بدهید..داده های من به صورت خطی هستند و بعد میخوام در مرحله اول به صورت ماتریس بالا مثلثی و بعد به صورت ماتریس کامل تبدیل کنم (با ترانهاده جمع بشه منهای قطر اصلی)

rahnema1
یک شنبه 03 خرداد 1394, 20:37 عصر
نمیدونم چه قدر با متلب کار کردید
اون تابع transform_matrix را در فایلی به نام transform_matrix.m ذخیره کنید
مسیر جاری متلب را فولدری قرار بدهید که فایل m داخلش قرار داره و سپس اون دستور که نحوه استفاده هست را اجرا کنید

emranrostami
یک شنبه 03 خرداد 1394, 21:16 عصر
من در حد مبتدی کار کردم ببخشید اما با اون تابع در جای ذخیره کنم که متلب نصب شده یا فرقی نمیکنه ..
منظورتو رو هم از مسیر جاری متلب نفهمیدم ...
معذرت میخوام اگه امکانش هست بیشتر توضیح بدید..
ممنون

rahnema1
یک شنبه 03 خرداد 1394, 21:27 عصر
ببینید یک فولدر در درایو d درست کنید مثلا به نام workmatlab
فایل m را داخل اون بذارید
بعد در متلب این دستور را بزنید

cd('D:/workmatlab')

تا مسیر جاری شما همین فولدر بشه فکر کنم آیکنش هم اون بالا باشه

emranrostami
یک شنبه 03 خرداد 1394, 21:28 عصر
این خطایی هست که میده ممنون میشم اگه لطف کنید 131605

rahnema1
یک شنبه 03 خرداد 1394, 21:40 عصر
فایل m را گذاشتم داخل زیپ
http://www.sharefile.ir/uploads/1432537629.zip

emranrostami
یک شنبه 03 خرداد 1394, 21:44 عصر
ببخشید اجراشد ممنون دستتون درد نکنه..
اما خروجی ها را میخوام همه رو نشان بده به صورت جدا گانه ...اگه در یک جدول به صورت جدا گانه نمایش بده که عالی میشه...
بازم ممنون

rahnema1
یک شنبه 03 خرداد 1394, 21:51 عصر
الان دیگه جواب ماتریس چاپ می شه خود متلب امکانات طراحی gui داره که می تونید نتایج را ببرید داخل مثلا یک فرم و کارهایی تزئینی را اونجا انجام بدید که فکر کنم یه کم لازمه روی اون کار کنید

emranrostami
یک شنبه 03 خرداد 1394, 21:55 عصر
ممنون ببخشید که مزاحمتون شدم لطف کردید....
اما اینکه ماتریس ها وارد یک فرم بشن باید خودم یکی یکی وارد کنم یا دستور داره

rahnema1
یک شنبه 03 خرداد 1394, 22:00 عصر
دستور داره . توی هلپ متلب و اینترنت منابعش زیاد هست الان من با octave این برنامه را نوشتم که این امکانات فرم را نداره

emranrostami
یک شنبه 03 خرداد 1394, 22:02 عصر
خیلی ممنون ...یه سوال دیگه این دستور برای هر ردیف باید اجرا بشه نمیشه اون رو داخل یک حلقه قرار داد...

rahnema1
یک شنبه 03 خرداد 1394, 22:09 عصر
x = [1 2 3 4 5 6;
7 8 9 10 11 12];
for i = 1: size(x,1)
disp(transform_matrix(x(i, :)))
end

emranrostami
یک شنبه 03 خرداد 1394, 23:01 عصر
خیلی ممنون درست شد ...دستت درد نکنه

emranrostami
دوشنبه 04 خرداد 1394, 00:35 صبح
بازم سلام
اگه بخوام خروجی برنامه بالا را در یک ماتریس 3*5 ضرب کنم مانند ماتریس زیر b (البته تک تک خروجی ها را جدا ضرب کنه):[2 3 4;
5 6 7;
8 9 10;
11 12 13;
14 15 16]
و بعد ضرب ترانهاده b بشه...
یا به اصلاح 'd=b*a*b

rahnema1
دوشنبه 04 خرداد 1394, 16:50 عصر
سلام
پیشنهاد می کنم یه جزوه آموزش مقدماتی matlab را مطالعه کنید فکر نکنم زمان چندانی ببره

b=[2 3 4;
5 6 7;
8 9 10;
11 12 13;
14 15 16]
a= transform_matrix(x(1, :));
d = b * a * b';
disp(d)

emranrostami
دوشنبه 04 خرداد 1394, 21:50 عصر
سلام چشم حتما اما فعلا برای کار پایان نامه مم باید زود انجام بدم...
اگه میشه یه حلقه واسه این تشکیل بدین وخروجی را در یک جدول بهم بده....
واقعا ممنون میشم ...

rahnema1
دوشنبه 04 خرداد 1394, 23:11 عصر
سلام چشم حتما اما فعلا برای کار پایان نامه مم باید زود انجام بدم...
اگه میشه یه حلقه واسه این تشکیل بدین وخروجی را در یک جدول بهم بده....
واقعا ممنون میشم ...

خب حلقه که مثل مثال قبلیه
برای جدول هم نتایج را می تونید کپی کنید داخل ورد در اونجا جدول بکشید

emranrostami
دوشنبه 04 خرداد 1394, 23:30 عصر
متاسفانه حلقه تشکیل نمیشه ....اگر کمکم کنید و این رو هم بنویسید واقعا لطف بزرگی در حقم کردین...

rahnema1
دوشنبه 04 خرداد 1394, 23:38 عصر
مگه حلقه را چه جوری نوشتید که تشکیل نمی شه؟

emranrostami
دوشنبه 04 خرداد 1394, 23:43 عصر
درست شد...اگه درست نوشته باشم... بی زحمت یه نگاه بندازین

(for i = 1: size(x,1
;((:,a= transform_matrix(x(1
;'d = b * a * b
(disp(d
end

rahnema1
دوشنبه 04 خرداد 1394, 23:47 عصر
آفرین دیدی میتونی بنویسی:)
فقط یه اشکال کوچیک بود به جای 1 لازمه i استفاده کنی

b=[2 3 4;
5 6 7;
8 9 10;
11 12 13;
14 15 16];

x = [1 2 3 4 5 6;
7 8 9 10 11 12];
for i = 1: size(x,1)
a= transform_matrix(x(i, :));
d = b * a * b';
disp(d)
end

emranrostami
دوشنبه 04 خرداد 1394, 23:52 عصر
واقعا ازتون ممنونم ....لطف خیلی خیلی بزرگی درحقم کردین ....خیلی خیلی متشکرم

emranrostami
سه شنبه 05 خرداد 1394, 19:45 عصر
مجددا سلام ....بازم معذرت میخوام...اما اگه بخوام از خروجی ماتریس های بالا یه میانگین بگیرم و در اخر همونو نشون بده ایا دستوری داره.( هر عنصر ماتریس ها را بامتناظرش جمع کنه وتقسیم برتعداد بکنه).... لطفا در این مورد هم کمک کنید...خیلی خیلی ممنون

rahnema1
سه شنبه 05 خرداد 1394, 21:48 عصر
b=[2 3 4;
5 6 7;
8 9 10;
11 12 13;
14 15 16];

x = [1 2 3 4 5 6;
7 8 9 10 11 12];
d=[];
for i = 1: size(x,1)
a= transform_matrix(x(i, :));
d(:, :, i) = b * a * b';
end
miangin = mean(d, 3);
disp(miangin)

emranrostami
سه شنبه 05 خرداد 1394, 22:12 عصر
خیلی خیلی ممنون ...واقعا کمال تشکر را دارم از شما ...کمک خیلی بزرگی بهم کردین

emranrostami
پنج شنبه 07 خرداد 1394, 15:29 عصر
بازم سلام ...یه سوال داشتم این عدد سه کد خاصی هست یا باید تغییرش بدم برای هر ماتریس......
;(miangin = mean(d, 3

rahnema1
پنج شنبه 07 خرداد 1394, 21:24 عصر
سلام. لازم نیست تغییر پیدا کنه یعنی از بعد سوم میانگین می گیره