elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Matriz a partir de un sistema de ecuaciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Matriz a partir de un sistema de ecuaciones.  (Leído 1,879 veces)
mikem

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Matriz a partir de un sistema de ecuaciones.
« en: 19 Mayo 2015, 22:12 pm »

Hola :).
Necesito sus ayudas para poder armar una matriz a partir de un sistema de ecuaciones, cuyos parámetros son ingresados por el usuario. Sólo preciso la matriz.
El sistema de ecuaciones es el siguiente: https://imageshack.com/i/p5jShAlcj



Los parámetros ingresados por el usuario son k y W .
Lo que me interesa es obtener ésta matriz:

k1+k2        -k2                 0
-ki             ki+ki+1        -ki+1
                 -kn                     kn


(Para enésimas k ingresadas)
Eme aquí el código construido (desastroso) hasta ahora:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. const int nb=100;
  5.  
  6. int main()
  7. {
  8.    float D[nb][nb];
  9.    int i,j;
  10.    float m[i][j];
  11.    int nbloques;
  12.    int nresortes;
  13. float w[100];
  14. float k[100];
  15.  
  16.    cout<<"-------------------------------------------\n";
  17.    cout<<"Bienvenido al sistema vertical masa resorte.\n";
  18.    cout<<"Ingrese cantidad de bloques y resortes al sistema:\n"<<endl;
  19.    do{
  20.        cout<<"Cantidad de bloques: ";
  21.        cin>>nbloques;
  22.  
  23.        cout<<"Cantidad de resortes: ";
  24.        cin>>nresortes;
  25.        cout<<endl;
  26.        if((nbloques<nresortes)||(nbloques>nresortes))
  27.         {
  28.  
  29.        cout<<"RECUERDE: el sist. admite igual cantidad de resortes y bloques.\n";
  30.        cout<<endl;
  31.        cout<<"Vuelva a ingresar los par\xa0metros, por favor: \n"<<endl;
  32.            }else
  33.            break;
  34.        }while(1);
  35.       cout<<"Pesos (kg) de cada uno de los bloques:"<<endl;
  36.  
  37.        for(int i=0; i<nbloques; i++)
  38.        { cout<<"Bloque "<<i+1<<": ";
  39.                cin>>w[i];
  40.                cout<<endl;
  41.                }
  42.        for(int i=0; i<nresortes;i++)
  43.                {
  44.                cout<<"Ki del resorte "<<i+1<<": ";
  45.                cin>>k[i];
  46.                cout<<endl;
  47.                }
  48. cout<<"El sistema matricial a resolver:\n"<<endl;
  49.  
  50. //------AQUI COMIENZA EL HORROR
  51.             for (int i=0; i<(nbloques+1); i++)
  52.             for (int j=0; j<(nbloques+1); j++)
  53.              {
  54.             if(i==0 && j==1)
  55.             {
  56.                    m[i][j]=-k[0];
  57.             }
  58.             else if((i==0) && (j==nbloques+1))
  59.             {
  60.                  m[i][j]=0;
  61.              }
  62.              else if((j==0) && (i==nbloques+1))
  63.              {
  64.                   m[i][j]=0;
  65.                   }
  66.              else if(i==j)
  67.              {
  68.                   m[i][j]=k[j+1]+k[i];
  69.                   }
  70.              else
  71.              {
  72.                  m[i][j]=-k[(j+1)-i];
  73.                  }
  74.             }
  75.  
  76.          for (int i=0; i<(nbloques+1); i++)
  77.             for (int j=0; j<(nbloques+1); j++)
  78.             {
  79.                 cout<<m[i][j]<<endl;
  80.                 }    
  81.        system("pause");        
  82. }
  83.  
  84.  


En línea

robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
Re: Matriz a partir de un sistema de ecuaciones.
« Respuesta #1 en: 19 Mayo 2015, 23:27 pm »

Creo que esto mejor lo solucionabas con recursividad al menos queda mas claro , ademas no si este tipo de ejercicios (matematicos) son habituales para ti , si es asi ,te recomendaria usar matlab o phyton y no c , pero es una opinion personal , el codigo lo he hecho un poco por arriba pero creo que es lo que necesitas.


Código
  1. float m[n][n]; //n numero de elementos
  2.  
  3.  
  4. m[0][0]=k[0]+k[1];
  5. m[0][1]=-k[1];
  6.  
  7. void paso(int n){ //primera llamada con n=1
  8.  
  9. if(n=k[].lenght){ // es el ultimo
  10. m[n][n]=k[n];
  11. m[n][n-1]=-k[n];
  12. }
  13.  
  14. m[n][n-1]=k[n];
  15. m[n][n]=k[n]+k[n+1];
  16. m[n][n+1]=-k[n+1];
  17.  
  18. paso(n+1);
  19.  
  20. }

Espero que te sea de ayuda , si tienes alguna duda o ves que algo esta mal comenta , como te he dicho he hecho el codigo un poco rapido , pero a simple vista creo que es lo que pides.

Un saludo


« Última modificación: 20 Mayo 2015, 00:18 am por robertofd1995 » En línea

mikem

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Matriz a partir de un sistema de ecuaciones.
« Respuesta #2 en: 22 Mayo 2015, 22:30 pm »

Es aconsejable usar Matlab y listo, pero me solicitaron utilizar C++.
Este sistema de ecuaciones al ser tridiagonal y cumplir ciertas características puede resolverse aplicando el algoritmo de Thomas (como descomposición LU), utilizando vectores.
Sólo precisaba la visualización de la matriz para que el usuario se entere qué matriz ha de resolverse.
Muchas gracias por responder :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines