2 ***********************
3 * Análisis Numérico I *
4 ***********************
12 // Declaración de funciones
13 inline void generar_matriz( Matriz& );
14 inline void generar_vector( Vector& );
15 inline void generar_vector_permutaciones( VectorPermutaciones& );
16 inline void imprimir_matriz( Matriz& );
17 inline void imprimir_vector( Vector& );
18 inline void imprimir_matriz_permutada( Matriz&, VectorPermutaciones& );
19 inline void imprimir_vector_permutado( Vector&, VectorPermutaciones& );
20 inline void imprimir_matriz_L( Matriz&, VectorPermutaciones& );
21 inline void imprimir_matriz_U( Matriz&, VectorPermutaciones& );
22 inline void sustitucion_directa( Matriz&, Vector&, VectorPermutaciones& );
23 inline void sustitucion_inversa( Matriz&, Vector&, VectorPermutaciones& );
25 inline void generar_matriz( Matriz& m ) {
26 for ( Indice i = 0; i < N; i++ )
27 for ( Indice j = 0; j < N; j++ )
28 m[i][j] = Numero( rand() ) * 3.0 / RAND_MAX;
31 inline void generar_vector( Vector& v ) {
32 for ( Indice i = 0; i < N; i++ )
33 v[i] = Numero( rand() ) * 3.0 / RAND_MAX;
36 inline void generar_vector_permutaciones( VectorPermutaciones& v ) {
37 for ( Indice i = 0; i < N; i++ )
41 inline void imprimir_matriz( Matriz& m ) {
42 for ( Indice i = 0; i < N; i++ ) {
43 for ( Indice j = 0; j < N; j++ )
44 printf( "%.02f ", m[i][j] );
49 inline void imprimir_vector( Vector& v ) {
50 for ( Indice i = 0; i < N; i++ )
51 printf( "%.02f ", v[i] );
55 inline void imprimir_matriz_permutada( Matriz& m, VectorPermutaciones& p ) {
56 for ( Indice i = 0; i < N; i++ ) {
57 for ( Indice j = 0; j < N; j++ )
58 printf( "%.02f ", m[p[i]][j] );
63 inline void imprimir_vector_permutado( Vector& v, VectorPermutaciones& p ) {
64 for ( Indice i = 0; i < N; i++ )
65 printf( "%.02f ", v[p[i]] );
69 inline void imprimir_matriz_L( Matriz& m, VectorPermutaciones& p ) {
70 for ( Indice i = 0; i < N; i++ ) {
71 for ( Indice j = 0; j < N; j++ )
77 printf( "%.02f ", m[p[i]][j] );
82 inline void imprimir_matriz_U( Matriz& m, VectorPermutaciones& p ) {
83 for ( Indice i = 0; i < N; i++ ) {
84 for ( Indice j = 0; j < N; j++ )
88 printf( "%.02f ", m[p[i]][j] );
93 inline void sustitucion_directa( Matriz& A, Vector& b, VectorPermutaciones& p ) {
94 for ( Indice i = 1; i < N; i++ ) {
96 for ( Indice j = 0; j < i - 1; j++ )
97 sum += A[p[i]][j] * b[p[i]];
102 inline void sustitucion_inversa( Matriz& A, Vector& b, VectorPermutaciones& p ) {
103 for ( Indice i = N; i > 0; i-- ) {
105 for ( Indice j = i; j < N; j++ )
106 sum += A[p[i-1]][j] * b[p[j]];
107 b[p[i-1]] = ( b[p[i-1]] - sum ) / A[p[i-1]][i];