lukasz.proszek.info

Powrót do listy plików

#include "lu.h"


void croutgauss(typ **tablica,typ **L, int n_kolu, int ktora_kolumna )
{
        typ *wiersz_temp = NULL;
  typ b_temp;
        int i, j, k, wiersz;
        typ dzielnik;
//  typ **L=NULL;

        //allokacja wiersza potrzebnego do zamiany
        if( (wiersz_temp = (typ *) calloc (n_kolu,sizeof(typ))) == NULL) {
                printf("\nNieudane przydzielenie pamieci\n");
                abort();
        }
//      else   {
//              printf("\nPoprawnie przydzielilem pamiec na wiersz_temp\n");
//      }



////////crout again
//

for(i=ktora_kolumna;i<n_kolu;i++){  // eliminujemy wiersze od zadanego w dół
   L[i][ktora_kolumna]=tablica[i][ktora_kolumna]; //przepisujemy A[i][j] do L[i][j] 
                                                  //przed eliminacją
   
  }
  //dzielimy zadany wiersz przez pierwszy jego wyraz (diagonalny);
  
  dzielnik=tablica[ktora_kolumna][ktora_kolumna]; // dzielnik <- element diagonalny
    
  for(i=0;i<n_kolu; i++){
    tablica[ktora_kolumna][i] /= dzielnik;   //dzielimy cały iwersz przez dzielnik
  }

//  printf("\n[corutgauss] wywalimy se macierz\n");
//  for(i=0;i<n_kolu;i++){
//     for(j=0;j<n_kolu;j++){
//        printf("%f\t",tablica[i][j]);
//     }
//     printf("|");
 //    for(j=0;j<n_kolu;j++){
  //      printf("%f\t",L[i][j]);
   //  }
//     printf("\n");
//  }
 
  //teraz bedziem eliminować
  for(i=ktora_kolumna+1;i<n_kolu;i++){ //dla każdego wiersza od wskazanego
    
//     dzielnik = tablica[i][ktora_kolumna];
     for(j=(n_kolu-1);j>=0;j--){ //idziemy po kolumnach
     //   tablica[i][j] -= tablica[i][ktora_kolumna]*tablica[ktora_kolumna][j];
      tablica[i][j] -= tablica[i][ktora_kolumna] * tablica[ktora_kolumna][j]; 
     }
  }
  
////////end of crout again
  
  /* dzielimy przez wyraz diagonalny */
/*  dzielnik=tablica[ktora_kolumna][ktora_kolumna]; // dzielnik <- element diagonalny
    
  for(i=ktora_kolumna;i<n_kolu; i++){
    tablica[ktora_kolumna][i] /= dzielnik;   //dzielimy cały iwersz przez dzielnik
  }
  
  //podzielono...

  for(i=ktora_kolumna;i<n_kolu; i++){
//    if(i!=ktora_kolumna){
       dzielnik= tablica[i][ktora_kolumna]; 
       L[i][ktora_kolumna]=dzielnik;
       for(j=0;j<i; j++){

//       printf("dzielnik[%i][%i]= %f\n",i,j,dzielnik);
          tablica[i][j] -=dzielnik*tablica[ktora_kolumna][j]; 
//          printf ("i = %i ",i);
       }
//    }
  }
*/  
  for(i=0;i<n_kolu;i++){
     for(j=0;j<n_kolu;j++){
        printf("%f\t",tablica[i][j]);
     }
     printf("|");
     for(j=0;j<n_kolu;j++){
        printf("%f\t",L[i][j]);
     }
     printf("\n");
  }
  
        //dealokacja wiersza
        free(wiersz_temp);  
//  free(b_temp);
}




syntax highlighted by Code2HTML, v. 0.9.1
kod przerobiony z HTML na XHTML za pomocą HTML Tidy for Linux/x86