]> git.llucax.com Git - z.facultad/75.12/ejercicios.git/blob - lib.cpp
Se expanden keywords del svn.
[z.facultad/75.12/ejercicios.git] / lib.cpp
1 /* lib.h
2  **********************
3  * Análisis Numérico I
4  *---------------------
5  * Trabajo Práctico 1
6  *---------------------
7  * Para direccionar la salida a un archivo, ejecutelo con:
8  *
9  *  c4xx > [archivo]
10  *
11  *  Para compilar en *nix:
12  *
13  *  gcc -lm -Wall -O3 -o ec_lienal ec_lineal.cpp
14  *
15  *  Para debug:
16  *  gcc -lm -Wall -g3 -o ec_lienal ec_lineal.cpp
17  *
18  */
19
20 #include "lib.h"
21
22 extern void generar_matriz( Matriz& m ) {
23     for ( Indice i = 0; i < N; i++ )
24         for ( Indice j = 0; j < N; j++ )
25             m[i][j] = Numero( rand() ) * 3.0 / RAND_MAX;
26 }
27
28 extern void generar_vector( Vector& v ) {
29     for ( Indice i = 0; i < N; i++ )
30         v[i] = Numero( rand() ) * 3.0 / RAND_MAX;
31 }
32
33 extern void generar_vector_permutaciones( VectorPermutaciones& v ) {
34     for ( Indice i = 0; i < N; i++ )
35         v[i] = i;
36 }
37
38 extern void imprimir_matriz( Matriz& m ) {
39     for ( Indice i = 0; i < N; i++ ) {
40         for ( Indice j = 0; j < N; j++ )
41             printf( "%.02f ", m[i][j] );
42         printf( "\n" );
43     }
44 }
45
46 extern void imprimir_vector( Vector& v ) {
47     for ( Indice i = 0; i < N; i++ )
48         printf( "%.02f ", v[i] );
49     printf( "\n" );
50 }
51
52 extern void imprimir_matriz_permutada( Matriz& m, VectorPermutaciones& p ) {
53     for ( Indice i = 0; i < N; i++ ) {
54         for ( Indice j = 0; j < N; j++ )
55             printf( "%.02f ", m[p[i]][j] );
56         printf( "\n" );
57     }
58 }
59
60 extern void imprimir_vector_permutado( Vector& v, VectorPermutaciones& p ) {
61     for ( Indice i = 0; i < N; i++ )
62         printf( "%.02f ", v[p[i]] );
63     printf( "\n" );
64 }
65
66 extern void imprimir_matriz_L( Matriz& m, VectorPermutaciones& p ) {
67     for ( Indice i = 0; i < N; i++ ) {
68         for ( Indice j = 0; j < N; j++ )
69             if ( i < j )
70                 printf( "0.00 " );
71             else if ( i == j )
72                 printf( "1.00 " );
73             else
74                 printf( "%.02f ", m[p[i]][j] );
75         printf( "\n" );
76     }
77 }
78
79 extern void imprimir_matriz_U( Matriz& m, VectorPermutaciones& p ) {
80     for ( Indice i = 0; i < N; i++ ) {
81         for ( Indice j = 0; j < N; j++ )
82             if ( i > j )
83                 printf( "0.00 " );
84             else
85                 printf( "%.02f ", m[p[i]][j] );
86         printf( "\n" );
87     }
88 }
89
90 extern void sustitucion_directa( Matriz& A, Vector& b, VectorPermutaciones& p ) {
91     for ( Indice i = 1; i < N; i++ ) {
92         Numero sum = 0;
93         for ( Indice j = 0; j < i; j++ )
94             sum += A[p[i]][j] * b[p[j]];
95         b[p[i]] -= sum;
96     }
97 }
98
99 extern void sustitucion_inversa( Matriz& A, Vector& b, VectorPermutaciones& p ) {
100     for ( Indice i = N; i > 0; i-- ) {
101         Numero sum = 0;
102         for ( Indice j = i; j < N; j++ )
103             sum += A[p[i-1]][j] * b[p[j]];
104         b[p[i-1]] = ( b[p[i-1]] - sum ) / A[p[i-1]][i-1];
105     }
106 }