Práctica en Java y matrices con Cramer

  1. #1
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548

    Práctica en Java y matrices con Cramer

    ¡Hola!

    Tengo que hacer una práctica de java que consiste en resolver un sistema de ecuaciones mediante Cramer. Nos dan dos matrices, una de 3x3 y otra de 1x1, y nos dice que las resolvamos.

    Por ahora, lo único que tengo hecho es nombrar las variables matriz 1 y matriz 2, donde he almacenado sus datos. Después, he creado otras dos variables donde calculo las determinantes de la matriz 1 y la matriz 2. Por último, he asignado otras tres variables para las soluciones del sistema: x, y, z.

    Ahí es donde me bloqueo totalmente y no sé cómo seguir. Tengo que conseguir que la solución me salga por la consola y crear una condición para comprobar que tiene solución (vamos, que la determinante no sea igual a cero).

    ¿Qué tengo que asignarle a x, y, z para que me dé las soluciones por Cramer? Gracias,

  2. #2
    Avatar de Cooper Bang!
    Registrad@ el
    19/06/2009
    Sexo
    Chico
    Mensajes
    20.091
    Agradecido
    9901 veces
    Temas
    169
    Eso se hace con un método main. Una vez que tienes las clases Matriz y los métodos para calcular y resolver, creas un método main que pida las dos matrices, metes un if (para ver si el determinante es igual o distinto de cero) y que te ponga en pantalla con un println la solución o un mensajito que indique que no se puede resolver.

    Yo creo que eso es lo más cómodo.
    “The amazing thing is that every atom in your body came from a star that exploded. And, the atoms in your left hand probably came from a different star than your right hand. It really is the most poetic thing I know about physics: You are all stardust. You couldn’t be here if stars hadn’t exploded, because the elements - the carbon, nitrogen, oxygen, iron, all the things that matter for evolution - weren’t created at the beginning of time. They were created in the nuclear furnaces of stars, and the only way they could get into your body is if those stars were kind enough to explode. So, forget Jesus. The stars died so that you could be here today.”

    Lawrence Krauss, "A Universe from Nothing: Why There Is Something Rather Than Nothing".

  3. #3
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    Ya, pero la práctica pone que tiene que ser esa matriz asignando sus datos desde el principio (tienen que ser esas dos) y aplicando las matrices de java porque de eso se trata, XD. No nos dejan hacerlo de manera libre, vaya.

    Gracias!

  4. #4
    Avatar de Cooper Bang!
    Registrad@ el
    19/06/2009
    Sexo
    Chico
    Mensajes
    20.091
    Agradecido
    9901 veces
    Temas
    169
    No entiendo. En ese caso, dentro de la clase matriz define ya la matriz que quieras, en lugar de poner sus elementos como variables.

    Lo que no sé es donde te pierdes exactamente, ni a que te refieres con "aplicando las matrices de java". Explícate un poco más a ver si te pillo xD
    “The amazing thing is that every atom in your body came from a star that exploded. And, the atoms in your left hand probably came from a different star than your right hand. It really is the most poetic thing I know about physics: You are all stardust. You couldn’t be here if stars hadn’t exploded, because the elements - the carbon, nitrogen, oxygen, iron, all the things that matter for evolution - weren’t created at the beginning of time. They were created in the nuclear furnaces of stars, and the only way they could get into your body is if those stars were kind enough to explode. So, forget Jesus. The stars died so that you could be here today.”

    Lawrence Krauss, "A Universe from Nothing: Why There Is Something Rather Than Nothing".

  5. #5
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    Es que lo que llevo de código no lo hice sola, sino con mi compañera, así que hay cosas que no entiendo muy bien. A veeeer, donde me pierdo después de estar revisándolo (creo) es en los cálculos, XD. Sé indicarle cómo calcular las determinantes y los valores x, y, z...

    Sólo que al tener dos matrices me pierdo y no sé qué hacer. Según el código que hicimos multiplica según las posiciones de la matriz 1 y la matriz 2 y las va sumando o restando (vamos, como una determinante normal), pero pensé que la determinante sólo se calculaba dentro de una misma matriz. Ahí es justo donde me pierdo. A la matriz dos (con los términos independientes), la habría usado para calcular x, y, z y luego lo habría dividido entre la determinante de la matriz 1 para saber las tres soluciones.

    Edito: Teníamos mal calculadas las matrices. Después de eso ya funcionaba como decías Faraday,

    Gracias,
    Última edición hecha por ........, 02/11/2010 a las 23:04.

  6. #publi
    Publicidad

     

  7. #6
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    ¡Hola!

    Refloto el tema porque tengo que hacer otra práctica y así no abro otro nuevo. Tengo que inicializar dos vectores (matrices), hasta ahí bien. Y después conseguir que los datos de dichos vectores los pida por consola para después calcular el módulo de un número complejo.

    ¿Cómo puedo conseguir que me pida esos datos por consola? Con variables sí me sale, pero con matrices ni idea.

    Gracias!

  8. #7
    Avatar de Jwym, Lord of Cinder Moderation gone hollow
    Registrad@ el
    16/07/2005
    Localidad
    ¿Importa eso en Internet?
    Sexo
    Chico
    Edad
    33
    Mensajes
    10.493
    Agradecido
    2731 veces
    Temas
    85
    Yo no sé Java, pero si tuviera que programar eso lo haría con un doble bucle. Pasarle una matriz a la máquina es pasarle en realidad nxm variables, ¿no?

    Otra opción más limpia es hacer un programa que lea las variables desde un fichero y directamente escribir la matriz en dicho fichero, pero no deja de ser lo mismo cambiando un par de instrucciones.
    I allò que val és la consciència de no ser res si no s'és poble. De no ser res si no s'és lliure.
    Vicent Andrés Estellés.


  9. #8
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    Sí, es con un bucle. Pero no sé qué sintaxis debo poner dentro de ese bucle, xd. No encuentro nada ni el pseudocódigo, xdd.

    Gracias.

  10. #9
    Avatar de Jwym, Lord of Cinder Moderation gone hollow
    Registrad@ el
    16/07/2005
    Localidad
    ¿Importa eso en Internet?
    Sexo
    Chico
    Edad
    33
    Mensajes
    10.493
    Agradecido
    2731 veces
    Temas
    85
    Hombre, en seudocódigo sería:

    Código:
    comienza_programa(retorna void)
    {
    
    declara enteros i, j, n;
    declara doble** A;
    
    lee(n); /* tamaño de la matriz*/
    
    A = reserva_memoria(n*tamaño_de(doble));
    
    comienza_bucle(desde i = 0, mientras i < n, i++)
    {
         comienza_bucle(desde j = 0, mientras j < n, j++)
         {
                 lee(A[i][j]);
         }
         fin_de_bucle;
    fin_de_bucle;
    }
    
    /* Para mostrarla por pantalla */
    
    comienza_bucle(desde i = 0, mientras i < n, i++)
    {
         comienza_bucle(desde j = 0, mientras j < n, j++)
         {
                 escribe(A[i][j] /tabulador);
         }
         fin_de_bucle;
         
         escribe(/fin_de_linea);
    
    fin_de_bucle;
    }
    
    libera(i);
    libera(j);
    libera(n);
    libera(A); /* No olvides liberar las variables usadas, o a poco que hagas un programa más complejo y lo ejecutes un par de veces te quedas sin memoria. */
    
    salida;
    
    }
    fin_de_programa
    Más o menos, hace eones que no hago seudocódigo.
    I allò que val és la consciència de no ser res si no s'és poble. De no ser res si no s'és lliure.
    Vicent Andrés Estellés.


  11. #10
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    Hi!

    Refloto el tema [una vez más, xD] por no abrir otro nuevo. Tengo que hacer otra práctica y estoy perdida en un punto, :__

    Resumidamente me pide que cree dos variables double y una int. Las dos primeras son una representación (distancia) Inicio y Final, y la última es el número de partes en las que quieres dividir dicha distancia. Partiendo de estos valores, el programa debe crear una matriz, donde una columna contenga los valores de X y la segunda los puntos de la función sen (X) en el intervalo [Inicio,Final]. El número de filas está determinado por NumeroPuntos, ^^.

    Para conseguir los valores de X, calculo el incremento de X (Final - Inicio / NumeroPuntos) y se lo sumo al valor Inicio con un for.

    Hasta ahí lo tengo bien. El problema viene cuando me pide que asigne la primera columna a la X y la segunda a la función del seno. Yo lo hice así:

    for (int i = 0; i < x; i++){

    x = x + IncrementoX;

    double[][] matriz2 = new double [Npunts][1];

    matriz2 [Npunts][0] = x;
    matriz2 [Npunts][1] = Math.sin(x);

    }

    Pero me arroja este error: java.lang.ArrayIndexOutOfBoundsException. Viene a decir que la posición a la que intento acceder no existe.

    Posiblemente me haya explicado mal, pero... ¿sabéis cómo puedo arreglarlo o qué hago mal? Gracias por tercera vez, xD. ^^

  12. #11
    Avatar de Raise Random Error Saysa de Vill
    Registrad@ el
    16/02/2004
    Localidad
    Madrid
    Sexo
    Chica
    Edad
    33
    Mensajes
    29.031
    Agradecido
    1495 veces
    Temas
    279
    No entiendo muy bien lo que quieres pero... ¿dónde usas i?

    ¿Por qué declaras dentro de un bucle?

    Además me da la impresión de que es un bucle que no termina porque la condición de salida la marcas con la X y esa la tocas dentro del bucle.

  13. #12
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    La práctica es muy liosa y está mal explicada en sí. Lo que quiero hacer es indicarle a la matriz que en la columna 0 debe guardar los datos de la X y en la columna 1 la función del seno de X.

    i es el contador (?), lo que incrementa es el valor de X. Vamos, creo que eso está bien porque el bucle funciona. Lo que no sé es eso, cómo pararla... Pero vamos, si lo que quiero incrementar es la X tendré que usarla en la condición de salida, ¿no?

    Declaro dentro del bucle porque mi profesor me dijo que la matriz se declaraba dentro, :S. Esta parte aún no la tengo muy clara.

    Gracias!

  14. #13
    Avatar de Raise Random Error Saysa de Vill
    Registrad@ el
    16/02/2004
    Localidad
    Madrid
    Sexo
    Chica
    Edad
    33
    Mensajes
    29.031
    Agradecido
    1495 veces
    Temas
    279
    Lo que te digo de la X es que la condición de salida es i<x pero si estás todo el rato incrementando X no vas a llegar a la finalización del mismo.

    En cuanto a la declaración, a mi me da que esa iría fuera del bucle y luego para grabar los datos sería en [i][0] e [i][1]. Pero vamos, que no entiendo bien lo que quieres hacer con ese código.

  15. #14
    Moderador/a
    Registrad@ el
    15/04/2007
    Localidad
    Bcn
    Sexo
    Chica
    Mensajes
    13.631
    Agradecido
    1539 veces
    Temas
    548
    Ya, pero no sé explicarlo de un mejor modo. Como mucho puedo copiar la práctica tal cual.

    Tengo tres variables, dos representan una distancia de un punto a otro y la tercera los puntos en los que quieres dividirla. Tienes que encontrar el incremento de la distancia que varía dependiendo de los puntos de inicio y fin. Como si fuese una regla de medir normal y cambiases el espacio entre centímetro y centímetro. Tienes que calcular la nueva distancia.

    Entonces, tengo que averiguar cuáles son esas medidas y se le hace sumándole al valor de inicio el incremento de la distancia entre dichos puntos. No sé, ahí es donde uso el bucle para X (que son las medidas que quiero saber). Del punto 0 al punto 2, quiero hacer 3 espacios. El primero medirá 0, el segundo 0 más el incremento, el tercero el segundo más el incremento... y así.

    P.D.: La X debe incrementarse hasta el número de puntos introducidos (tercera variable), que es el número de filas de la matriz.

    Y luego me pide que guarde los datos como dije anteriormente, :___

    Gracias igualmente!
    Última edición hecha por ........, 02/12/2010 a las 20:15.

  16. #15
    Avatar de Raise Random Error Saysa de Vill
    Registrad@ el
    16/02/2004
    Localidad
    Madrid
    Sexo
    Chica
    Edad
    33
    Mensajes
    29.031
    Agradecido
    1495 veces
    Temas
    279
    Creo que no estás entendiendo lo que te digo, te hago una traza poniendo valores.
    No pones las inicializaciones pero pongo algo para poder hacerlo,
    IncrementoX = 1;
    x = 1;
    Npunts = 1;

    Paso 1:
    En el for: i= 0, condición i<x x=1;
    x = 1 + 1;

    double[][] matriz2 = new double [1][1];

    matriz2 [1][0] = 2;
    matriz2 [1][1] = Math.sin(2);

    Paso 2:

    En el for: i= 1, condición i<x x=2;
    x = 2 + 1;

    double[][] matriz2 = new double [1][1];

    matriz2 [1][0] = 3;
    matriz2 [1][1] = Math.sin(3);

    Paso 2:

    En el for: i= 2, condición i<x x=3;
    x = 3 + 1;

    double[][] matriz2 = new double [1][1];

    matriz2 [1][0] = 3;
    matriz2 [1][1] = Math.sin(3);


    ¿Te das cuenta que haciendo eso el bucle no termina nunca porque estás cambiando todo el rato el valor de X?
    Y otra cosa que veo es que no almacenas valores, porque como no cambias el valor primero estás machacando todo el rato lo que haces.

Página 1 de 3 1 2 3 ÚltimaÚltima

Permisos de tu Usuario

  • No puedes crear nuevos temas
  • No puedes publicar respuestas
  • No puedes adjuntar archivos
  • No puedes editar tus mensajes
  •  
  • El código BB está activado
  • Los emoticonos están activados
  • La etiqueta [IMG] está activado
  • La etiqueta [VIDEO] está activado
  • El código HTML está desactivado
  • Los Trackbacks están desactivados
  • Los Pingbacks están desactivados
  • Los Refbacks están activados
  • Temas similares

    1. Práctica rarísima de Java
      Por Andrógina en Aula eK
      Respuestas: 9
      Último mensaje: 28/10/2010, 20:03
    2. Java 4 Ever
      Por opositivo en Cine
      Respuestas: 0
      Último mensaje: 30/06/2010, 15:00
    3. Problemas con matrices
      Por Little Person en Aula eK
      Respuestas: 4
      Último mensaje: 17/10/2009, 11:10
    4. Diagonalización de matrices
      Por Blau en Aula eK
      Respuestas: 6
      Último mensaje: 27/01/2009, 13:18
    5. Respuestas: 27
      Último mensaje: 08/11/2007, 22:14