Jump to content


Hình ảnh

Giải hệ phương trình đại số tuyến tính theo phương pháp Gauss


  • Please log in to reply
5 replies to this topic

#1 No Name

No Name

    Mới gia nhập

  • Thành viên
  • Pip
  • 9 bài viết

Gửi lúc 19 Apr 2006 - 09:50 PM

Chào các bạn.Giải hệ phương trình đại số tuyến tính theo phương pháp Gauss bằng lập trình C ấy.
Ai biết thì giúp mình nhé! :rolleyes:
  • 0

#2 friend_forever

friend_forever

    Mới gia nhập

  • Thành viên
  • Pip
  • 5 bài viết

Gửi lúc 22 Apr 2006 - 01:26 AM

Mình trình bày thuật toán nhé:
+Đầu tiên phải có một ma trận a[n][n+1] đê lưu hệ số của mỗi phương trình, cột cuối cùng là cột hệ số tự do.
Tức là phương trình thứ i có dạng : a[i][1].x1+a[i][2].x2+...+a[i][n].xn=a[i][n+1];
+Ta tiến hành chéo hóa ma trận: (giống như chúng ta làm trong đại số)
for (i = 1; i < n; i++) {
find_row(j);// Tìm hàng đầu tiên có hệ số a[temp][temp] khác 0;
if (j>0) {
if (j != i) doi_cho(i,j); // Đổi chỗ hai hàng i và hàng j
for (j=i+1; j<= n; j++) {
temp = -a[j][i]/a[i][i]; // Nhớ hệ số nhân vào hàng thứ j rồi cộng với hàng thứ i
để triệt tiêu được hệ số a[j][i];
for (k=i; k<=n; k++) a[j][k] = a[j][k] + a[i][k] * temp;
}
}
}
+ Cuối cùng ta được ma trận đã được chéo hoá, việc giải ngược lại là hoàn toàn đơn giản
:-B

  • 0

#3 No Name

No Name

    Mới gia nhập

  • Thành viên
  • Pip
  • 9 bài viết

Gửi lúc 22 Apr 2006 - 03:47 PM

Cảm ơn ban nhé :* :huh: :*
  • 0

#4 telecom

telecom

    Thành viên tích cực

  • Thành viên
  • PipPipPip
  • 178 bài viết
  • Giới tính:Nam

Gửi lúc 31 May 2006 - 03:51 AM

code cụ thể.
#include <stdio.h>
#include <math.h>

#define MAX 10
double A[MAX][MAX], B[MAX][MAX], X[MAX][MAX];

void gauss_jordan(int n, int p)
{
int i=0, j, done=0, m, k;
double max, c;
printf("\nTinh nghiem cua he phuong trinh");
while (!done)
{
if (A[i][i] == 0)
{
max = 0;
m = i;
for (k=i+1; k<n; k++)
if (max < fabs(A[k][i]))
{
m = k;
max = fabs(A[k][i]);
}
if (m != i)
{
for (j=i; j<n; j++)
{
c = A[i][j];
A[i][j] = A[m][j];
A[m][j] = c;
}
for (j=0; j<p; j++)
{
c = B[i][j];
B[i][j] = B[m][j];
B[m][j] = c;
}
}
if (m == i)
done = 1;
}
if (A[i][i] != 0)
{
c = 1/A[i][i];
for (j=i; j<n; j++)
A[i][j] = A[i][j] * c;
for (j=0; j<p; j++)
B[i][j] = B[i][j] * c;
for (k=0; k<n; k++)
if (k != i)
{
c= A[k][i];
for (j=i; j<n; j++)
A[k][j] = A[k][j] - A[i][j]*c;
for (j=0; j<p; j++)
B[k][j] = B[k][j] - B[i][j] * c;
}
}
printf("\nLan khu hang %d", i);
for (k=0; k<n; k++)
{
printf("\n");
for (j=0; j<n; j++)
printf("%10.5lf", A[k][j]);
for (j=0; j<p; j++)
printf(" = %10.5lf", B[k][j]);
}
i++;
if (i>=n)
done = 1;
}
if (i >= n)
for (j=0; j<n; j++)
for (k=0; k<p; k++)
X[j][k] = B[j][k];
}

void in_A(int n)
{
int i, j;
printf("\nMa tran A :");
for (i=0; i<n; i++)
{
printf("\n");
for (j=0; j<n; j++)
printf("%10.5lf", A[i][j]);
}
}

void in_B(int n, int p)
{
int i, j;
printf("\nMa tran B :\n");
for (i=0; i<n; i++)
{
printf("\n");
for (j=0; j<p; j++)
printf("%10.5lf", B[i][j]);
}
}

void in_X(int n, int p)
{
int i, j;
printf("\nMa tran nghiem X :\n");
for (i=0; i<n; i++)
{
printf("\n");
for (j=0; j<p; j++)
printf("%10.5lf", X[i][j]);
}
}

void main()
{
int n, i, j, p;

printf("Giai he phuong trinh tuyen tinh AX = B.");
printf("\nbang phuong phap khu GAUSS.");
printf("\nCho biet cap ma tran : ");
scanf("%d%*c", &n);
printf("\nCho biet cap ma tran B : ");
scanf("%d%*c", &p);
printf("\nNhap ma tran A :\n");
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
printf("A[%d][%d] = ", i, j);
scanf("%lf", &A[i][j]);
}
printf("\nNhap ma tran B :\n");
for (i=0; i<n; i++)
for (j=0; j<p; j++)
{
printf("B[%d][%d] = ", i, j);
scanf("%lf", &B[i][j]);
}
in_A(n);
in_B(n, p);
gauss_jordan(n, p);

in_X(n, p);
getch();
}
  • 0

#5 No Name

No Name

    Mới gia nhập

  • Thành viên
  • Pip
  • 9 bài viết

Gửi lúc 07 Jun 2006 - 08:23 PM

[COLOR=blue][SIZE=7][FONT=Times] Thank you nhé
  • 0

#6 No Name

No Name

    Mới gia nhập

  • Thành viên
  • Pip
  • 9 bài viết

Gửi lúc 07 Jun 2006 - 08:24 PM

Bài viết rất hay và giúp mình rất nhiều. Cảm ơn bạn nhé và chúc bạn luôn thành công
  • 0




0 người đang đọc chủ đề này

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