Senin, 06 Februari 2012

Program Regresi Kurva Terkecil

Sekarang ane pgen posting program java regresi kurva terkecil baik yang linier maupun non linier. Langsung aje ye yang linier ni programnya.
import java.io.*;
import java.text.*;
class coba
{
    public static void main(String[] args) throws Exception
    {
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMinimumFractionDigits(2);
        DataInputStream dis = new DataInputStream(System.in);
        double x[] = new double [50];
        double y[] = new double [50];
        double x_y[] = new double [50];
        double x_x[] = new double [50];
        double x_total=0;
        double y_total=0;
        double xy_total=0;
        double xx_total=0;
        double x_rata;
        double y_rata;
        double g;
        double h;
        double a;
        double b;
        int xy;
          System.out.println("====================================================================");
        System.out.println("=======Regresi Kurva Terkecil Linier================================");
        System.out.println("====================================================================");
        System.out.print("Masukkan Jumlah x dan y = ");
        xy=Integer.parseInt(dis.readLine());
       
        for(int i=1;i<=xy;i++)
        {
            System.out.print("x-"+i+" = ");
            x[i]=Double.parseDouble(dis.readLine());
            x_total=x_total+x[i];
        }
        for(int j=1;j<=xy;j++)
        {
            System.out.print("y-"+j+" = ");
            y[j]=Double.parseDouble(dis.readLine());
            y_total=y_total+y[j];
        }
        System.out.println("=========================================================================");
        System.out.println("|\tx \t|\ty \t|\tx*y \t|\tx*x \t\t|");
        System.out.println("=========================================================================");
        for(int k=1;k<=xy;k++)
        {
            x_y[k]=x[k]*y[k];
            x_x[k]=x[k]*x[k];
            System.out.print("|\t"+x[k]+" \t|\t"+y[k]+" \t|\t"+x_y[k]+" \t|\t"+x_x[k]+" \t\t|");
            System.out.println();
            xy_total=xy_total+x_y[k];
            xx_total=xx_total+x_x[k];
        }
        System.out.println("=========================================================================");
        System.out.println("|\t"+x_total+" \t|\t"+y_total+" \t|\t"+xy_total+" \t|\t"+xx_total+" \t\t|");
        System.out.println("=========================================================================");
        System.out.println();
        System.out.println("====================================================================");
        System.out.println("Nilai Rerata Untuk x dan y");
        x_rata=x_total/xy;
        y_rata=y_total/xy;
        System.out.println("x_rata = "+nf.format(x_rata));
        System.out.println("y_rata = "+nf.format(y_rata));
        System.out.println();
        System.out.println("====================================================================");
        System.out.println("Jika persamaan umum garis dinyatakan sebagai : y = a + bx");
        g=((xy*xy_total)-(x_total*y_total));
        h=((xy*xx_total)-(x_total*x_total));
        b=g/h;
        a=(y_rata-(b*x_rata));
        System.out.println("Jadi b = "+nf.format(b));
        System.out.println("Jadi a = "+nf.format(a));
        System.out.println();
        System.out.println("====================================================================");
        System.out.println("Jadi persamaan garis yang mendekati rangkaian data tersebut adalah :");
        System.out.println("y = "+nf.format(a)+" + "+nf.format(b)+"x");
        System.out.println("====================================================================");
    }
}

Dan Voila...Inilah Hasilnya!!!



Buat yang regresi kurva terkecil non linier, cekidot....

import java.io.*;
import java.text.*;
import java.math.*;
class coba
{
    public static void main(String[] args) throws Exception
    {
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMinimumFractionDigits(2);
        DataInputStream dis = new DataInputStream(System.in);
        double x[] = new double [50];
        double y[] = new double [50];
        double q_log[] = new double [50];
        double p_log[] = new double [50];
        double q_p[] = new double [50];
        double q_q[] = new double [50];
        double x_total=0;
        double y_total=0;
        double q_log_total=0;
        double p_log_total=0;
        double qp_total=0;
        double qq_total=0;
        double y_rata;
        double q_rata;
        double p_rata;
        double g;
        double h;
        double a;
        double b;
        double A;
        double B;
        int xy;
        System.out.println("=========================================================================");
        System.out.println("==============Regresi Kurva Terkecil Non Linier==========================");
        System.out.println("=========================================================================");
        System.out.print("Masukkan Jumlah x dan y = ");
        xy=Integer.parseInt(dis.readLine());
       
        for(int i=1;i<=xy;i++)
        {
            System.out.print("x-"+i+" = ");
            x[i]=Double.parseDouble(dis.readLine());
            x_total=x_total+x[i];
        }
        for(int j=1;j<=xy;j++)
        {
            System.out.print("y-"+j+" = ");
            y[j]=Double.parseDouble(dis.readLine());
            y_total=y_total+y[j];
        }
        System.out.println("=========================================================================");
        System.out.println("| x \t| y \t| q(=log x) \t| p(=log y) \t| q*p  \t | q*q \t\t|");
        System.out.println("=========================================================================");
        for(int k=1;k<=xy;k++)
        {
            q_log[k]=Math.log10(x[k]);
            p_log[k]=Math.log10(y[k]);
            q_p[k]=q_log[k]*p_log[k];
            q_q[k]=q_log[k]*q_log[k];
            System.out.print("| "+x[k]+" \t| "+y[k]+ "\t| "+nf.format(q_log[k])+" \t| "+nf.format(p_log[k])+"  \t| "+nf.format(q_p[k])+"  | "+nf.format(q_q[k])+" \t|");
            System.out.println();
            q_log_total=q_log_total+q_log[k];
            p_log_total=p_log_total+p_log[k];
            qp_total=qp_total+q_p[k];
            qq_total=qq_total+q_q[k];
        }
        System.out.println("=========================================================================");
        System.out.println("| "+nf.format(x_total)+" | "+nf.format(y_total)+" | "+nf.format(q_log_total)+" \t| "+nf.format(p_log_total)+"  \t| "+nf.format(qp_total)+"  | "+nf.format(qq_total)+" \t|");
        System.out.println("=========================================================================");
        System.out.println();
        System.out.println("=========================================================================");
        System.out.println("Dari tabel tersebut dapat diperoleh beberapa parameter penting, seperti : ");
        y_rata=y_total/xy;
        q_rata=q_log_total/xy;
        p_rata=p_log_total/xy;
        System.out.println("y_rata = "+nf.format(y_rata));
        System.out.println("q_rata = "+nf.format(q_rata));
        System.out.println("p_rata = "+nf.format(p_rata));
        System.out.println();
        System.out.println("=========================================================================");
        System.out.println("Sedangkan koefisien A dan B dihitung melalui persamaan (4) dan (6):");
        g=((xy*qp_total)-(q_log_total*p_log_total));
        h=((xy*qq_total)-(q_log_total*q_log_total));
        b=g/h;
        a=(p_rata-(b*q_rata));
        A=Math.pow(10,a);
        System.out.println("b = "+nf.format(b));
        System.out.println("a = "+nf.format(a));
        System.out.println("Karena A = Log a, Maka a = "+nf.format(A));
        System.out.println("Karena B = b, Maka b = "+nf.format(b));
        System.out.println();
        System.out.println("=========================================================================");
    }
}

Dan Voila...Inilah hasilnhya...!!!


Demikian Sekian dan trimakasih...Bila ada pertanyaan Monggo sedoyo comment...Tapi ingat...blajar memahami lebih baik daripada hanya mengcopy-paste saja...So...Pahamilah......

Tidak ada komentar:

Posting Komentar