[ 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.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)