PDA

View Full Version : مبتدی: ماتریس معکوس



disiba
چهارشنبه 26 بهمن 1390, 09:18 صبح
سلام دوستان
من می خوام معکوس ماتریس 16 در 16 رو محاسبه کنم . برنامه های مختلفی رو نوشتم یا از اینترنت پیدا کردم ولی مشکل من اینه که وقتیکه ابعاد ماتریس از 9 در 9 بیشتر می شه زمان اجرا بسیار بالا میره . 1 زیربرنامه در اینترنت پیدا کردم که لینکش و گذاشتم ولی چون من مبتدی هستم و در این زیر برنامه از پوینر استفاده شده ، لطف کنید بهم بگید چطوری توی برنامه main اونو صدا بزنم . قبلا از همکاریتون بسیار متشکرم .
http://snippets.dzone.com/posts/show/7558

shahmohammadi
چهارشنبه 26 بهمن 1390, 18:05 عصر
سلام.
قبل فراخوانی این تابع باید دو تا ماتریس رو new یا allocate یا تعریف کرده باشید، و کافی هست نام دو تا آرایه رو بدون هیچ علامت دیگری یه بابع بدید.
آرایه ها هم به صورت مربعی اند. و پارامتر سوم اندازه سطر یا ستون هست.

shahmohammadi
چهارشنبه 26 بهمن 1390, 18:26 عصر
این هم یه مثال ساده از به کار بردن این تابع:
int main(int argc, char *argv[])
{
double a[4]={1.1,2.0,3.2,4.0};
double b[4];

matrix_inverse(a,b,2);

int j;
for(int i=0; i<4; i++)
{
cout<<b[i]<<"\t";
}

system("PAUSE");
return EXIT_SUCCESS;
}
این نکته رو هم تاکید می کنم که آرایه یاید یک بعدی باشه، چون double* یعنی یک بعدی. یعنی باید ماتریس مربع رو با آرایه یک بعدی بنویسید.

disiba
پنج شنبه 27 بهمن 1390, 18:04 عصر
این هم یه مثال ساده از به کار بردن این تابع:
int main(int argc, char *argv[])
{
double a[4]={1.1,2.0,3.2,4.0};
double b[4];

matrix_inverse(a,b,2);

int j;
for(int i=0; i<4; i++)
{
cout<<b[i]<<"\t";
}

system("PAUSE");
return EXIT_SUCCESS;
}
این نکته رو هم تاکید می کنم که آرایه یاید یک بعدی باشه، چون double* یعنی یک بعدی. یعنی باید ماتریس مربع رو با آرایه یک بعدی بنویسید.
با سلام مجدد
منظور از 1 بعدی بودن ارایه یعنی چه ؟ مثلا اگر ارایه ما 4در4 باشه باید 1 ارایه 1 بعدی 1 در 16 داشته باشیم و سطرهای 1 تا 4 ارایه اصلی رو به ترتیب توی ارایه 1 بعدی بنویسیم ؟

shahmohammadi
پنج شنبه 27 بهمن 1390, 22:20 عصر
بله. درست متوجه شدید.
اگر درس ساختمان داده ها رو داشته باشید یک فصلش (آرایه ها و ساختار ها) در همین مورد هست.
اگر ماتریس دوبعدی A2d رو در آرایه یک بعدی A1d ذخیره کرده باشیم برای آدرس دهی خونه های ماتریس از روش زیر استفاده می کنیم:
A2d [ Max1 ] [ Max2 ] ==> A1d [ Max1 * Max2 ]
A2d [ i ] [ j ] ==> A1d [ i * Max2 + j ]