java通过最小二乘法分析数据
时间: 2023-11-15 11:11:23 浏览: 38
最小二乘法是一种常用的数据分析方法,可以用于拟合数据,并且可以得到拟合曲线的系数和相关统计量。在Java中,可以使用Math库中的相关函数来实现最小二乘法分析数据。
以下是一个简单的示例代码,用于分析一组数据,并且绘制数据点和拟合曲线:
```
import java.awt.*;
import javax.swing.*;
public class LeastSquares {
public static void main(String[] args) {
double[] x = {1, 2, 3, 4, 5};
double[] y = {1.2, 3.5, 4.1, 4.8, 5.2};
int n = x.length;
// 计算 x 和 y 的平均值
double xMean = 0.0;
double yMean = 0.0;
for (int i = 0; i < n; i++) {
xMean += x[i];
yMean += y[i];
}
xMean /= n;
yMean /= n;
// 计算回归系数 b 和 a
double sxx = 0.0;
double sxy = 0.0;
for (int i = 0; i < n; i++) {
sxx += (x[i] - xMean) * (x[i] - xMean);
sxy += (x[i] - xMean) * (y[i] - yMean);
}
double b = sxy / sxx;
double a = yMean - b * xMean;
// 计算相关系数 r
double ssr = 0.0;
double sst = 0.0;
for (int i = 0; i < n; i++) {
double fit = a + b * x[i];
ssr += (fit - yMean) * (fit - yMean);
sst += (y[i] - yMean) * (y[i] - yMean);
}
double r = ssr / sst;
// 绘制数据点和拟合曲线
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
JPanel panel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
int x1 = 50;
int y1 = 350;
int x2 = 350;
int y2 = 50;
g.drawLine(x1, y1, x2, y2);
g.drawString("x", x2, y1);
g.drawString("y", x1, y2);
for (int i = 0; i < n; i++) {
int px = x1 + (int) ((x[i] - x[0]) / (x[n - 1] - x[0]) * (x2 - x1));
int py = y1 - (int) ((y[i] - y[0]) / (y[n - 1] - y[0]) * (y1 - y2));
g.fillOval(px - 3, py - 3, 6, 6);
}
for (int i = 0; i < 100; i++) {
double xx = x[0] + (x[n - 1] - x[0]) * i / 100.0;
double yy = a + b * xx;
int px = x1 + (int) ((xx - x[0]) / (x[n - 1] - x[0]) * (x2 - x1));
int py = y1 - (int) ((yy - y[0]) / (y[n - 1] - y[0]) * (y1 - y2));
g.drawLine(px, py, px + 1, py + 1);
}
g.drawString("r = " + r, 50, 50);
g.drawString("y = " + a + " + " + b + "x", 50, 70);
}
};
frame.add(panel);
frame.setVisible(true);
}
}
```
运行程序,会弹出一个窗口,显示数据点和拟合曲线。拟合曲线的方程和相关系数 r 也会显示在窗口中。