برنامه ای که دترمینان ماتریس N*N را محاسبه می کند.
برای یادگیری عملکرد دترمینان ماتریس N*N به این اینجا مراجعه کنید.
برای یادگیری عملکرد دترمینان ماتریس N*N به این اینجا مراجعه کنید.
/*Determinan Matrix*/
#include
#include
#include
#include
#include
int p=1;
float det(int i1,int j1,int i4,int j4,int n,float x[10][10]);
int main()
{
clrscr();
float x[10][10]; int n;
cout<<"Enter n for Matrix n*n: "; cin>>n; cout<<"\nEnter "< for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>x[i][j];
cout< return 0;}
float det(int i1,int j1,int i4,int j4,int n,float x[10][10]) {
if(n==2) {int i2,i3,j2,j3; i2=i1; j2=j4; i3=i4; j3=j1; return x[i1][j1]*x[i4][j4]-x[i2][j2]*x[i3][j3];}
float sum=0;
for(int k=j1;k<=j4;k++) {
if(k==j1) sum+=p*x[i1][k]*det(i1+1,j1+1,i4,j4,i4-i1,x);
else if(k==j4) sum+=p*x[i1][k]*det(i1+1,j1,i4,j4-1,i4-i1,x);
else sum+=p*x[i1][k]*det(i1+1,j1,i4,j4,i4-i1,x);
p*=-1;
}
return sum;
}
#include
#include
#include
#include
#include
int p=1;
float det(int i1,int j1,int i4,int j4,int n,float x[10][10]);
int main()
{
clrscr();
float x[10][10]; int n;
cout<<"Enter n for Matrix n*n: "; cin>>n; cout<<"\nEnter "<
for(int j=1;j<=n;j++) cin>>x[i][j];
cout<
float det(int i1,int j1,int i4,int j4,int n,float x[10][10]) {
if(n==2) {int i2,i3,j2,j3; i2=i1; j2=j4; i3=i4; j3=j1; return x[i1][j1]*x[i4][j4]-x[i2][j2]*x[i3][j3];}
float sum=0;
for(int k=j1;k<=j4;k++) {
if(k==j1) sum+=p*x[i1][k]*det(i1+1,j1+1,i4,j4,i4-i1,x);
else if(k==j4) sum+=p*x[i1][k]*det(i1+1,j1,i4,j4-1,i4-i1,x);
else sum+=p*x[i1][k]*det(i1+1,j1,i4,j4,i4-i1,x);
p*=-1;
}
return sum;
}
دترمینان به این ترتیب عمل میكند كه ابتدا آرایه ها و نیازها را خود تابع دریافت میكند.
در خود تابع از سطر اول عدد اول را انتخاب و در دترمینان ماتریس بغیر از سطر اول و ستون اول ضرب میكند
عدد انتخاب شده، سه حالت دارد كه یا عدد اول سطر یا عدد آخر سطر یا عدد غیر از آنها كه برای هر كدام مقدار ورودی تابع فرق میكند
و به همین ترتیب عدد دوم سطر و سوم و... تا وقتی كه ماتریس 2*2 بدست می آید.
برای حساب كردن ماتریس معكوس، ما به دترمینان و ماتریس همسازه نیاز داریم كه ماتریس همسازه نیز در تابع جداگانه با نام det و hams آمده است.

☼ توضیحات متخصر درمورد دترمینان :
i1 : مشخصه سطر اول ماتریس j1 : مشخصه ستون اول ماتریس
i4 : مشخصه سطر آخر ماتریس j4 : مشخصه ستون آخر ماتریس
k : شمارنده حلقه for به تعداد مرتبه ماتریس ( تعداد ستونهای ماتریس)
p : برای تغییر دادن علامت ستون زوج ماتریس . برای بدست آوردن دترمینان یكی در میان در منفی ضرب میشوند.
اگر مرتبه ماتریس (n) بزرگتر از 2 یعنی 3یا4 یا... باشد اعداد سطر اول را در دترمینان حاصل از حذف سطر و ستون همان عدد ضرب میكند. مثلا عدد اول سطر اول (x[i1][k] ) را برداشته و آن را در دترمینان حاصل از خذف سطر اول و ستون اول ضرب میكند.
عددی كه برداشته میشود 3 حالت دارد 1- اولین عدد سطر 2- آخرین عدد سطر 3- اعداد بین اول و آخر سطر
برای اولی ما باید سطر اول و ستون اول را حذف كنیم --- i1+1 سطر دوم را جایگزین سطر اول میكند. و j1+1 ستون دوم را جایگزین اول میكند . سطر و ستون آخر خودشان و i4-i1 همان n جدید یعنی مرتبه ماتریس منهای یك.
برای دومی باید سطر اول و ستون آخر را حذف كنیم .---i1+1 سطر دوم جایگزین سطر اول . --- j1 ستون اولی خودش . --- j4 سطر آخری خودش ---j4-1 ستون آخر حذف و ستون قبلی جایگزین آن میشود.
برای سومی سطر و ستون اول و آخر تغییر نمیكند فقط مرتبه ماتریس یكی كم میشود .
این روند ادامه پیدا میكند تا وقتی كه مرتبه ماتریس به 2 برسد كه دتر مینان آن را به صورت دستی حساب كردم یعنی جایی كه نوشته شده if (n = = 2 )
• رابطه دترمینان 4*4:
• رابطه دترمینان در حالت کلی: ماتریس Aij ماتریس حاصل از حذف ستون iام و سطر jام هست
پیشنهاد میكنم به صورت دستی روی كاغذ با نوشتن مشخصه ها و تغییرات آنها، امتحان كنید تا بهتر متوجه بشوید.
امیدوارم توضیح مفید بوده باشه. اگه خوب توضیح ندادم، عذر خواهی میکنم.
عدد انتخاب شده، سه حالت دارد كه یا عدد اول سطر یا عدد آخر سطر یا عدد غیر از آنها كه برای هر كدام مقدار ورودی تابع فرق میكند
و به همین ترتیب عدد دوم سطر و سوم و... تا وقتی كه ماتریس 2*2 بدست می آید.
برای حساب كردن ماتریس معكوس، ما به دترمینان و ماتریس همسازه نیاز داریم كه ماتریس همسازه نیز در تابع جداگانه با نام det و hams آمده است.


☼ توضیحات متخصر درمورد دترمینان :
i1 : مشخصه سطر اول ماتریس j1 : مشخصه ستون اول ماتریس
i4 : مشخصه سطر آخر ماتریس j4 : مشخصه ستون آخر ماتریس
k : شمارنده حلقه for به تعداد مرتبه ماتریس ( تعداد ستونهای ماتریس)
p : برای تغییر دادن علامت ستون زوج ماتریس . برای بدست آوردن دترمینان یكی در میان در منفی ضرب میشوند.
اگر مرتبه ماتریس (n) بزرگتر از 2 یعنی 3یا4 یا... باشد اعداد سطر اول را در دترمینان حاصل از حذف سطر و ستون همان عدد ضرب میكند. مثلا عدد اول سطر اول (x[i1][k] ) را برداشته و آن را در دترمینان حاصل از خذف سطر اول و ستون اول ضرب میكند.
عددی كه برداشته میشود 3 حالت دارد 1- اولین عدد سطر 2- آخرین عدد سطر 3- اعداد بین اول و آخر سطر
برای اولی ما باید سطر اول و ستون اول را حذف كنیم --- i1+1 سطر دوم را جایگزین سطر اول میكند. و j1+1 ستون دوم را جایگزین اول میكند . سطر و ستون آخر خودشان و i4-i1 همان n جدید یعنی مرتبه ماتریس منهای یك.
برای دومی باید سطر اول و ستون آخر را حذف كنیم .---i1+1 سطر دوم جایگزین سطر اول . --- j1 ستون اولی خودش . --- j4 سطر آخری خودش ---j4-1 ستون آخر حذف و ستون قبلی جایگزین آن میشود.
برای سومی سطر و ستون اول و آخر تغییر نمیكند فقط مرتبه ماتریس یكی كم میشود .
این روند ادامه پیدا میكند تا وقتی كه مرتبه ماتریس به 2 برسد كه دتر مینان آن را به صورت دستی حساب كردم یعنی جایی كه نوشته شده if (n = = 2 )
• رابطه دترمینان 4*4:

• رابطه دترمینان در حالت کلی: ماتریس Aij ماتریس حاصل از حذف ستون iام و سطر jام هست

پیشنهاد میكنم به صورت دستی روی كاغذ با نوشتن مشخصه ها و تغییرات آنها، امتحان كنید تا بهتر متوجه بشوید.
امیدوارم توضیح مفید بوده باشه. اگه خوب توضیح ندادم، عذر خواهی میکنم.
پنجشنبه هجدهم اسفند ۱۳۹۰ | 13:48