Álgebra y Matemática Discreta
Enviado por Ana Junquera Vara • 20 de Noviembre de 2023 • Apuntes • 649 Palabras (3 Páginas) • 49 Visitas
Asignatura | Datos del alumno | Fecha |
Álgebra y Matemática Discreta | Apellidos: JUNQUERA VARA | 08/01/2023 |
Nombre: ANA |
Laboratorio. Implementación del método de eliminación gaussiana por el método del pivotaje parcial escalado
El siguiente algoritmo resuelve un sistema de ecuaciones lineales del tipo
E1: A[1,1] X[1] + A[1,2] X[2] +...+ A[1,n] X[n] = A[1,n+1]
E2: A[2,1] X[1] + A[2,2] X[2] +...+ A[2,n] X[n] = A[2,n+1]
…..
EN: A[n,1] X[1] + A[n,2] X[2] +...+ A[n,n] X[n] = A[n,n+1]
mediante el método de eliminación parcial con pivotaje escalado.
Input:
- número de incógnitas de la ecuación
- valores de las incógnitas y términos independientes
Output:
- Solución del sistema
- Incógnita 1: X1, Incógnita 2: X2, Incógnita N: XN.
CÓDIGO:
int main()
{
// Declaracion de variables
int n,j,i,k;
float matriz[10][10],pivote,solucion[10]={0};
// Pedimos el numero de incognitas del sistema
cout<<"Introduce el numero de incognitas: ";
cin>>n;
// Pedimos los valores del sistema de acuaciones para construir la matriz
cout<<"Introduce los valores de cada ecuacion \n";
for(i=0;i<n;i++) {
cout<<"Ecuacion "<<i+1<<"\n";
for(j=0;j<=n;j++) {
cout<<"Valor "<<j+1<< ": ";
// Guardamos los valores en la matriz
cin>>matriz[i][j];
}
}
// Recorro la matriz y reordeno sus filas en funcion de sus coeficientes
for(i=n-1;i>0;i--) {
// Selecciono la fila con los valores mas altos
if(matriz[i-1][0]<matriz[i][0])
for(j=0;j<=n;j++) {
pivote=matriz[i][j];
matriz[i][j]=matriz[i-1][j];
matriz[i-1][j]=pivote;
}
}
//Muestro la matriz reordenada
cout<<"La matriz reordenada es:" "\n";
for(i=0;i<n;i++) {
for(j=0;j<=n;j++){
printf("%6.1f",matriz[i][j]);
}
printf("\n");
}
//Pivotaje parcial escalado: recorro la matriz y convierto en 0 los valores por debajo de la diagonal principal
for(k=0;k<n-1;k++) {
for (i=k;i<n-1;i++) {
pivote=(matriz[i+1][k]/matriz[k][k]);
for (j=0; j<=n;j++) {
matriz[i+1][j]-= pivote*matriz[k][j];
}
}
}
// Muestro la matriz tras aplicar el pivotaje
cout<<"Tras el pivotaje la matriz es:" "\n";
for(i=0;i<n;i++) {
for(j=0;j<=n;j++){
printf("%6.1f",matriz[i][j]);
}
printf("\n");
}
// Sustituyo los valores de las incognitas para resolver el sistema
for(i=n-1;i>=0;i--) {
pivote=0;
for(j=i;j<=n-1;j++){
pivote=pivote+matriz[i][j]*solucion[j];
}
solucion[i]=(matriz[i][n]-pivote)/matriz[i][i];
}
// Muestro la solucion del sistema de ecuaciones
printf("Solucion del sistema" "\n");
for(i=0;i<n;i++) {
cout<<"Incognita "<<i+1<< ": " <<solucion[i]<< "\n";
}
return 0;
}
...