Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Ai giúp em thuật toán với em nghĩ hoài không ra


  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nhân ma trận thì đơn giản rồi, cậu có thể tự vẽ ra là thấy được. Tính định thức và in ra ma trận nghịch đảo thì tham khảo nhiều bài trên congdongcviet.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cảm ơn bạn
    Nhưng mình đã tham khảo nhiều trang web nhưng chủ yếu toàn viết code mà mình đọc thì không hiểu lắm
    Mình muốn tham khảo thuật toán để làm
    nếu bạn biết thuật toán giải thì chỉ giúp mình với

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chỉ đọc thôi đố ai mà hiểu được, tớ cũng vậy. Lấy giấy bút ra chọn vài cái ma trận, chạy bằng tay theo code, tí tự khắc hiểu.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    P/s: Code này mình tham khảo rồi nhưng ko hiểu 1 số chỗ mình đã nêu cuối bài này
    bạn đọc và chỉ giúp mình là tại sao nó lại phải so sánh và gán như thế
    ------------------------------------------------------------------------------
    #include<stdio.h>
    #include<conio.h>
    #include<iostream>

    int 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("
    Cap cua ma tran vuong, 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]);
    }
    //in ma tran
    for (i = 0; i < n; i++)
    {
    for (j = 0; j < n; j++)
    {
    printf(" ");
    printf("%1.0f",a[i][j]);
    printf(" ");
    }
    printf("
    ");
    }
    // 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 du?ng chéo chính b?ng 0 thì tìm hàng khác d? d?i
    {
    k = i+1;
    while (k < n && a[k][i] == 0) k++;
    if (k==n) {
    printf("
    det(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 d?i d?u dó
    }
    for (j = i+1; j < n; j++)// Bi?n d?i d? các ph?n t? cùng c?t ? hàng du?i b?ng 0 dó
    {
    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]*sign; // Tính d?n det(a)
    }

    det *= a[n-1][n-1]*sign; // Nhân v?i ph?n t? cu?i chéo chính n?a là xong
    printf("
    det(a) = %lf
    ",det);

    //Tinh ma tran nguoc
    if (det != 0)
    {
    for (i = 0; i < n; i++) // T?o ra b là ma tr?n don v? dó
    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 d?u d?n hàng cu?i
    {
    if (a[i][i] == 0) // N?u g?p ph?n t? trên du?ng chéo chính b?ng 0 thì d?i hàng
    {
    k = i+1;
    while (k < n && a[k][i] == 0) k++;
    for (j = 0; j < n; j++) // Ð?i hàng dó c?a a dó, 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 d?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 d?o c?a a
    {
    for (j = 0; j < n; j++) printf("%8.3lf\t", b[i][j]);
    printf("
    ");
    }
    }
    else printf("
    Khong co ma tran nghich dao
    ");
    getch();
    }
    ---------------------------------------------------------------------------------------
    Mình đã xem và nghiên cứu code này nhưng ko hiểu được chỗ
    if (a[i][i] == 0) // N?u g?p ph?n t? trên du?ng chéo chính b?ng 0 thì tìm hàng khác d? d?i
    {
    k = i+1;
    while (k < n && a[k][i] == 0) k++;
    if (k==n) {
    printf("
    det(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;
    }

    mong bạn chỉ giúp

  6. #6
    Mà chủ thớt có học môn Đại số tuyến tính ko [IMG]images/smilies/smile.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •