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
Materiały z Metod Numerycznych udostępnione zostały na zasadach licencji GPL w wersji 2.