Dev - C++ - Metodo de Gauss en matriz Cuadrada

 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido su posición en 8 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Metodo de Gauss en matriz Cuadrada

Publicado por taylor (3 intervenciones) el 04/03/2021 19:08:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
 
int main() {
	int M[3][3]={{2, 4, -6}, {1, 5, 3}, {1, 3, 2}};
	int n, mult;
	n=3;
	cout << "Matriz: " << endl;
	for (int i = 0; i < n; i++)	{
		for (int j = 0; j < n; j++)
			cout << M[i][j] << "\t";
			cout << "\n";
	}
	for (int i=0; i<n; i++){
		for (int j=i+1; j<n; j++){
			mult=M[j][i]/M[i][i];
			for (int k=i; k<n; k++){
				M[j][k]=M[j][k]-mult*M[i][k];
			}
		}
	}
	cout << "Matriz escalonada: " << endl;
	for (int i=0; i<n; i++){
		for (int j=i+1; j<n; j++){
			for(int k=i; k<n; k++){
				cout << M[j][k] << "\t";
				cout << "\n";
			}
		}
	}
	return 0;
}
Este es el codigo que realice para calcular la matriz escalonada de una matriz x, pero no funciona, alguien podria guiarme?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Metodo de Gauss en matriz Cuadrada

Publicado por Alfil (1444 intervenciones) el 04/03/2021 21:15:46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
void leerDatos( double **M, int fil, int col, double B[] );
void gaussEliminacion( double **M, int fil, int col, double v[] );
void intercambiarFilas( double **M, int col, int k, int max );
void imprimirMatriz( double **M, int fil, int col, double v[] );
void imprimirSolucion( double v[], int fil );
 
int main()
{
    int fil, col;
 
    cout << "\nNumero de variables: ";
    cin >> fil;
    col = fil;
 
    double** A = new double*[fil];
    for( int i = 0; i < fil; i++ )
        A[i] = new double[col];
 
    double B[fil];
 
    leerDatos( A, fil, col, B );
    imprimirMatriz( A, fil, col, B );
    gaussEliminacion( A, fil, col, B );
 
    return 0;
}
 
void leerDatos( double **A, int fil, int col, double B[] )
{
    cout << "\nIntroduzca coeficientes de la ecuacion:\n";
    for( int i = 0; i < fil; i++ ){
        cout << "\nFila " << i + 1 << ":\n";
        for( int j = 0; j < col; j++ ) {
            cout << "Columna " << j + 1 << ": ";
            cin >> A[i][j];
        }
    }
    cout << "\nIntroduzca igualdad de la ecuacion:\n";
    for(int i = 0; i < fil; i++ ){
        cout << "Fila " << i + 1 << ": ";
        cin >> B[i];
    }
}
 
void gaussEliminacion( double **A, int fil, int col, double B[] )
{
    int max;
    int N = fil;
    double factor, temp;
 
    for( int k = 0; k < N; k++ ){
        max = k;
        for( int i = k + 1; i < N; i++ )
            if( abs( A[i][k] ) > abs( A[max][k] ) )
                max = i;
 
        intercambiarFilas( A, col, k, max );
        temp = B[k];
        B[k] = B[max];
        B[max] = temp;
 
        for( int i = k + 1; i < N; i++ ) {
            factor = A[i][k] / A[k][k];
            B[i] -= factor * B[k];
 
            for( int j = k; j < N; j++ )
                A[i][j] -= factor * A[k][j];
 
        }
    }
    imprimirMatriz( A, fil, col, B );
 
    double solucion[fil] = { 0.0 };
    double suma;
 
    for (int i = N - 1; i >= 0; i-- ){
 
        suma = 0.0;
 
        for( int j = i + 1; j < N; j++ )
            suma += A[i][j] * solucion[j];
 
        solucion[i] = (B[i] - suma) / A[i][i];
 
    }
    imprimirSolucion( solucion, fil );
}
 
void intercambiarFilas( double **M, int col, int k, int max )
{
    double temp[col];
 
    for( int i = k; i < col; i++ ) {
        temp[i] = M[k][i];
        M[k][i] = M[max][i];
        M[max][i] = temp[i];
    }
}
 
void imprimirMatriz( double **M, int fil, int col, double v[] )
{
    cout << setprecision(3) << fixed;
    cout << "\nMatriz:\n";
    for( int i = 0; i < fil; i++){
        for( int j = 0; j < col; j++){
            cout << setw(7) << M[i][j] << " ";
        }
        cout << "| " << setw(7) << v[i] << "\n";
    }
    cout << "\n";
}
 
void imprimirSolucion( double v[], int fil )
{
    cout << "\nSolucion: ";
    for( int i = 0; i < fil; i++ )
        cout << "\nX" << i + 1 << ": "
             << setw(7) << v[i];
 
    cout << endl;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar