در این جلسه تیم کدگیت را با آموزش جمع و تفریق ماتریس در سی شارپ همراهی کنید. پیش نیاز این آموزش کار با آرایه ها است.
ماتریس
ماتریس به آرایشی مستطیلی شکل از اعداد یا عبارات ریاضی که بصورت سطر و ستون شکل یافته گفته میشود. به طوری که میتوان گفت که هر ستون یا هر سطر یک ماتریس، یک بردار را تشکیل میدهد. هر یک از عناصر ماتریس درایه خوانده میشود. ماتریسی با ۲ سطر و ۳ ستون به این شکل است:
ماتریسهای هم اندازه (با تعداد سطر و ستون برابر) را میتوان با هم جمع یا از هم تفریق کرد. ضرب دو ماتریس تنها در صورتی ممکن است که تعداد ستونهای ماتریس اول با تعداد سطرهای ماتریس دوم برابر باشد.
در جبر خطی، میتوان اثبات کرد که هر نگاشت خطیِ، از فضای Rn به فضای Rn ، یکریخت با یک ماتریس m*n (یعنی m سطر n ستون) میباشد. ماتریسها کاربردهای فراوانی در جبر خطی دارند(ویکیپدیا).
جمع ماتریس
برای جمع ماتریس باید تعداد سطر و ستون دو ماتریس با هم برابر باشند(یعنی هر دو مثلا 2*3 باشند). فرمول جمع ماتریس به صورت زیر است.
تفریق ماتریس
برای تفریق ماتریس باید تعداد سطر و ستون دو ماتریس با هم برابر باشند. فرمول تفریق ماتریس به صورت زیر است.
پیاده سازی جمع و تفریق ماتریس در سی شارپ
برای پیاده سازی ماتریس از آرایه دو بعدی استفاده میکنند. ما یک کلاس مینویسیم به نام MainClass و دو متد add و subtract که به ترتیب جمع و تفریق هستند را در آن کلاس پیاده سازی میکنیم.
class MainClass
{
// return C = A + B
public static double[,] add(double[,] A,double[,] B) {
int m = A.GetLength(0);
int n = A.GetLength(1);
double[,] C = new double[m,n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
C[i,j] = A[i,j] + B[i,j];
return C;
}
// return C = A - B
public static double[,] subtract(double[,] A, double[,] B) {
int m = A.GetLength (0);
int n = A.GetLength(1);
double[,] C = new double[m,n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
C[i,j] = A[i,j] - B[i,j];
return C;
}
}
همانطور که در کد جمع و تفریق ماتریس در سی شارپ میبینید ما ابتدا سطر و ستون ماتریس را میگیریم و عناصر هر خانه ماتریس را با خانه معادل آن در ماتریس دیگر جمع و یا تفریق میکنیم.
تست برنامه
کد زیر کد تست برنامه ما است.
public static void Main (string[] args)
{
double[,] a = { { 1, 2, 3 }, { 4, 5, 6 }, { 9, 1, 3 } };
double[,] b = { { 5, 3, 3 }, { 1, 7, 6 }, { 8, 5, 4 } };
double[,] sub = subtract(a, b);
double[,] addd = add(a, b);
Console.WriteLine("add");
for (int i = 0; i < addd.GetLength(0); i++) {
for (int j = 0; j < addd.GetLength (0); j++) {
Console.Write("[{0}] ", addd[i,j]);
}
Console.WriteLine ();
}
Console.WriteLine("Subtract");
for (int i = 0; i < sub.GetLength(0); i++) {
for (int j = 0; j < sub.GetLength (0); j++) {
Console.Write("[{0}] ", sub[i,j]);
}
Console.WriteLine ();
}
Console.ReadKey ();
}
ما در کد بالا دو ماتریس را به نام a و b تعریف کردیم و با هم جمع و تفریق کردیم.سپس نتیجه را نمایش دادیم.
خروجی برنامه جمع و تفریق ماتریس در سی شارپ
add
[6.0, 5.0, 6.0]
[5.0, 12.0, 12.0]
[17.0, 6.0, 7.0]
subtract
[-4.0, -1.0, 0.0]
[3.0, -2.0, 0.0]
[1.0, -4.0, -1.0]
برای تستش توی خلقه چرا شروع متغییر های i و j رو خالی گذاشتین؟!!
سلام. متغیر i و j مقدار دهی شده اند اما در کد بالا درست کپی نشده است. در قسمت دانلود سورس کد، کد کامل آورده شده.
سلام. دوتا ارائه دوبعدی بگیرید و جمع و تفریق و ترانهاده. ان را انجام بدهید