PDA

View Full Version : الگوریتم دترمینان ماتریس n در n



amir_cpp
سه شنبه 20 آذر 1386, 19:32 عصر
با سلام و عرض خسته نباشید خدمت برنامه نویسان محترم.

می خواستم ببینم کسی می تونه در مورد الگوریتم دترمینان ماتریس n در n به من کمک کنه یا نه. راستش هم بازگشتی مدنظره هم غیر بازگشتی، با تشکر.

emad_67
سه شنبه 20 آذر 1386, 22:16 عصر
الگوریتم بازگشتی اون به این شکله:
دترمینان هر ماتریس مربعی ، با کمک دترمینان ماتریسهای همسازه مرتبه بالا تر بدست میاد. بنابراین دترمینان به صورت زیر محاسبه می شود:


det(A) = A[i,1] * det(minor(A,i,1)) * pow (-1,0)+
A[i,2] * det(minor (A,i,2)) * pow (-1,1)+
A[i,3] * det(minor (A,i,3)) * pow (-1,2)+
...
A[i,j] * det(minor (A,i,j)) * pow (-1,j-1)+
...
A[i,n]] * det(minor (A,i,n)) * pow(-1,n-1)
که در توی این فرمول i یک عدد طبیعی دلخواه بین 1 تا n و pow تابع توان و minor تابع به دست آوردن ماتریس همسازه است.

amir_cpp
یک شنبه 25 آذر 1386, 19:11 عصر
ممنون می شم اگه یه مثال بزنید.
مثلا برای n=7 کد کامل چی می شه؟
ممنون.

emad_67
یک شنبه 25 آذر 1386, 21:30 عصر
کدش که خودت باید بنویسی ولی از روش باز گشتی باید آرایه رو کوچیک کنی تا به 2*2 برسه یعنی مثلا یه آرایه 4*4 رو به 3*3 و سپس به 2*2 تبدیل کرده و دترمینان ماتریس 2*2 رو حساب میکنیم. در واقع مقدار کل دترمینان از مقداری که از دترمینان ماتریس 2*2 به دست میاد حساب میشه. طبق فرمولی که در بالا نوشتم تقریبا واضح هست که چیکار باید بکنی.

amir_cpp
پنج شنبه 29 آذر 1386, 13:07 عصر
نه!
منظورم کد واقعی نیست! منظورم تکه کد بود، یعنی این فرمول بالا به ازای مثلا 7 چه شکلی می شه؟
ممنون.

emad_67
پنج شنبه 29 آذر 1386, 17:11 عصر
برای 7 تا هر عدد دیگه هیچ فرقی نمیکنه، چون این الگوریتم برای ماتریس n*n هست.
کد تابع محاسبه دترمینان:


int det(int a[],int n)
{
int x=0;
if(n==2)
return a[0]*a[3]-a[2]*a[1];
else
{
for(int i=0;i<n;i++)
x+=a[i]*det(minor(a,i,n),n-1)*pow(-1,i);
}
return x;
}

این تابع به صورت باز گشتی دترمینان رو به ازای هر ماتریسی محاسبه میکنه.
من توی این تابع آرایه رو 2 بعدی در نظر نگرفتم، چون محاسباتش پیچیده تر میشد بجاش یه ماتریس 1 بعدی با طول n*n ایجاد کردم و مقادیر رو در اون قرار دادم.

aser12
یک شنبه 02 دی 1386, 12:58 عصر
سلام
emad جان ممنون میشم اگه کمکم کنی بدونم برنامه ی قابل اجرایدترمینان ماتریس n در nرو از کجا میتونم گیر بیارم.

emad_67
یک شنبه 02 دی 1386, 15:42 عصر
توی همین سایت بگردی فکر کنم باشه.
http://barnamenevis.org/forum/showthread.php?t=21936&highlight=%D8%AF%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8% A7%D9%86
http://barnamenevis.org/forum/showthread.php?t=14971&highlight=%D8%AF%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8% A7%D9%86
http://barnamenevis.org/forum/showthread.php?t=47443&highlight=%D8%AF%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8% A7%D9%86

aser12
پنج شنبه 06 دی 1386, 22:58 عصر
سلام emad
جون من یک برنامه ی قابل اجرا می خوام. ماتریس(nn )در زبان c
اگه کمکم کنی خیلی ممنون میشم چون این سایت هایی که گفتی تو c
نیستند.و من فقط این زبونو بلدم.خیلی خیلی ممنون.

emad_67
جمعه 07 دی 1386, 12:58 عصر
من فقط این زبونو بلدم
خوب مشکل اینه که من c بلد نیستم و بیشتر با c++ کار کردم :D

hag narafte
چهارشنبه 05 خرداد 1389, 15:57 عصر
خوب مشکل اینه که من c بلد نیستم و بیشتر با C++‎ کار کردم :D
مشکل شما اینه که مهیچکدومو بلد نیستید وگرنه نمی گفتید c بلد نیستم:گیج:

joojoo_meysam
چهارشنبه 20 اردیبهشت 1391, 18:24 عصر
سلام با عرض خسته نباشید :
من میخواهم دترمینان 2 ماتریس (3*2) و (4*3 ) را به زبان ++c بنویسم خواهشمندم کمکم کنید.

IamOverlord
چهارشنبه 20 اردیبهشت 1391, 19:23 عصر
سلام با عرض خسته نباشید :
من میخواهم دترمینان 2 ماتریس (3*2) و (4*3 ) را به زبان ++c بنویسم خواهشمندم کمکم کنید.

فقط ماتریس مربّعی دترمینان داره.

sepehr7192
پنج شنبه 18 خرداد 1391, 11:59 صبح
کد ماتریس معکوس رو برای c++ میخوام .........خیلی مهمه:گریه::افسرده: