شاید گمان نمی کردید که تغییر اندازه دادن یک ماتریس امکان پذیر باشد، اما متلب این توانایی را نیز دارا می باشد. متلب می تواند یک ماتریس را بزرگ تر یا کوچکتر کند.
در مثال های این بخش، فرض بر این است که شما ماتریس ak را در بخش "ایجاد یک ماتریس چند بعدی" در این فصل، ایجاد کرده اید. ماتریس ak یک ماتریس 2x3x3 است و ممکن است شما بخوهید یک سطر جدید را به آن اضافه کنید. برای اضافه کردن یک سطر دیگر به ماتریس مورد نظر، عبارت ak(3, :, :) = 0 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:
همان طور که مشاهده می کنید، به هر سه لایه، یک سطر جدید اضافه شد. اما ممکن است شما تصمیم بگیرید که این سطر را حذف کنید. برای حذف کردن این سطر، باید با استفاده از یک ماتریس خالی([]) آن را به null(تهی) ست کنید. برای امتحان کردن این موضوع، عبارت ak(3, :, :) = [] را تایپ کنید و کلید Enter را فشار دهید، نتیجه ی زیر ظاهر خواهد شد:
اکنون ممکن است این سوال برای شما پیش بیاید که چطور می توان یک سطر یا یک ستون را تنها به یک لایه اضافه کرد. برای پاسخ به این سوال، عبارت [ak(:, 4, 1) = [88, 99 را در متلب تایپ کنید و کلید Enter را فشار دهید. خواهید دید که این دستور، چهارمین ستون را تنها در لایه ی 1 ایجاد می کند و آن را با مقادیر 88 و 99 پر می کند. خروجی به صورت زیر خواهد بود:
توجه کنید که دیگر لایه ها نیز دارای چهارمین ستون می شوند، اما به وسیله ی صفرها توسط متلب به طور اتوماتیک پر می شوند.
یعنی هر ستون ماتریس اولیه من تبدیل بشه به یه ماتریس 7*5
چجوری باید از این شماره ستون استفاده کنم برای شماره گذاری ماتریس تبدیل شده؟؟؟
beyamooz.com/images/matlab/functions/conv.m
روش کار به صورت زیر است:
>> z = rand(35,150);
>> res = conv(z);
>> res{1}
ans =
Columns 1 through 6
0.7320 0.5413 0.1805 0.6716 0.5677 0.1423
0.1643 0.7881 0.9306 0.9048 0.1883 0.3804
0.2804 0.8696 0.0452 0.5724 0.3242 0.3966
0.2594 0.7875 0.2406 0.1555 0.7160 0.5767
0.5471 0.9694 0.0089 0.5024 0.5529 0.0194
Column 7
0.5776
0.9322
0.1069
0.7321
0.9705
>>
همان طور که مشاهده می کنید، یک ماتریس 35 در 150 به این تابع می دهیم و اون رو در داخل یک آرایه ی سلولی ذخیره می کنه. در داخل هر سلول از این آرایه ی سلولی،یک ماتریس 5 در 7 ذخیره شده است. یعنی در کل ما 150 تا ماتریس 5 در 7 داریم.
beyamooz.com/images/matlab/functions/addrow.zip
روش کار به صورت زیر است:
1. اگر می خواهید به اول یک ماتریس، یک سطر اضافه کنید، به صورت زیر عمل کنید:
>> a = magic(3)
a =
8 1 6
3 5 7
4 9 2
>> b = [1,2,3]
b =
1 2 3
>> myRow(a,b)
ans =
1 2 3
8 1 6
3 5 7
4 9 2
>>
2.اگر می خواهید به اول یک ماتریس یک ستون اضافه شود، به صورت زیر عمل کنید:
a = magic(3)
a =
8 1 6
3 5 7
4 9 2
>> b = [1;2;3]
b =
1
2
3
>> myCol(a,b)
ans =
1 8 1 6
2 3 5 7
3 4 9 2
>>
3. اگر می خواهید پس از سطر دوم (یا سطر nام) از یک ماتریس، یک سطر قرار دهید به صورت زیر عمل کنید:
>> a = magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> b = [1,2,3,4]
b =
1 2 3 4
>> rowBetween(a,b,2)
ans =
16 2 3 13
5 11 10 8
1 2 3 4
9 7 6 12
4 14 15 1
>>
4. اگر می خواهید پس از ستون دوم ( یا ستون nام) از یک ماتریس، یک ستون قرار دهید به صورت زیر عمل کنید:
>> a = magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> b = [1;2;3;4]
b =
1
2
3
4
>> colBetween(a,b,2)
ans =
16 2 1 3 13
5 11 2 10 8
9 7 3 6 12
4 14 4 15 1
>>
beyamooz.com/images/matlab/functions/removeMatrix.m
روش انجام کار به صورت زیر است:
ابتدا یک ماتریس به این تابع می دهیم و سپس تعداد سطرهایی که می خواهیم حذف شوند و سپس تعداد ستون هایی که می خواهیم حذف شوند را بعنوان آرگومان به تابع می دهیم:
>> a = magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> removeMatrix(a,3,2)
ans =
19 21 3
25 2 9
ممنون از پاسخ شما,ولی وقتی دستور (a = getVec(x100,100 را وارد می کنم در قسمت a برای هر درایه مورد نظر که کلیک می کنم 99 درایه صفر را نشان می دهد در صورتی که در ماتریس های اصلی عدد وجود دارد
نکته:همه 100 ماتریس من قبلا در قسمت workspace آورده شده است
بنده چون از نحوه ی ذخیره سازی ماتریس های شما اطلاع نداشتم تابع رو این طوری نوشتم. اما الان که گفتید این 100 ماتریس در workspace تعریف شده اند، میشه با استفاده از یک حلقه ی for کاری کرد که عملیات به طور اتوماتیک انجام شود. اگر امکانش وجود داره، ماتریس های خودتون رو به ایمیل بنده که در زیر نوشتم ارسال کنید تا دقیقا مشکل گزارش شده رو بتونم اصلاح کنم:
[email protected]
همچنین اگر می خواهید به نظرات پاسخ دهید، در ذیر نظر قبلی، بر روی "پاسخ دادن" کلیک کنید تا دیگران بتوانند بحث را دنبال کنند.
من ١٠٠ ماتريس ٣٠ در ٤٠ دارم كه روي هم قرار دادم
مي خواهم هردرايه ماتريس ها با هم يك ماتريس جديد تشكيل دهند
يعني ١٢٠٠ ماتريس ١٠٠ در ١
چه كار بايد كرد
ممنون
برای انجام این کار، یک تابع ایجاد کردم. نام این تابع را getVec قرار داده ام.
با کلیک بر روی لینک زیر می توانید این تابع را دانلود کنید:
beyamooz.com/images/matlab/functions/getVec.zip
روش استفاده از این تابع به صورت زیر است:
1. یک ماتریس دلخواه ( مثلا ماتریس شما که ابعاد آن را ذکر کرده اید) به تابع getVec می دهیم و شماره ی این ماتریس، یعنی عدد 1 برای اولین ماتریس، عدد 2 برای دومین ماتریس و .... الی آخر، را بعنوان آرگومان دوم، به این تابع می دهیم. سپس این تابع طبق خواسته ی شما عمل می کند و اعدادی که در ماتریس ها بر روی یکدیگر قرار گرفته اند را در داخل یک بردار که در داخل یک آرایه ی سلولی قرار دارد به ما می دهد. مثال:
دستورات زیر را در متلب وارد کنید:
x = randi([1 100],3,5)
x2 = randi([1 100],3,5)
a = getVec(x,1)
b = getVec(x2,2)
حالا دستور زیر را وارد کنید:
>> b{1,1}
خواهید دید که جواب زیر برگردانده خواهد شد:
ans =
25 15
به مثال زیر که بنده در متلب وارد کرده ام توجه کنید:
>> x = randi([1 100],3,5)
x2 = randi([1 100],3,5)
a = getVec(x,1)
b = getVec(x2,2)
x =
25 85 36 26 54
58 29 99 82 81
99 69 9 9 74
x2 =
15 48 91 57 69
44 59 65 94 47
36 15 17 79 27
a =
Columns 1 through 10
[25] [85] [36] [26] [54] [58] [29] [99] [82] [81]
Columns 11 through 15
[99] [69] [9] [9] [74]
b =
Columns 1 through 5
[1x2 double] [1x2 double] [1x2 double] [1x2 double] [1x2 double]
Columns 6 through 10
[1x2 double] [1x2 double] [1x2 double] [1x2 double] [1x2 double]
Columns 11 through 15
[1x2 double] [1x2 double] [1x2 double] [1x2 double] [1x2 double]
>> b{1,1}
ans =
25 15
>> x3 = randi([1 100],3,5)
x3 =
57 92 93 63 39
25 89 18 92 75
32 80 52 67 82
>> getVec(x3,3)
ans =
Columns 1 through 5
[1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double]
Columns 6 through 10
[1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double]
Columns 11 through 15
[1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double]
>> ans{1,2}
ans =
85 48 92
می خواستم یه ماتریس بزرگ را به یک ماتریس 1×1 یا اینکه یک سطر و ستون داشته باشه تبدیل کنم.چه دستوری باید به مطلب بدم.
>> a = [1,2,3,4;5,6,7,8;9,10,11,12]
a =
1 2 3 4
5 6 7 8
9 10 11 12
>> a(:)
ans =
1
5
9
2
6
10
3
7
11
4
8
12
به مثال زیر توجه کنید:
>> myArray = {'hello';'world';'are';'you';'there'};
>> ToRemove = [1:5]
ToRemove =
1 2 3 4 5
>> myArray(ToRemove) = [];
>>
ابتدا یک آرایه سلولی یک سطری به نام myArray ایجاد کرده ایم. سپس در متغیر ToRemove، اندیس هایی که می خواهیم حذف شوند را مشخص کرده ایم. و در آخر آنها را برابر با [] یا همان null قرار داده ایم.
اگر می خواهید این دو ستون به آخر ماتریس مورد نظر اضافه شود، به صورت زیر عمل کنید:
>> a = [1,2,3,4,5]
a =
1 2 3 4 5
>> a(1,6)=0
a =
1 2 3 4 5 0
>> a(1,7) = 0
a =
1 2 3 4 5 0 0
وقت بخیر
برای بدست آوردن 5 سطر اول مینیمم در یک ماتریس دو بعدی چ دستوراتی در متلب داریم؟
منظورتون از "5 سطر اول مینیمم" رو بیشتر توضیح بدید. آیا منظور شما پیدا کردن مقدار مینیمم در 5 سطر اول یک ماتریس هست؟