Anuncio

Colapsar
No hay ningún anuncio todavía.

Resolver sistemas por eliminación gaussiana

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • C/C++ Resolver sistemas por eliminación gaussiana

    Hola compañeros. Seré brebe en la presentación: Actualmente estoy cursando una asignatura de "programación 2" sin haber cursado la 1, así que no me entero ni de media. Tengo un programa para entregar el lunes que no sé cómo empezarlo. Dice así:

    Queremos resolver m sistemas de ecuaciones lineales de la forma , donde A es una matriz nxn, X es una matriz de incógnitas nxm y B es una matriz de términos independientes nxm. Queremos resolver estos sistemas lineales por el método de eliminación gaussiana con pivotaje maximal de filas.
    Como no voy a poneros el programa completo porque es largo y nadie me ayudaría, me gustaría que me empezáseis a echar un cable con la primera función que tengo que crear.

    int gauss(double **a, int n, int m, double tol)
    que hace eliminación gaussiana (con pivotaje maximal de filas) en la matriz ampliada a. La matriz tiene n filas y n+m columnas, y en las últimas m columnas guarda los términos independientes. A la entrada, a contiene la matriz ampliada, y a la salida contiene la matriz reducida a triangular superior. La función ha de devolver: 1 si la matriz es singular (con tolerancia tol), o 0 si no.

    ¿Alguna ayuda para un novato?
    Las pistas que tengo son: He de intercambiar filas con punteros (si la matriz esta declarada como **a, las filas son *a[i])
    Sé que tengo que encontrar el máximo

    Agradecería muchísimo cualquier mano que me tendais.
    Un saludo,
    Ángel

    PD: No lo he dicho, pero es un programa en el lenguaje C
    Última edición por angel relativamente; 29/03/2014, 17:05:25.
    [TEX=null]k_BN_A \cdot \dst \sum_{k=0}^{\infty} \dfrac{1}{k!} \cdot 50 \cdot 10_{\text{hex}} \cdot \dfrac{2\pi}{\omega} \cdot \sqrt{-1} \cdot \dfrac{\dd x} {\dd t } \cdot \boxed{^{16}_8\text{X}}[/TEX]

  • #2
    Re: Resolver sistemas por eliminación gaussiana

    Tranquilo, yo sí he cursado programación 1 y tampoco me entero demasiado jajaja.

    Este programa es difícil de explicar pero fácil de implementar. Te dejo un link para que veas un par de programas de ejemplos. No es exactamente el ejercicio que te piden pero la metodología sí , es decir, una función que triangula la matriz y otra que hace la parte final del método de Gauss. A parte de esto, yo he añadido funciones para reservar espacio de las matrices y liberarlas, pero eso también lo puedes hacer en la función main.

    ¡Que te vaya bien!

    PD: ¿Tú hiciste el del sistema sobredeterminado?
    Última edición por Weip; 29/03/2014, 19:39:31.

    Comentario


    • #3
      Re: Resolver sistemas por eliminación gaussiana

      Algo de este estilo quizás funcione, aunque faltarian comprobaciones como evitar las divisiones por cero (rows=n, cols=n+m):
      Código:
      #include <math.h>
      
      
      int gauss(double **a,int rows,int cols, double err) {
          int i,j,k;
          double *t,p,q,d= 1;
          for(k=0; k<rows-1; k++) {
              /* Intercambia fila k con la de mayor pivote */
              for(i=k+1; i<rows; i++) 
                  if(fabs(a[i][k])>fabs(a[k][k])) { 
                      t= a[k]; a[k]= a[i]; a[i]= t;   
                  } 
              /* Genera ceros en la columna k por debajo del pivote */
              p= a[k][k];
              for(i=k+1; i<rows; i++) {
                  q= a[i][k]/p;
                  for(j=0; j<cols; j++)
                      a[i][j]-= a[k][j]*q;   
              }
              /* Calcula determinante */
              d*= p; 
          }    
          return fabs(d)<fabs(err) ? 1: 0;
      }
      Última edición por abuelillo; 30/03/2014, 01:48:31.
       \left\vert{     \Psi_{UNIVERSE}       }\right>  = \sum \alpha_i   \left\vert{     \Psi_{WORLD_i}       }\right> \text{   } \hspace{3 mm}  \sum  \left\vert{} \alpha_i   \right\vert{}^2 = 1

      Comentario


      • #4
        Re: Resolver sistemas por eliminación gaussiana

        Puede que esto te ayude: http://rosettacode.org/wiki/Reduced_row_echelon_form . Esa página es especialmente útil para consultar algoritmos en todo tipo de lenguajes.

        Comentario


        • #5
          Re: Resolver sistemas por eliminación gaussiana

          Gracias a todos, siento la tardanza en responder. Me sirvió de bastante ayuda, con esto y lo que me dijo un compañero conseguí hacer algo bastante limpio, del estilo de lo que pone abuelillo

          Escrito por Weip
          PD: ¿Tú hiciste el del sistema sobredeterminado?
          Sí, me lo hicieron.
          [TEX=null]k_BN_A \cdot \dst \sum_{k=0}^{\infty} \dfrac{1}{k!} \cdot 50 \cdot 10_{\text{hex}} \cdot \dfrac{2\pi}{\omega} \cdot \sqrt{-1} \cdot \dfrac{\dd x} {\dd t } \cdot \boxed{^{16}_8\text{X}}[/TEX]

          Comentario

          Contenido relacionado

          Colapsar

          Trabajando...
          X