نمایش نتایج 1 تا 8 از 8

نام تاپیک: دترمینان ماتریس n*n

  1. #1

    دترمینان ماتریس n*n

    سلام!
    بچه ها کسی معادله یا الگوریتم خاصی برای محاسبه دترمینان یه ماتریس n*n میدونه؟
    مرسی!

  2. #2
    یه الگوریتم بازگشتی سادست!

    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 تابع به دست آوردن ماتریس همسازه است.

    توجه:ماتریس همسازه ماتریسی است که از حذف یک سطر و ستون از یک ماتریس دیگر به دست می آید.

  3. #3
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    شما به این تاپیک مراجعه کنید .
    http://www.barnamenevis.org/viewtopic.php?t=3475
    با تشکر از آقا کامبیز .ولی ممکنه برای 6 در 6 به بعد با خطای overflow مواجه شوید .
    موفق باشید
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  4. #4
    تا 15 در 15 خیالت راحت باشه.
    اما به هرحال اگه ماتریسهات بزرگن و حتما احتیاج به وارونشون داری، بهتره از روشهای عددی معادله زیر رو حل کنی:
    A*A^(-1)=I

  5. #5
    مرسی داداش حل شد!!
    خدا بچه هات رو زیاد کنه!

  6. #6
    با سلام
    فکر کنم این هم خوب جواب بده

    #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&#93 ;,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();
    }


    دوست عزیز، لطفا برای مشخص کردن بخش کد، از تگهای مربوطه استفاده کنید.

  7. #7
    سلام
    دوست عزیز :
    برای حل این برنامه می توان از روش گاوس-جردن نیز استفاده کرد یعنی هر بار با استفاده از یک حلقه زیر قطر اصلی ماتریس را صفر کنی.!!

  8. #8

    نقل قول: دترمینان ماتریس n*n

    سلام بر اساس الگوریتم بازگشتی جناب 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);
    }


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •