Jump to content

Photo

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

- - - - -

  • Please log in to reply
2 replies to this topic

#1
quanghoa

quanghoa

    Sĩ quan

  • Thành viên
  • 364 posts
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();}

Edited by quanghoa, 26-11-2009 - 21:42.

Posted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted Image

#2
vuthanhtu_hd

vuthanhtu_hd

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

  • Hiệp sỹ
  • 1189 posts
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 posts
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.

Edited by quanghoa, 27-11-2009 - 08:24.

Posted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted ImagePosted Image




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users