nguoicungkho_it Admin
Tổng số bài gửi : 20 Join date : 13/01/2010 Age : 34 Đến từ : UIT
| Tiêu đề: Bài Toán Định Thức! Fri 26 Feb 2010, 23:57 | |
| Bài tập tính Định thức của ma trận mọi người cho ý kiến về thuật toán nha? Hình như cái này có thuật toán đệ quy thì phải | |
|
mr.kieu Thành viên chính thức
Tổng số bài gửi : 7 Join date : 26/02/2010
| Tiêu đề: Re: Bài Toán Định Thức! Thu 11 Mar 2010, 01:00 | |
| Bài này có thể giải bằng 2 cách sau: 1. Đệ quy: Dùng khai triển theo hàng hoặc cột, như thế để tính định thức của ma trận cấp nxn thì chúng ta sẽ tính n cái định thức con cấp (n-1)x(n-1) 2. Không đệ quy: Biến đổi ma trận về dạng ma trận tam giác, sau đó định thức sẽ bằng tích của các số trên đường chéo chính. Đó là ý tưởng của mình, còn code thì mình sẽ post sau | |
|
microdao Thành viên mới
Tổng số bài gửi : 3 Join date : 15/03/2010 Age : 33 Đến từ : Bình phước
| Tiêu đề: Re: Bài Toán Định Thức! Mon 15 Mar 2010, 20:00 | |
| - Code:
-
#include "stdio.h" #include"conio.h" void nhapmat(float a[][100],int n); void xuatmat(float a[][100],int n); float det(float a[][100],int n); void main() { float a[100][100];int n; printf("\nCHAO MUNG CAC BAN DEN VOI CHUONG TRINH TINH DINH THUC"); printf("\nNhap cap cua ma tran "); scanf("%d",&n); nhapmat(a,n); printf("\n"); xuatmat(a,n); printf("\n"); printf("Dinh thuc cua ma tran La:%4.2f ",det(a,n)); printf("\nGood bye!"); getch(); } // ham nhap ma tran void nhapmat(float a[][100],int n) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { printf("a[%d][%d]= ",i+1,j+1); scanf("%f",&a[i][j]); } } //Ham xuat ma tran void xuatmat(float a[][100],int n) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) printf("%4.2f ",a[i][j]); printf("\n"); } } // ham tinh dinh thuc float det(float a[][100],int n) { int i,j,k,dem=0,kt; float b[100],h,det=1,c[100]; for(i=0;i<n-1;i++) { if(a[i][i]==0) { kt=0; for(j=0;j<n;j++) if(a[i][j]!=0) { for(k=0;k<n;k++) {// Doi cot j voi cot i c[k]=a[k][i]; a[k][i]=a[k][j]; a[k][j]=c[k]; } dem++;// dem so lan doi cot kt++;// Kiem tra xem co so 0 o dong i cot j break; } } if(kt==0) return 0; b[i]=a[i][i]; for(j=0;j<n;j++) a[i][j]=a[i][j]/b[i];//tao so 1 o dong i,cot i for(j=i+1;j<n;j++) { h=a[j][i]; for(k=0;k<n;k++) a[j][k]=a[j][k]-h*a[i][k];//lay dong thu j-h*dong i } } b[n-1]=a[n-1][n-1]; for(i=0;i<n;i++) det=det*b[i];// Nhan cac so da lay ra ngoai dinh thuc if(dem%2==0) return det; else return -det; }
| |
|
heaven_love9491 Thành viên nhiệt tình
Tổng số bài gửi : 16 Join date : 12/03/2010
| Tiêu đề: Re: Bài Toán Định Thức! Mon 15 Mar 2010, 20:04 | |
| hay z | |
|
Sponsored content
| Tiêu đề: Re: Bài Toán Định Thức! | |
| |
|