用c中的后置替换码高斯消除

时间:2010-08-18 17:57:34

标签: c linear-algebra

任何人都可以提供一些帮助。我完全无法做到这一点。我试图做一些编码,但它根本不起作用。无论如何我已经包含了代码。反正它是不完整和错误的。

#include<stdio.h>
#include<math.h>
main()
{
  int rows, columns, iter, i,j,k;
  printf("enter the number of rows and columns:");
  scanf("%d, %d",&rows, &columns);
  double a[rows][columns], b[rows][1],x[rows][1];
  printf("enter the elements of A matrix:");
   for(i=0;i<rows;i++)
  {
    for(j=0;j<columns;j++)
    scanf("%lf",&a[i][j]);
  }
   printf("\n enter the elements of B matrix:");
  for(i=0,i<rows;i++)
  scanf("%lf",&b[i][0]);

  printf("\n");
  for (iter=1; iter<rows; iter++)
  {
    for(i=iter;i<rows;i++)

      b[i][0] = b[i][0]- a[k][iter-1]*(b[i-1][0]/a[iter-1][iter-1]);


      for(j=iter-1,k=iter;j<columns;j++)

        a[i][j] = a[i][j]-a[i-1][j]*(a[k][iter-1]/a[iter-1][iter-1]);

    }


  printf("the elements of the matrix A are now:");

  for(i=0;i<rows; i++)
  { 
    for(j=0; j<columns; j++)  
      printf("%lf",a[i][j]);
  }
  return(0);
}

此后必须进行替换。方程是[a] [x] = [b],我们必须找到给定[a]和[b]矩阵的x值。

3 个答案:

答案 0 :(得分:1)

没有人使用这样的代码,它有严重的数值稳定性问题。使用LU-decomp是一种很好的方法,可以使用许多库。数字食谱,如果必须的话。

答案 1 :(得分:0)

int rows, columns, iter, i,j,k;
printf("enter the number of rows and columns:");
scanf("%d, %d",&rows, &columns);
double a[i][j], b[i],x[i];

使用i和j指定数组大小是一个非常值得怀疑的活动,因为i和j尚未初始化。

答案 2 :(得分:0)

我注意到的第一个问题是这个循环

for(i=0;i<=columns-1;i++) 
{ 
  for(j=0;j<=columns-1;j++) 
  {  
    scanf("%lf",&a[i][j]); 
  } 
}

我猜这些columns中的一个应该是rows,而可能是i<=columns-1中使用的那个。

此外,仅仅为了i<=columns-1代替i < columns而感兴趣,它们在所有重要的情况下应该是等效的。