Strona 1 z 1

Eliminacja Gaussa w C

: 17 wrz 2008, o 16:58
autor: gawi
Mam takiego gotowca:

Kod: Zaznacz cały

1   Algorytm eliminacji Gaussa; wektoryzacja macierzy
void transfMM(double *A , double *B, int dim) {
  int ii,i,j,k;
  double w;
  for (i=1; i<dim; i++)
  {
     for (ii=i; ii<dim; ii++)
     {
        w = A[ii*dim+i-1]/ A[(i-1)*dim+i-1];
        B[ii] -= w*B[i-1];
        for (j=i; j<dim; j++)
            A[ii*dim+j] -= w* A[(i-1)*dim+j];
        A[ii*dim+i-1] =0; /* <-- niepotrz. */
     }
  }
}
void revPass_A_X_B(double *A , double *X,
                   double *B, int dim)
{
  int i,j;
  for (i=dim-1; i>=0; i--)
  {
     X[i] = 0; j=i+1;
     while(j<dim)
         { X[i]+= A[i*dim+j]*X[j]; j++; }
     X[i] = (B[i] - X[i])/A[i*dim+i];
  }
}
Wiem co to jest eliminacja gaussa jednak za chiny jakoś nie mogę zrozumieć co te funkcje robią. Co musi być w tablicy A,B i X? Próbowałem jakieś losowe macierze wrzucać do tych funkcji jednak to wszystko wychodzi jakoś bez sensu, próbowałem analizować to w debuggerze i też sensu większego w tym nie widzę.

A co wy o tym sądzicie?
Aha no i nigdy nie spotkałem się z terminem "wektoryzacja macierzy" wiecie co to?

Eliminacja Gaussa w C

: 24 wrz 2008, o 16:47
autor: Fibik
Układ równań:
A * X = B;

double *A, *B, *X;

A = new double[dim*dim]; // i tu wpisujemy współczynniki,
B =new double[dim]; // tu wyrazy wolne
A = new double[dim];// a tu będzie rozwiązanie układu równań.

w C zamiast new używamy malloc, lub coś tam...

Np. mamy układ:
2x - 3y = 1
-x - 4y = -7

czyli: dim = 2,
trzeba wpisać w te tablice: A = {2,-3,-1,-4}, B = {1,-7};
a wpisujemy np. tak: A[0] = 2; A[1] = ...

Eliminacja Gaussa w C

: 30 wrz 2008, o 10:55
autor: gawi
dzięki, już mi to działa