INTRODUCTION TO COMPUTER SCIENCE
Robert Sedgewick and Kevin Wayne


This is the syntax highlighted version of LeastSquares.java.

/*************************************************************************
 *  Compilation:  javac LeastSquares.java
 *  Execution:    java LeastSquares
 *  Dependencies: InteractiveDraw.java DrawListener.java
 * 
 *  Plots the points that the user clicks, and plots the least squares
 *  line through them.
 *
 *************************************************************************/

import java.awt.Color;

public class LeastSquares implements DrawListener {
    private int N = 0;
    private double sumx  = 0.0;                     // sum { x[i],      i = 1..n
    private double sumy  = 0.0;                     // sum { y[i],      i = 1..n
    private double sumx2 = 0.0;                     // sum { x[i]*x[i], i = 1..n
    private double sumy2 = 0.0;                     // sum { y[i]*y[i], i = 1..n
    private double sumxy = 0.0;                     // sum { x[i]*y[i], i = 1..n
    private double[] x = new double[10000];
    private double[] y = new double[10000];

    private InteractiveDraw d;

    public LeastSquares() {
        d = new InteractiveDraw(512, 512);
        d.setScale(0, 0, 1, 1);
        d.addListener(this);
        d.clear(Color.lightGray);
        d.show();
    }

    public void mousePressed(double x0, double y0) {
        x[N] = x0;
        y[N] = y0; 
        sumx  += x[N];
        sumy  += y[N];
        sumx2 += x[N]*x[N];
        sumy2 += y[N]*y[N];
        sumxy += x[N]*y[N];
        N++;

        d.clear();

        // draw the least squares line
        d.setColor(Color.black);
        double a = (N*sumxy - sumx*sumy) / (N*sumx2 - sumx*sumx);
        double b = (sumy - a*sumx) / N;
        d.penUp();
        d.go(0, b);
        d.penDown();
        d.go(1, a + b);

        // draw the points
        for (int i = 0; i < N; i++) {
            d.penUp();
            d.go(x[i], y[i]);
            d.setColor(Color.blue);
            d.spot(0.015);
            d.penDown();
            d.setColor(Color.black);
            d.go(x[i], a*x[i] + b);
        }

        d.show();
    }


    public void keyTyped(char c) { d.save("leastsquares" + c + ".png"); }
    public void mouseDragged(double x, double y) { }
    public void mouseReleased(double x, double y) { }


    // test client
    public static void main(String args[]) {
        LeastSquares ls = new LeastSquares();
    }
 

   
}


Last updated: Wed May 12 15:47:31 EDT 2004 .
Copyright © 2004, Robert Sedgewick and Kevin Wayne.