[ Foro de Java ]

Ayuda con un programa

10-May-2019 06:14
Invitado (Ana Graciela)
0 Respuestas

Buenos días, tardes o noches a quien lea esto.
Estoy estudiando java (Soy principiante)
Mi problema consiste en que estoy haciendo un pequeño programa de regresión lineal múltiple y pues ya está hecho pero los datos que me da no son los correctos (yo ya resolví el problema a mano) y pues un profesor me comento que el problema puede estar aquí:
¿Hay algo mal? O ¿el problema no puede estar en esta parte?
       //Aqui vamos a hacer 0 arriba de la diagonal
       for(int i=4; i>=0; i--){
           for(int j=i-1; j>=0; j--){
               for(int k=0; k<5; k++){
                   A[k][j]=A[k][i]*A[i][j]/A[i][i];
               }
Se usa el método de gasuss-jordan haciendo 0 abajo y arriba de una matriz. Esta parte toma la matriz que ya tengo y hace 0 arriaba.
El programa funciona, pero soy muy principiante y llegue en busca para ver si alguien me podría hacer el favor de ayudarme. Cualquier aportación o información me serviría gracias.
Aquí el programa completo:
public static void main(String[] args) {
       
       double[] Y ={25.50,31.20,25.90,38.40,18.40,26.70,26.40,25.90,32.00,25.20,39.70,35.70,26.50};
       
       double[] x1 ={1.74,6.32,6.22,10.55,1.19,1.22,4.10,6.32,4.08,4.15,10.15,1.72,1.70};
       
       double[] x2 ={5.30,5.42,8.41,4.63,11.60,5.85,6.62,8.72,4.42,7.60,4.83,3.12,5.30};
       
       double[] x3 ={10.80,9.40,7.20,8.50,9.40,9.90,8.00,9.10,8.70,9.20,9.40,7.60,8.20};
       double SY=0;
       double SX1=0;
       double SX2=0;
       double SX3=0;
       
       double SX1cuad=0;
       double SX1cporSX2=0;
       double SX1cporSX3=0;
       double SX2cuad=0;
       double SX2cporSX3=0;
       double SX3cuad=0;
       
       double SYpSX1=0;
       double SYpSX2=0;
       double SYpSX3=0;

       double [][] A=new double[4][5];
       for(int M=0; M<13; M++){
           
           SY=SY+Y[M];
           SX1=SX1+x1[M];
           SX2=SX2+x2[M];
           SX3=SX3+x3[M];
           
           SX1cuad=Math.pow(x1[M], 2)+SX1cuad;
           SX2cuad=Math.pow(x2[M], 2)+SX2cuad;
           SX3cuad=Math.pow(x3[M], 2)+SX3cuad;
           
           SX1cporSX2=SX1cporSX2+x1[M]*x2[M];
           SX1cporSX3=SX1cporSX3+x1[M]*x3[M];
           SX2cporSX3=SX2cporSX3+x2[M]*x3[M];
           
           SYpSX1=SYpSX1+Y[M]*x1[M];
           SYpSX2=SYpSX2+Y[M]*x2[M];
           SYpSX3=SYpSX3+Y[M]*x3[M];
       }
       A[0][0]=13;
       A[0][1]=SX1;
       A[0][2]=SX2;
       A[0][3]=SX3;
       A[0][4]=SY;
       
       A[1][0]=SX1;
       A[1][1]=SX1cuad;
       A[1][2]=SX1cporSX2;
       A[1][3]=SX1cporSX3;
       A[1][4]=SYpSX1;
       
       A[2][0]=SX2;
       A[2][1]=SX1cporSX2;
       A[2][2]=SX2cuad;
       A[2][3]=SX2cporSX3;
       A[2][4]=SYpSX2;
       
       A[3][0]=SX3;
       A[3][1]=SX1cporSX3;
       A[3][2]=SX2cporSX3;
       A[3][3]=SX3cuad;
       A[3][4]=SYpSX3;
       
       
       for(int i=0; i<4; i++){
           for(int j=i+1; j<4; j++){
               for(int k=4; k>=i; k--){
                   A[j][k]-=A[i][k]*A[j][i]/A[i][i];
               }
           }
       }
       
       //Aqui vamos a hacer 0 arriva de la diagonal
       for(int i=4; i>=0; i--){
           for(int j=i-1; j>=0; j--){
               for(int k=0; k<5; k++){
                   A[k][j]=A[k][i]*A[i][j]/A[i][i];
               }
           }
       }
       double B0=A[0][4]/A[0][0];
       double B1=A[1][4]/A[1][1];
       double B2=A[2][4]/A[2][2];
       double B3=A[3][4]/A[3][3];
       
       
       for(int i=0; i<4; i++){
           for(int j=0; j<5; j++){
               System.out.print(A[i][j]);
               System.out.print("\t");
           }
           System.out.print("\n");
       }

       System.out.println("Y="+B0+"+"+B1+"X1+"+B2+"X2+"+B3+"X3");
   }
}
Vuelvo a mencionar que cualquier aportación es muy bien aceptada gracias.




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...