Matriz a partir de un sistema de ecuaciones.

Iniciado por mikem, 19 Mayo 2015, 22:12 PM

0 Miembros y 1 Visitante están viendo este tema.

mikem

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 (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
using namespace std;
const int nb=100;

int main()
{
    float D[nb][nb];
    int i,j;
    float m[i][j];
    int nbloques;
    int nresortes;
float w[100];
float k[100];
   
    cout<<"-------------------------------------------\n";
    cout<<"Bienvenido al sistema vertical masa resorte.\n";
    cout<<"Ingrese cantidad de bloques y resortes al sistema:\n"<<endl;
    do{
        cout<<"Cantidad de bloques: ";
        cin>>nbloques;
     
        cout<<"Cantidad de resortes: ";
        cin>>nresortes;
        cout<<endl;
        if((nbloques<nresortes)||(nbloques>nresortes))
         {
                                                     
        cout<<"RECUERDE: el sist. admite igual cantidad de resortes y bloques.\n";
        cout<<endl;
        cout<<"Vuelva a ingresar los par\xa0metros, por favor: \n"<<endl;
            }else
            break;
        }while(1);
       cout<<"Pesos (kg) de cada uno de los bloques:"<<endl;
       
        for(int i=0; i<nbloques; i++)
        { cout<<"Bloque "<<i+1<<": ";
                cin>>w[i];
                cout<<endl;
                }
        for(int i=0; i<nresortes;i++)
                {
                cout<<"Ki del resorte "<<i+1<<": ";
                cin>>k[i];
                cout<<endl;
                }
cout<<"El sistema matricial a resolver:\n"<<endl;

//------AQUI COMIENZA EL HORROR
             for (int i=0; i<(nbloques+1); i++)
             for (int j=0; j<(nbloques+1); j++)
              {
             if(i==0 && j==1)
             {
                    m[i][j]=-k[0];
             }
             else if((i==0) && (j==nbloques+1))
             {
                  m[i][j]=0;
              }
              else if((j==0) && (i==nbloques+1))
              {
                   m[i][j]=0;
                   }
              else if(i==j)
              {
                   m[i][j]=k[j+1]+k[i];
                   }
              else
              {
                  m[i][j]=-k[(j+1)-i];
                  }
             }
             
          for (int i=0; i<(nbloques+1); i++)
             for (int j=0; j<(nbloques+1); j++)
             {
                 cout<<m[i][j]<<endl;
                 }     
        system("pause");         
}



robertofd1995

#1
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 (cpp) [Seleccionar]

float m[n][n]; //n numero de elementos


m[0][0]=k[0]+k[1];
m[0][1]=-k[1];

void paso(int n){ //primera llamada con n=1

if(n=k[].lenght){ // es el ultimo
m[n][n]=k[n];
m[n][n-1]=-k[n];
}

m[n][n-1]=k[n];
m[n][n]=k[n]+k[n+1];
m[n][n+1]=-k[n+1];

paso(n+1);

}


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

mikem

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 :)