Đến nội dung

Hình ảnh

Cho hỏi tí về tính định thức ma trận

- - - - -

  • Please log in to reply
Chủ đề này có 2 trả lời

#1
quanghoa

quanghoa

    Sĩ quan

  • Thành viên
  • 364 Bài viết
Mình định làm một chương trình để tính định thức ma trận theo công thức khai triển dạng . $a_{11}a_{22}-a_{12}a_{21}$ Bậc 3$ a_{11}a_{22}a_{33} + a_{12}a_{23}a_{21} + a_{13}a_{21}a_{32} - a_{13}a_{22}a_{31} - a_{12}a_{21}a_{33} - a_{11}a_{23}a_{32}$, Nhưng đang làm thì ngớ ra, mình không nhớ cách xác định dấu các số hạng. Chẳng hạn $a_{12}a_{21}a_{33}$ sẻ là cộng vào hay trừ đi. Tất nhiên, bậc 2, bậc 3 thì vậy rồi nhưng mình cần tổng quát để tính bậc n cơ. Ai có biết chỉ cho mình với, thanks so much !!!!!!! :pi
Chương trình mình mình viết đang dở dang như thế này. Tại không biết lúc nào thì s+=k, lúc nào thì s-=k
#include<stdio.h>#include<conio.h>int a[101][101],x[101],n;void input(){	FILE *fp=fopen("data.txt","r");	fscanf(fp,"%d",&n);	for(int i=1;i<=n;i++){		for(int j=1;j<=n;j++){			fscanf(fp,"%d",&a[i][j]);			printf("%d  ",a[i][j]);		}		printf("\n");	}	fclose(fp);}void swap(int *x,int *y){	int k=*x;	*x=*y;	*y=k;}int process(){	int i,j,k,p;	for(i=n-1;i>=1;i--)if(x[i+1]>x[i])break;	if(i==0)return 0;	for(j=n;j>i;j--)if(x[j]>x[i])break;	swap(&x[i],&x[j]);i++;	for(j=i;j-i<n-j;j++)swap(&x[j],&x[n-j+i]);	return 1;}int calDet(){	int i,j,k=0,s=0;	printf("\n\n");	for(i=1;i<=n;i++)x[i]=i;	do{		for(i=1,k=1;i<=n;i++){			if((x[i]+i)&1)k*=-a[x[i]][i];			else k*=a[x[i]][i];			printf("%d",a[x[i]][i]);			if(i<n)printf("*");		}		s+=k;		printf("-->%d\n",k);	}while(process());	return s;}void main(){	clrscr();	input();	printf("\n%d",calDet());	getch();}

Bài viết đã được chỉnh sửa nội dung bởi quanghoa: 26-11-2009 - 21:42

Hình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửi

#2
vuthanhtu_hd

vuthanhtu_hd

    Tiến sĩ Diễn Đàn Toán

  • Hiệp sỹ
  • 1189 Bài viết
Tặng bạn chương trình tính định thức cấp n

#include <stdio.h>
#include<conio.h>
void lay_ra&#40;int b&#91;&#93;,int a&#91;&#93;,int N,int c&#41;
{
		 int i,j,m=0;
		 for &#40;i=1;i<N;i++&#41;
				 for &#40;j=0;j<N;j++&#41;
				 {
						 if &#40;j==c&#41; continue;
						 b&#91;m++&#93;=a&#91;i*N+j&#93;;	   
				 }
}
int dinh_thuc&#40;int a&#91;&#93;,int n&#41;
{
		int t=0,i,d=1,b&#91;100&#93;;
		if &#40;n==1&#41;
		   return a&#91;0&#93;;
		for &#40;i=0;i<n;i++&#41;
		{
				lay_ra&#40;b,a,n,i&#41;;
				t+=a&#91;i&#93;*dinh_thuc&#40;b,n-1&#41;*d;
				d=-d;
		}
		return t;
}
int main&#40;&#41;
{
		printf&#40;&#34;Dinh thuc cap&#58;&#34;&#41;;
		int n,i,j,a&#91;200&#93;,m=0;
		scanf&#40;&#34;%d&#34;,&n&#41;;
		for &#40;i=0;i<n;i++&#41;
				for &#40;j=0;j<n;j++&#41;
						scanf&#40;&#34; %d&#34;,&a&#91;m++&#93;&#41;;			  
		for &#40;i=0;i<n;i++&#41;
		{
				for &#40;j=0;j<n;j++&#41;
						printf&#40;&#34;%3d&#34;,a&#91;n*i+j&#93;&#41;;
				printf&#40;&#34;\n&#34;&#41;;	  
		}
		printf&#40;&#34;\n Dinh thuc = %d\n\n&#34;,dinh_thuc&#40;a,n&#41;&#41;;
		getch&#40;&#41;;
}

Nếu một ngày bạn cảm thấy buồn và muốn khóc,hãy gọi cho tôi nhé.
Tôi không hứa sẽ làm cho bạn cười nhưng có thể tôi sẽ khóc cùng với bạn.
Nếu một ngày bạn muốn chạy chốn tất cả hãy gọi cho tôi.
Tôi không yêu cầu bạn dừng lại nhưng tôi sẽ chạy cùng với bạn.
Và nếu một ngày nào đó bạn không muốn nghe ai nói nữa,hãy gọi cho tôi nhé.
Tôi sẽ đến bên bạn và chỉ im lặng.
Nhưng nếu một ngày bạn gọi đến tôi mà không thấy tôi hồi âm...
Hãy chạy thật nhanh đến bên tôi vì lúc đó tôi mới là người cần bạn.

______________________
__________________________________
Vu Thanh TuUniversity of Engineering & Technology


#3
quanghoa

quanghoa

    Sĩ quan

  • Thành viên
  • 364 Bài viết
Cảm ơn, chương trình tính định thức thì đâu có khó. Nhưng mình đang muốn làm càng nhiều cách càng tốt. Bài trên sử dụng đệ quy nhằn biến đổi đưa về định thức cấp 1, nhìn code tương đối tốt. Tuy nhiên, chắc chương trình sẻ chạy tương đối chậm khi n lớn.

Bài viết đã được chỉnh sửa nội dung bởi quanghoa: 27-11-2009 - 08:24

Hình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửi




1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh