#include "MyLib.h"Idź do kodu źródłowego tego pliku.
Funkcje | |
| void | WyswietlMacierzInd (int n, int m, double A[][matrix_M], int P[]) |
| void | WyswietlWiersz (int m, double w[]) |
| double | ObliczWyznacznik (int *row, int P[], int n, int m, double A[][matrix_M]) |
| int | main () |
Zmienne | |
| const char | det_naF [] = "A.dat" |
| int main | ( | ) |
Definicja w linii 106 pliku detMac.c.
Odwołuje się do det_naF, matrix_M, matrix_N, ObliczWyznacznik(), OdczytMacierzy(), WyswietlMacierz() i WyswietlMacierzInd().
00107 { 00108 double det,A[matrix_N][matrix_M]; 00109 int n,m,P[matrix_N],row; 00110 00111 OdczytMacierzy(det_naF, &n, &m, A); 00112 printf("wczytana macierz: \"%s\"\n", det_naF); 00113 WyswietlMacierz(n, m, A); 00114 det = ObliczWyznacznik(&row, P, n, m, A); 00115 if( row!=n ) 00116 { 00117 printf("Macierz \"%s\" jest osobliwa\n", det_naF); 00118 exit(-1); 00119 } 00120 puts("-----------------------------"); 00121 printf("wyznacznik: %16le\n", det); 00122 puts("-----------------------------"); 00123 puts("Wynikowa macierz gornotrojkatna:"); 00124 WyswietlMacierzInd(n, m, A, P); 00125 puts("\nBez uwzglednienia przestawien wierszy:"); 00126 WyswietlMacierz(n, m, A); 00127 puts("\nPermutacja wierszy:"); 00128 for(row=0; row<n; row=row+1) 00129 { 00130 printf("%2i ",row+1); 00131 } 00132 puts(""); 00133 for(row=0; row<n; row=row+1) 00134 { 00135 printf("%2i ",P[row]+1); 00136 } 00137 puts(""); 00138 return 0; 00139 }
| double ObliczWyznacznik | ( | int * | row, | |
| int | P[], | |||
| int | n, | |||
| int | m, | |||
| double | A[][matrix_M] | |||
| ) |
obliczenie wyznacznika metoda eleminacji Gaussa (Gaussian elimination),
| P | opisuje zamiane wierszy, | |
| row | okresla wiersz do ktorego metoda "doszla". |
Definicja w linii 52 pliku detMac.c.
Odwołuje się do matrix_N.
Odwołania w main().
00053 { 00054 double d[matrix_M],det; 00055 int i,j; 00056 00057 for(i=0; i<matrix_N; i=i+1) 00058 { 00059 P[i] = i; 00060 } 00061 det = 1.0; 00062 for(*row=0; *row<n; *row=*row+1) 00063 { 00064 if( fabs(A[P[*row]][*row])<=1.0e-100 ) 00065 { 00066 for(i=*row+1; i<n; i=i+1 ) 00067 { 00068 if( 1.0e-100<fabs( A[P[i]][*row] ) ) 00069 { 00070 j = P[*row]; 00071 P[*row] = P[i]; 00072 P[i] = j; 00073 det = -det; 00074 break; 00075 } 00076 } 00077 if( i==n ) 00078 { 00079 for(i=0; i<*row-1; i=i+1) 00080 { 00081 det = A[P[i]][i]*det; 00082 } 00083 return det; 00084 } 00085 } 00086 for(i=*row+1; i<m; i=i+1) 00087 { 00088 d[i] = A[P[*row]][i]/A[P[*row]][*row]; 00089 } 00090 for(j=*row+1; j<n; j=j+1) 00091 { 00092 for(i=*row+1; i<m; i=i+1) 00093 { 00094 A[P[j]][i] = A[P[j]][i]-d[i]*A[P[j]][*row]; 00095 } 00096 A[P[j]][*row] = 0.0; 00097 } 00098 } 00099 for(i=0; i<n; i=i+1) 00100 { 00101 det = A[P[i]][i]*det; 00102 } 00103 return det; 00104 }
| void WyswietlMacierzInd | ( | int | n, | |
| int | m, | |||
| double | A[][matrix_M], | |||
| int | P[] | |||
| ) |
wyswietlenie macierzy z uwzglednieniem permutacji wierszy
| P | permutacja wierszy |
Definicja w linii 22 pliku detMac.c.
Odwołania w main().
00023 { 00024 int i,j; 00025 00026 for(i=0; i<n; i=i+1) 00027 { 00028 for(j=0; j<m; j=j+1) 00029 { 00030 printf("%6.2lf ",A[P[i]][j]); 00031 } 00032 printf("\n"); 00033 } 00034 }
| void WyswietlWiersz | ( | int | m, | |
| double | w[] | |||
| ) |
| const char det_naF[] = "A.dat" |
1.5.8