Autor
|
Tema: matriz escalonada (metodo de gauss) (Leído 15,865 veces)
|
jesus++
Desconectado
Mensajes: 4
|
un problema q me dejaron, pense hacerlo de esta manera: primero escalonar la matriz inferior y superiormente, luego pasarla a la matriz identidad y tomar una matriz q empiece en la identidad y realizar las mismas operaciones q a la matriz q ingrese por teclado... el problema esta en escalonarlo, si bien lo he probado manualmente, la computadora solo atina a escalonar, pero los terminos centrales no cambian de valor... el primer paso (y en el q busco ayuda seria escalonar la matriz superiormente) el resto ya lo tengo pensado
#include<stdio.h> #include<conio.h> int main(){ int i,j,k,n; float x[80][80];
printf("ingresar el orden de la matriz\n"); scanf("%d",&n); for(i=1; i<=n;i++){ for(j=1; j<=n;j++){ printf("ingresar x[%d][%d]: ",i,j); scanf("%f",&x[j]);}} for(k=1; k<n;k++){ for(i=k+1; i<=n;i++){ for(j=1; j<=n;j++) x[j]=x[j]-(x[k][j]*x[k])/x[k][k]; }} printf("la matriz escalonada es"); for(i=1; i<=n;i++){ printf("\n"); for(j=1; j<=n;j++) printf("%f ",x[j]);} for(k=n; k>1;k--){ for(i=k-1; i>=1;i--){ for(j=n; j>=1;j--) x[j]=x[j]-(x[k][j]*x[k])/x[k][k]; }}
printf("la matriz escalonada es"); for(i=1; i<=n;i++){ printf("\n"); for(j=1; j<=n;j++) printf("%f ",x[j]);}
getch(); }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
« Última modificación: 25 Diciembre 2013, 18:24 pm por leosansan »
|
En línea
|
|
|
|
jesus++
Desconectado
Mensajes: 4
|
Tienes razon, lo tomare en cuenta Al programa solo deben agregarle "i"a cada x[j], quedara como x(i)[j] Y la "i" a x[k], quedando x(i)(k)
|
|
« Última modificación: 25 Diciembre 2013, 20:54 pm por jesus++ »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Aprende a hacerlo, es más fácil:#include<stdio.h> #include<conio.h> int main(){ int i,j,k,n; float x[80][80]; printf("ingresar el orden de la matriz\n"); scanf("%d",&n); for(i=1; i<=n;i++){ for(j=1; j<=n;j++){ printf("ingresar x[%d][%d]: ",i,j); scanf("%f",&x[i][j]);}} for(k=1; k<n;k++){ for(i=k+1; i<=n;i++){ for(j=1; j<=n;j++) x[i][j]=x[i][j]-(x[k][j]*x[i][k])/x[k][k]; }} printf("la matriz escalonada es"); for(i=1; i<=n;i++){ printf("\n"); for(j=1; j<=n;j++) printf("%f ",x[i][j]);} for(k=n; k>1;k--){ for(i=k-1; i>=1;i--){ for(j=n; j>=1;j--) x[i][j]=x[i][j]-(x[k][j]*x[i][k])/x[k][k]; }} printf("la matriz escalonada es"); for(i=1; i<=n;i++){ printf("\n"); for(j=1; j<=n;j++) printf("%f ",x[i][j]);} getch(); }
De entrada, no deberías hacer uso de la de la libreria conio y su función getch. Leete Lo que no hay que hacer en C/C++. Nivel basico]
|
|
|
En línea
|
|
|
|
jesus++
Desconectado
Mensajes: 4
|
Ok, sucede q en mi pc por algun motivo no compila cuando uso system("pause") Alguna sugerencia en el problema ?
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Indexar el código es muy importante para que se entienda mejor: #include<stdio.h> #include<conio.h> int main() { int i,j,k,n; float x[80][80]; printf("ingresar el orden de la matriz\n"); scanf("%d",&n); for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { printf("ingresar x[%d][%d]: ",i,j); scanf("%f",&x[i][j]); } } for(k=1; k<n; k++) { for(i=k+1; i<=n; i++) { for(j=1; j<=n; j++) x[i][j] = x[i][j] - (x[k][j] * x[i][k]) / x[k][k]; } } printf("la matriz escalonada es"); for(i=1; i<=n; i++) { printf("\n"); for(j=1; j<=n; j++) printf("%f ",x[i][j]); } for(k=n; k>1; k--) { for(i=k-1; i>=1; i--) { for(j=n; j>=1; j--) x[i][j] = x[i][j] - (x[k][j] * x[i][k]) / x[k][k]; } } printf("la matriz escalonada es"); for(i=1; i<=n; i++) { printf("\n"); for(j=1; j<=n; j++) printf("%f ",x[i][j]); } getch(); }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Indexar el código es muy importante para que se entienda mejor:
Efectivamente, indentar el código es un habito que se debe adquirir desde los inicios.
Pero ya que nos ponemos tiquismiquis, habría que hacer otras observaciones:
* la función main por ser de tipo int necesita al final un return tipo int.
* los bucles con una sola instrucción o función no necesitan de llaves.
* puestos a imprimir float me gusta más el formato %g ya que no llena la pantalla de decimales innecesarios.
Y ya que nos ponemos tontitos,y lo digo por mí, por lo menos corregir le el código, y antes una muestra:
Ingresar el orden de la matriz: 3 x[1][1]= 1 x[1][2]= 0 x[1][3]= 1 x[2][1]= 1 x[2][2]= 2 x[2][3]= 1 x[3][1]= 2 x[3][2]= 1 x[3][3]= 3
La matriz inicial es
1 0 1 1 2 1 2 1 3 La matriz triangular inferior es:
1 0 1 0 2 0 0 0 1 la matriz escalonada es
1 0 0 0 2 0 0 0 1
#include<stdio.h> int main() { int i,j,k,n; float x[80][80],fac; printf("Ingresar el orden de la matriz:\n"); scanf("%d",&n); for(i=0; i<n; i++){ for(j=0; j<n; j++){ printf(" x[%d][%d]= ",i+1,j+1); fflush (stdout); scanf("%f",&x[i][j]); } } printf("\nLa matriz inicial es\n"); for(i=0; i<n; i++){ printf("\n"); for(j=0; j<n; j++) printf("%g ",x[i][j]); } for(k=0; k<n-1; k++){ for(i=k+1; i<n; i++){ fac =-x[i][k]/x[k][k]; for(j=k; j<n; j++) x[i][j]+=x[k][j]*fac; } } printf("\nLa matriz triangular superior es:\n"); for(i=0; i<n; i++) { printf("\n"); for(j=0; j<n; j++){ printf("%g ",x[i][j]); fflush (stdout); } } for(k=n-1; k>=0; k--){ for(i=k-1; i>=0; i--){ fac =-x[i][k]/x[k][k]; for(j=n-1; j>=0; j--) x[i][j] += x[k][j]*fac; } } printf("\nla matriz diagonal es\n"); for(i=0; i<n; i++){ printf("\n"); for(j=0; j<n; j++){ printf("%g ",x[i][j]); fflush (stdout); } } return 0; }
Eso sí, es un tanto chapucero ya que ni usa pivote ni intercambia filas, caso necesario si en medio de la transformación sale un cero en la diagonal. Pero es lo que el autor proponía.¡¡¡¡ Saluditos! ..... !!!! REEDITADO: corregida la observación inferior/superior. Thanks!
|
|
« Última modificación: 26 Diciembre 2013, 16:59 pm por leosansan »
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
* los bucles con una sola instrucción o función no necesitan de llaves. Cierto pero, en ocasiones las llaves dan más legibilidad (sobre todo cuando empiezas a anidar cosas) * puestos a imprimir float me gusta más el formato %g ya que no llena la pantalla de decimales innecesarios. Otra opción es poner %.4f De esa forma muestra solo hasta 4 decimales, si quieres 8 solo tienes que cambiar el 4 por un 8
|
|
|
En línea
|
|
|
|
csp
Desconectado
Mensajes: 35
|
Buenos días, La matriz triangular inferior es:
1 0 1 0 2 0 0 0 1 Es al revés. En la matriz triangular inferior, son nulos todos los elementos sobre la diagonal principal. Un saludo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Consulta metodo Matriz Java
Java
|
matc33
|
2
|
2,164
|
23 Octubre 2013, 17:28 pm
por visualfree
|
|
|
S.O.S : Programa que solucione sistemas Lineales x método de Gauss :)
Programación C/C++
|
Bachanilorac
|
1
|
2,401
|
20 Noviembre 2014, 21:13 pm
por avesudra
|
|
|
AYUDA ... Sistema lineal NxN por el método de Gauss (PIVOTE)
Programación C/C++
|
Alele54
|
0
|
1,955
|
7 Diciembre 2015, 23:21 pm
por Alele54
|
|
|
Resolver el metodo de Gauss
Programación C/C++
|
angel1397
|
4
|
2,872
|
3 Octubre 2016, 00:25 am
por BlackBlex
|
|
|
Ayuda con codigo que resuelve matrices por metodo gauss
Programación C/C++
|
flosan17
|
0
|
1,930
|
6 Marzo 2017, 15:55 pm
por flosan17
|
|