سلام!
بچه ها کسی معادله یا الگوریتم خاصی برای محاسبه دترمینان یه ماتریس n*n میدونه؟
مرسی!
Printable View
سلام!
بچه ها کسی معادله یا الگوریتم خاصی برای محاسبه دترمینان یه ماتریس n*n میدونه؟
مرسی!
یه الگوریتم بازگشتی سادست!
1. دترمینان یک ماتریس مربعی 1×1 خودش است!
2. دترمینان هر ماتریس مربعی دیگر، با کمک دترمینان ماتریسهای همسازه مرتبه پایینتر بدست میآید. مثلا اگرA یک ماتریس مربعی n*n باشد داریم:
det(A) = A[i,1] * det(h(A,i,1)) * pwr(-1,0) +
A[i,2] * det(h(A,i,2)) * pwr(-1,1) +
A[i,3] * det(h(A,i,3)) * pwr(-1,2) +
...
A[i,j] * det(h(A,i,j)) * pwr(-1,j-1) +
...
A[i,n] * det(h(A,i,n)) * pwr(-1,n-1);
که در آن i یک عدد طبیعی دلخواه بین 1 تا n و
pwr تابع توان و
h تابع به دست آوردن ماتریس همسازه است.
توجه:ماتریس همسازه ماتریسی است که از حذف یک سطر و ستون از یک ماتریس دیگر به دست می آید.
شما به این تاپیک مراجعه کنید .
http://www.barnamenevis.org/viewtopic.php?t=3475
با تشکر از آقا کامبیز .ولی ممکنه برای 6 در 6 به بعد با خطای overflow مواجه شوید .
موفق باشید
تا 15 در 15 خیالت راحت باشه.
اما به هرحال اگه ماتریسهات بزرگن و حتما احتیاج به وارونشون داری، بهتره از روشهای عددی معادله زیر رو حل کنی:
A*A^(-1)=I
مرسی داداش حل شد!!
خدا بچه هات رو زیاد کنه!
با سلام
فکر کنم این هم خوب جواب بده
#include<conio.h>
#include<stdio.h>
#include<math.h>
int main()
{
clrscr();
int i,j,k=1,n,p;
float m[50][50],a[50][50] ;,b[50][50],h,det=1;
printf("enter row and column of matrix:");
scanf("%d%d",&n,&p);
if(p!=n)
printf("this matrix havenot the determinan!");
else
{
printf("enter element of matrix:\n");
for(i=1;i<=n;++i)
{
printf("\n");
for(j=1;j<=n;++j)
{
printf("a[%d,%d]=",i,j);
scanf("%f",&a[i][j]);
b[i][j]=a[i][j];
if(i==n &&j==n)
printf("\a\a");
}
}
i=1;
/*while(i<=n)
{
if(a[i][1]==0)
++i;
else
break;
}
if(i-1==n)
{
printf("determinan of matrix(%d*%d)=%d\n",n,n,0);
printf("matrix(%d*%d) is:",n,n);
for(i=1;i<=n;++i)
{
printf("\n");
for(j=1;j<=n;++j)
printf("%4.2f ",b[i][j]);
}
getch();
return 0;
} */
while(k<=n-1)
{
for(i=k+1;i<=n;++i)
{
if(abs(a[k][k])<abs (a[i][k]))
{
for(j=1;j<=n;++j)
{
h=a[k][j];
a[k][j]=a[i][j];
a[i][j]=h;
}
det=-1*det;
break;
}
}
for(i=k+1;i<=n;++i)
{
if(a[k][k]!=0)
m[i][k]=(float)(a[ i][k]/a[k][k]);
for(j=1;j<=n;++j)
a[i][j]=a[i][j]-m[i][k]*a[k][j];
}
++k;
}
for(i=1;i<=n;++i)
det=det*a[i][i];
printf("determinan of matrix (%d*%d)=%4.2f\n",n,n,det);
printf("matrix(%d*%d) is:",n,n);
for(i=1;i<=n;++i)
{
printf("\n");
for(j=1;j<=n;++j)
printf("%4.2f ",b[i][j]);
}
}
getch();
}
دوست عزیز، لطفا برای مشخص کردن بخش کد، از تگهای مربوطه استفاده کنید.
سلام
دوست عزیز :
برای حل این برنامه می توان از روش گاوس-جردن نیز استفاده کرد یعنی هر بار با استفاده از یک حلقه زیر قطر اصلی ماتریس را صفر کنی.!!
سلام بر اساس الگوریتم بازگشتی جناب sepidar این برنامه رو نوشتم ولی درست جواب نمیده ظاهرا ایراد syntax داره .کسی ایراد برنامرو نمیدونه؟
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int **h(int **a,int k,int f);//تابع بدست اوردن ماتریس همسازه
int det(int **p,int n);
int **h(int **a,int k,int f)
{
int i,j,l,m;
int **z;
z=(int **)malloc(sizeof(int)*(k-1));
if (!z)
{
textcolor(4);
cprintf("no memory");
exit(0);
}
for (i=0;i<k-1;i++)
{
z[i]=(int*)malloc(sizeof(int)*(k-1));
if (!z[i])
{
textcolor(4);
cprintf("no memory");
exit(0);
}
}
for (i=1,l=0;i<k;i++,l++)
for(j=0,m=0;j<k;j++)
if(j!=f)
{
z[l][m]=a[i][j];
m++;
}
return(z);
}
int det(int **p,int n)
{
int s,q=0;
if (n==2)
s=(p[0][0]*p[1][1])-(p[0][1]*p[1][0]);
else
for(q=0;q<n;q++)
s=s+(p[0][q]*det(h(p,n,q),n-1)*pow(-1,q));
return(s);
}
int main()
{
int **p;
int n,i,j,b;
printf("enter matrix dimension:");
scanf("%d",&n);
p=(int **)malloc(sizeof(int)*n);
if (!p)
{
textcolor(4);
cprintf("no memory");
exit(0);
}
for(i=0;i<n;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);
if(!p[i])
{
textcolor(4);
cprintf("no memory");
exit(0);
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("Enter p[%d][%d]:",i,j);
scanf("%d",&p[i][j]);
}
b=det(p,n);
printf("%d",b);
getch();
return (0);
}