Trang 4 trên tổng số 4 Đầu tiênĐầu tiên ... 234
Từ 31 tới 33 trên tổng số 33 kết quả

Đề tài: Tìm Định thức và ma trận nghịch đảo

  1. #31
    Ngày gia nhập
    11 2012
    Bài viết
    2

    Thumbs down Tìm Định thức và ma trận nghịch đảo

    // De 33 Tao,Xuat ma tran, Ma tran:Chuyen vi,Nghich dao!
    #include<iostream.h>
    #include<iomanip.h>
    #include<conio.h>
    //using namespace std;
    int M[50][50], N[50][50];
    void Tao(int A[50][50],int n)
    {

    for (int i=0;i<n;i++)
    for (int j=0;j<n;j++)
    {
    cout<<"\n A["<<i<<","<<j<<"]=";
    cin>>A[i][j];
    }
    }

    void Xuat(int B[50][50],int n)
    {
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<n;j++)
    cout<<"\t"<<B[i][j];
    cout<<"\n";
    }
    }
    //Tim dinh thuc
    void Dinhthuc(int C[50][50],int n)
    {
    double det=1;
    double temp;
    int i,j,k,sign=1;
    for (i=0;i<n-1;i++)
    {
    if(C[i][i]==0) //Duong cheo chinh bang 0
    {
    k=i+1;
    while(k<n&&C[k][i]==0)
    k++;
    if(k==n)
    {
    cout<<"\nDet(A) = 0";
    break;
    }
    for (j=i;j<n;j++)
    {
    temp=C[i][j];
    C[i][j]=C[k][j];
    C[k][j]=temp;
    }
    sign=-sign;//Dinh thuc doi dau
    }
    for (j=i+1;j<n;j++)
    {
    temp = -C[j][i]/C[i][i];
    for (k=i+1;k<n;k++)
    C[j][k]+=temp*C[i][k];
    }
    det*=C[i][i];
    cout<<" ";
    }
    det*=C[n-1][n-1];
    cout<<"\nDet(A) ="<<det;
    cout<<"\n";
    }
    //Tinh ma tran nguoc
    void Nghichdao(int D[50][50],int E[50][50],int n)
    {
    int k;
    double temp,det;
    if (det!= 0)
    {
    for (int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    if(i==j)
    E[i][j] = 1;
    else
    E[i][j] = 0;

    for (i=0;i<n;i++)
    {
    if (D[i][i]==0)
    {
    k=i+1;
    while (k<n&&D[k][i]==0)
    k++;
    for (j= 0;j<n;j++)
    {
    temp=D[i][j];
    D[i][j]=D[k][j];
    D[k][j]=temp;
    temp=E[i][j];
    E[i][j]=E[k][j];
    E[k][j]=temp;
    }
    }

    temp=D[i][i];
    for (j=i;j<n;j++)
    D[i][j]/=temp;
    for (j=0;j<n;j++)
    E[i][j]/=temp;

    for (j=i+1;j<n;j++)
    {
    temp=-D[j][i];
    for (k=i;k<n;k++)
    D[j][k]+=temp*D[i][k];
    for (k=0;k<n;k++)
    E[j][k]+=temp*E[i][k];
    }
    }
    //Kt qt guess
    for (i=n-1;i>0;i--) // Qt Jordan
    for (j=i-1;j>=0;j--)
    {
    temp=-D[j][i];
    for(k=n-1;k>=i;k--)
    D[j][k]+=temp*D[i][k];
    for (k=0;k<n;k++)
    E[j][k]+=temp*E[i][k];
    }

    for (i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    cout<<""<<"\t"<<E[i][j];
    cout<<"\n";
    }
    }
    else cout<<"\nKhong co ma tran nghich dao\n";
    }
    void Chuyenvi(int T[50][50],int n)
    {
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<n;j++)

    cout<<"\t"<<T[j][i];
    cout<<"\n";
    }
    }


    void main()
    {
    clrscr();
    int n;
    cout<<"De 33:Tim ma tran chuyen vi, nghich dao!";
    cout<<"\nCap cua ma tran vuong:=";cin>>n;
    Tao(M,n);
    cout<<"\nMa tran vua tao la: \n";
    Xuat(M,n);
    cout<<"Ma tran chuyen vi cua A[] la:\n";
    Chuyenvi(M,n);
    cout<<"Dinh thuc ma tran A[] la:";
    Dinhthuc(M,n);
    cout<<"Ma tran nghich dao cua A[] la :\n";
    Nghichdao(M,N,n);
    getch();
    }
    Đây là chương trình của e xin mọi ngừơi giúp cho

  2. #32
    Ngày gia nhập
    12 2013
    Bài viết
    1

    Mặc định code có vấn đề

    Trích dẫn Nguyên bản được gửi bởi conrongchautien Xem bài viết
    Bài hoàn chỉnh đây:
    C Code:
    1. /* DINH THUC VA MA TRAN NGHICH DAO */
    2.  
    3. #include<stdio.h>
    4. #include<conio.h>
    5.  
    6. void main()
    7. {
    8. int i,j,k,m,n,na,dau=1;
    9. double det,x,tam;
    10. double a[50][50],b[50][50];
    11. clrscr();
    12. printf("\n CHAO MUNG DEN VOI CHUONG TRINH TINH DINH THUC VA MA TRAN NGHICH DAO");
    13. printf("\n");
    14. printf("\n NHAP CAP MA TRAN:"); scanf("%d",&n);
    15. na=2*n;//so cot ma tran chuyen tiep.
    16. //Nhap ma tran A.-------------------------------
    17. for(i=0;i<n;i++)
    18.     for(j=0;j<n;j++)
    19.         {
    20.         printf("a[%d][%d]=",i+1,j+1);
    21.         scanf("%lf",&a[i][j]);
    22.         }
    23.  
    24. //Tao ma tran lien ket.---------------------------
    25. for(i=0;i<n;i++)
    26.     for(j=n;j<na;j++)
    27.         {
    28.         if(i==(j-n)) a[i][j]=1;
    29.         else a[i][j]=0;
    30.         }
    31.  
    32. //Ham giai phuong trinh.--------------------
    33. //Dung phep BDSC dua Aij ve ma tran cheo.
    34. for(j=0;j<n;j++)
    35.     {
    36.     for(i=n-1;i>=j;i--)
    37.         {
    38.         if(a[i][j]==0) continue;//Neu phan tu a bang 0 thi tang i.
    39.         if((i>j)&&(a[i][j]!=0))
    40.             {
    41.             k=i-1;
    42.             while((k>=j)&&(a[k][j]==0)) k--;//Xet cac phan tu a khac 0 tren cung cot j
    43.             if(k<j)
    44.                 {
    45.                 //Doi cho dong thu i va j cho ca ma tran mo rong.
    46.                 for(m=0;m<na;m++)
    47.                     {
    48.                     tam=a[i][m];
    49.                     a[i][m]=a[j][m];
    50.                     a[j][m]=tam;
    51.                     }
    52.                 dau=-dau;
    53.                 }
    54.             if((k>=j)&&(k>=0))
    55.                 {
    56.                 x=-a[i][j]/a[k][j];
    57.                 //Nhan dong thu k cho x roi cong vao dong thu i.
    58.                 for(m=0;m<na;m++)
    59.                     a[i][m]+=a[k][m]*x;
    60.                 }
    61.             }
    62.         }
    63.     }
    64. for(j=n-1;j>=0;j--)
    65.     {
    66.     for(i=0;i<=j;i++)
    67.         {
    68.         if(a[i][j]==0) continue;
    69.         if((i<j)&&(a[i][j]!=0))
    70.             {
    71.             k=i+1;
    72.             while((k<=j)&&(a[k][j]==0)) k++;
    73.             if((k<=j)&&(k<na))
    74.                 {
    75.                 x=-a[i][j]/a[k][j];
    76.                 //Nhan dong thu k voi x roi cong vao dong thu i.
    77.                 for(m=0;m<na;m++)
    78.                     a[i][m]+=a[k][m]*x;
    79.                 }
    80.             }
    81.         }
    82.     }
    83. //Tinh dinh thuc.------------------------------------
    84. det=1;
    85. for(i=0;i<n;i++)
    86.     for(j=0;j<n;j++)
    87.         if(i==j) det*=a[i][j];
    88. printf("\n Det=%5.2lf",det*dau);
    89. //Tinh ma tran nghich dao.-----------------------
    90. if(det!=0)
    91.     {
    92.     for(i=0;i<n;i++)
    93.         for(j=n;j<na;j++)
    94.             {
    95.             a[i][j]=a[i][j]/a[i][i];
    96.             }
    97.  
    98.     for(i=0;i<n;i++)
    99.         for(j=n;j<na;j++)
    100.             {
    101.             b[i][j-n]=a[i][j];
    102.             }
    103.     //In ra ma tran nghich dao.-----------------
    104.     printf("\n MA TRAN NGHICH DAO CUA A:\n");
    105.     for(i=0;i<n;i++)
    106.         {
    107.         for(j=0;j<n;j++)
    108.             printf("%5.1lf",b[i][j]);
    109.         printf("\n");
    110.         }
    111.     }
    112. else printf("\n KHONG CO MA TRAN NGHICH DAO.");
    113. printf("\n GOOBYE.CHUC MOI NGUOI VUI VE!");
    114. getch();
    115. }
    116. //6:01 PM 4/22/2010
    Cám ơn thầy onminh rất nhiều.
    Mình nhập vào ma trận
    3 4 6
    -5 2 16
    2 1 -1
    nó xuất ra det=0 mà lại xuất ra ma trận nghịch đảo với các dạng mặc định của kiểu

  3. #33
    Ngày gia nhập
    08 2022
    Bài viết
    1

    Mặc định cái này chỉ áp dụng cho ma trận vuôg thôi chứ còn ma trận có độ dài cột hàng khác nhau thì làm sao bn

    [QUOTE=onminh;129098]Đây, nếu code trực tiếp thì dài dòng và khó hiểu hơn đó, chịu khó đọc nhé. Tính det theo Gauss, còn ma trận nghịch đảo theo Gauss-Jordan đó.
    [code= c++]
    #include<stdio.h>
    #include<conio.h>

    void main()
    {
    int i,j,k,n, sign = 1;
    double det = 1; double temp;
    double a[10][10],b[10][10];
    // Nhap cap cua ma tran:
    printf("\nCap cua ma tran vuon, n = "); scanf("%d",&n);

    // Nhap ma tran a:
    for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    {
    printf("a[%d][%d] = ", i, j);
    scanf("%lf",&a[i][j]);
    }

    // Tinh dinh thuc cua a
    for (i = 0; i < n-1; i++)
    {
    if (a[i][i] == 0) // Nếu gặp phần tử trên đường chéo chính bằng 0 thì tìm hàng khác để đổi
    {
    k = i+1;
    while (k < n && a[k][i] == 0) k++;
    if (k==n) { printf("\ndet(a) = 0"); break;} // Không timg thấy, tức det(a) = 0
    for (j = i; j < n; j++)// Đổi hàng i với hàng k
    {
    temp = a[i][j];
    a[i][j] = a[k][j];
    a[k][j] = temp;
    }
    sign = -sign; // Định thức đổi dấu đó
    }
    for (j = i+1; j < n; j++)// Biển đổi để các phần tử cùng cột ở hàng dưới bằng 0 đó
    {
    temp = -a[j][i]/a[i][i];
    for (k = i+1; k < n; k++) a[j][k] += temp*a[i][k]; // Nhân hàng i với (-a[j][i]/a[i][i]) rồi cộng vào hàng j
    }
    det *= a[i][i]; // Tính dần det(a)
    }

    det *= a[n-1][n-1]; // Nhân với phần tử cuối chéo chính nữa là xong
    printf("\ndet(a) = %lf\n",det);

    //Tinh ma tran nguoc
    if (det != 0)
    {
    for (i = 0; i < n; i++) // Tạo ra b là ma trận đơn vị đó
    for (j = 0; j < n; j++)
    if (i==j) b[i][j] = 1; else b[i][j] = 0;

    for (i = 0; i < n; i++) // Xử lý từ hàng đầu đến hàng cuối
    {
    if (a[i][i] == 0) // Nếu gặp phần tử trên đường chéo chính bằng 0 thì đổi hàng
    {
    k = i+1;
    while (k < n && a[k][i] == 0) k++;
    for (j = 0; j < n; j++) // Đổi hàng đó của a đó, cả với ma trận b nữa
    {
    temp = a[i][j];
    a[i][j] = a[k][j];
    a[k][j] = temp;
    temp = b[i][j];
    b[i][j] = b[k][j];
    b[k][j] = temp;
    }
    }

    temp = a[i][i];
    for (j = i; j < n; j++) a[i][j] /= temp;
    for (j = 0; j < n; j++) b[i][j] /= temp;

    for (j = i+1; j < n; j++)
    {
    temp = -a[j][i];
    for (k = i; k < n; k++) a[j][k] += temp*a[i][k];
    for (k = 0; k < n; k++) b[j][k] += temp*b[i][k];
    }
    }// Kết thúc quá trình Gauss

    for (i = n-1; i > 0; i--) // Bắt đầu quá trình Jordan
    for (j = i-1; j >=0; j--)
    {
    temp = -a[j][i];
    for (k = n-1; k >= i; k--) a[j][k] += temp*a[i][k];
    for (k = 0; k < n; k++) b[j][k] += temp*b[i][k];
    }

    for (i = 0; i < n; i++)// In ra ma trận b, bây giờ là ma trận nghich đảo của a
    {
    for (j = 0; j < n; j++) printf("%8.3lf\t", b[i][j]);
    printf("\n");
    }
    }
    else printf("\nKhong co ma tran nghich dao\n");
    getch();

Trang 4 trên tổng số 4 Đầu tiênĐầu tiên ... 234

Các đề tài tương tự

  1. Lập trình C++ định nghĩa toán tử = cho ma trận ?
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 12-10-2013, 06:24 PM
  2. Chương trình ưu đãi “công nghệ trao tay, học ngay nghề hot”
    Gửi bởi April91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 25-04-2013, 10:45 PM
  3. Tổ chức sự kiện nghề HOT của giới trẻ
    Gửi bởi lehoang2003 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-06-2012, 10:09 AM
  4. Bán nhà mặt phố Trần Đại NGhĩa chính chủ cần bán - 30/11/11
    Gửi bởi taikhoan005 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 23-12-2011, 10:53 PM
  5. Bán nhà mặt phố Trần Đại NGhĩa chính chủ cần bán
    Gửi bởi taikhoan005 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 5
    Bài viết cuối: 03-12-2011, 01:20 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn