ايران ويج

نسخه‌ی کامل: محاسبه دترمینان ماتریس
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
دوستان من نیاز خیلی سریع به برنامه محاسبه دترمینان ماترس n*n دارم اگه کسی می تونه کمک کنه بسیار ممنون میشم.
سلام
من دانشجوی کامپیوتر دانشگاه پیام نور هستم .
این برنامه و حتی برنامه وارون ماتریس n*n رو دارم ، ولی خدایی خیلی براشون زحمت کشیدم
سلام
اگه عجله نداشتي ميتونستم كمكت كنم تا آخر اين هفته اصلا وقت ندارم. ولي فك نكنم زياد سخت باشه اول خودت سعي كن فرمولش رو كه داري ( اگه نه فك كنم تو كتاب هندسه تحليلي و جبر خطي سيد موسوي (مبتكران) باشه - همون بحث كهاد و ... هست كه حول يه سطر يا ستون بسط ميدي ) سرچ كن تو PSC هم احتمالا باشه.
سلام دوستان

کسی برنامه گرفتن دترمینان بروش کرامر را دارد!!!!!!!!!!!!

خیلی خیلی ممنون  میشوم!!!!

برایم حیاتی است
دترمينان ماتريس

#include <stdio.h>
#include <conio.h>
#include <math.h>
// A square matrix struct
typedef struct

{
int order;
int **array;

} SQRMATRIX;

// Function declarations
int CreateMatrix( SQRMATRIX *p, int order );
void DisplayMatrix( SQRMATRIX *p );
void InputMatrix( SQRMATRIX *p );
int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col );
int CalcDeterminant( SQRMATRIX *p );
void DestroyMatrix( SQRMATRIX *p );
// main( )
int main( )


{
SQRMATRIX p;
int order;

printf("Enter order of matrix: ");
scanf("%d", &order );

if( !CreateMatrix( &p, order ))


{
printf("Matrix couldn't be created.");
return 0;
}

printf("Matrix created.\n\n");
InputMatrix( &p );

printf("\nThe matrix is:\n");
DisplayMatrix( &p );
printf("\nThe determinant of the matrix is: %d", CalcDeterminant( &p ));

getch( );
return 0;
}

// Create matrix of specified order
int CreateMatrix( SQRMATRIX *p, int order )


{
int i;

if( order < 1 )
return 0;

p->order = order;
p->array = (int**) malloc( order * sizeof( int* )); // Allocate space for each row

if( !p->array )
return 0;

for( i=0; i < order; i++ )


{
p->array = (int*) malloc( order* sizeof( int )); // Allocate space for each column
if( !p->array )
return 0;
}
return 1;
}


// Print matrix in proper format
void DisplayMatrix( SQRMATRIX *p )


{
int i,j;

if( p->order < 1 )
return;

for( i = 0; i < p->order; i++ )


{
for( j = 0; j < p->order; j++ )
printf("%5d ", p->array[j] );

printf("\n");
}
}

// Input matrix from user
void InputMatrix( SQRMATRIX *p )


{
int i,j;

for( i = 0; i < p->order; i++ )
for( j = 0; j < p->order; j++ )


{
printf("Enter element at ( %d, %dSad ", i+1, j+1 );
scanf("%d", &p->array[j] );
}
}


/* Calculate the 'minor' of the given matrix at given position.
The minor is the matrix formed by deleting the specified row
and column from the matrix.
*/
int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col )


{
int i,j,a,b;
if( p->order <= 1 )
return 0;

if( row >= p->order || col >= p->order )
return 0;

if( !CreateMatrix( minor, p->order-1 ))
return 0;

a = b = 0;

for( i = 0; i < p->order; i++ )


{
if( i != row )


{
b = 0;
for( j = 0; j < p->order; j++ )


{
if( j != col )


{
minor->array[a] = p->array[j];
b++; // Increase column-count of minor
}
}
a++; // Increase row-count of minor
}
}

return 1;
}

/* Calculate the determinant recursively.
The recursive definition is :
det( m ) = Summation( i = 0 to order ) [ (-1)^i * m[0] * det( minor( m[0] ))]
*/
int CalcDeterminant( SQRMATRIX *p )


{
int i, result = 0, temp;
SQRMATRIX minor;
if( p->order < 1 )


{
printf("CalcDeterminant( ) : Invalid matrix.");
return 0;
}

// The 'stopping' condition
if( p->order == 1 )
return p->array[0][0];

for( i = 0; i < p->order; i++ )


{
if( !CalcMinor( p, &minor, 0, i ))


{
printf("CalcDeterminant( ) : Memory allocation failed.");
return 0;
}

result += ( pow( -1, i ) * p->array[0] * CalcDeterminant( &minor ));

DestroyMatrix( &minor );
}

return result;
}

// Release allocated memory
void DestroyMatrix( SQRMATRIX *p )


{
int i;

if( p->order < 1 )
return;

for( i = 0; i < p->order; i++ )
free( p->array ); // free each columns

free( p->array ); // free each row
p->order = 0;
}