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.