Operacje na macierzach

0

Witam wszystkich.

Mam problem z funkcja odwracajaca macierz metoda eliminacji Gaussa. Chodz o to ze gdy chce dopisac do macierzy odwracanej macierz jednostkową zgodnie z algorytmem prosta funkcja oparta na 2 petlach chrzani mi ta macierz wyjsciową i nie wiem dlaczego. Prosze o jakas wskazówke co robie tutaj zle albo jak to mozna by inaczej zrobic. Z góry dziekuje.

[URL=http://img863.imageshack.us/i/beztytuutw.jpg/][IMG]http://img863.imageshack.us/img863/8754/beztytuutw.jpg[/IMG][/URL]

0

user image

0

Pytanie 1: czemu wyświetlasz 9 kolumn tablicy MATRIX, a nie 10?
Pytanie 2: czy liczba kolumn w tablicy MATRIX nie jest za mała? Po danych wyjściowych mogę się domyślać, że MATRIX ma tylko 8 kolumn, potrzemne zaś 10.

0

Witam

Wyswietlam 10 tylko cos wcieło przy robieniu screena

 for (i=0;i<n;i++)
    for (j=0;j<n;j++)
    
if (i==j) 
MATRIX[i][n+j] = 1;
else 
MATRIX[i][n+j] = 0;


fprintf(stream,"\n\nMacierz kontrolna5max \n");   
for(i=0;i<n;i++){
fprintf(stream ,"\n");                 
    for(j=0;j<n*2;j++){
     
      fprintf(stream,"%5g ",MATRIX[i][j]);
    printf("\n");
    }
}

user image

Dane do macierzy wejsciowej wczytywane są z pliku. Problem polega na tym dlaczego przy dodaniu tej macierzy jednostkowej z prawej strony pojawiają sie 0 i 1 w macierzy wyjsciowej z lewej strony. Cały program muszę napisać do soboty wiec bede widzieczny za kazdą wskazówke.

0

Pokombinowałem z tym co powiedziałes o ilosci kolumn.

 malloc((2*n)* sizeof(float));

pomogło dzieki

0

Wita. Znów prosze o pomoc bo teraz utknałem w innym nmiejscu. Po dodaniu macierzy jednostkowej z prawej strony jest taka o to macierz:

user image

Po Podzieleniu wierszy macierzy przez odpowiednie elementy otrzymalem 1 na przekotnej macierzy głównej i to jest ok, ale potem zgodnie z algorytmem Gaussa- Jordana trzeba wyzerowac pozostale elementy w kolumnach. I tu niby proste ale wynik niezadawalajacy.

for (i=0;i<n;i++) 
   
      
    {
       MATRIXTEMP=MATRIX[i][i];
       for (j=0;j<n*2;j++) 
           {
            MATRIX[i][j]= (MATRIX[i][j]/ MATRIXTEMP);  
           }
           for (int k=0;k<n;k++)
           {
            MATRIXTEMP=MATRIX[k][i];
                                                                         
            if (k!=i)
               { 
               for (j=0;j<n*2;j++);
               MATRIX[k][j]=MATRIX[k][j]-(MATRIXTEMP*MATRIX[i][j]);   
              
               }
           }          
    
       };                 

fprintf(stream,"\n\nMacierz wyjsciowa \n");   
for(i=0;i<n;i++){
fprintf(stream ,"\n");                 
    for(j=0;j<n*2;j++){
     
      fprintf(stream,"%10f ",MATRIX[i][j]);
    
    }
} 

user image

Z góry dziekuje za pomoc

0

Widze ze chyba nikt nie wie jak to zrobic wiec prosze zamknąc temat

1 użytkowników online, w tym zalogowanych: 0, gości: 1