lxw
2023-05-25 f3c27fb78447449a950ba73c5e72ceda64ad8a12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.whyc.service;
 
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.List;
 
public class TestLineXY {
 
    public static void main(String[] args) {
 
        DecimalFormat df = new DecimalFormat("0.##");
 
        //x pv
 
        //y uv
 
        List<Integer> x = Arrays.asList(5, 9, 15, 19, 19, 45);
 
        List<Integer> y = Arrays.asList(4, 6, 12, 15, 15, 37);
 
        /*
 
        List x=Arrays.asList(4,6,8,10,12);
 
        List y=Arrays.asList(7.8d,9.3d,9.9d,11.2d,11.9d);
 
        */
 
        System.out.println(x + "" + y);
 
        if (x.size() != y.size()) {
 
            System.out.println("分子分母数量不一致。");
 
            return;
 
        }
 
        long sum = 0;
 
        for (Integer xi : x) {
 
            sum += xi;
 
        }
 
        double avgx = sum * 1.0 / y.size();
 
        System.out.println("avg_x:" + avgx);
 
        //w的分子
        double w_molecule = 0;
        for (int i = 0; i < x.size(); i++) {
            w_molecule += y.get(i) * (x.get(i) - avgx);
        }
 
        //w的分母
        double w_denominator = 0;
        int w_denominator_xi = 0;
        for (int i = 0; i < x.size(); i++) {
            w_denominator += Math.pow(x.get(i), 2);
            w_denominator_xi += x.get(i);
        }
        w_denominator = w_denominator - (1.0 / x.size()) * (Math.pow(w_denominator_xi, 2));
 
        //System.out.println("w_denominator:"+w_denominator+" w_denominator_xi:"+w_denominator_xi);
 
        double w = w_molecule / w_denominator;
 
        System.out.println("w:" + w);
 
        double b = 1.0 / x.size();
 
        double sum_y_wx = 0;
 
        for (int i = 0; i < x.size(); i++) {
 
            sum_y_wx += (y.get(i) - w * x.get(i));
        }
 
 
        b = b * sum_y_wx;
 
        System.out.println("b:" + b);
 
        String symbol = "+";
 
        if (b < 0) {
 
            symbol = "";
 
        }
 
        System.out.println("y=" + df.format(w) + "x" + symbol + df.format(b));
 
        System.out.println(w * 15 + b);
 
    }
 
}