mark for pull
This commit is contained in:
@@ -28,7 +28,6 @@ public class Math {
|
||||
d[6] = new Double(10.2);
|
||||
d[7] = new Double(11.7);
|
||||
|
||||
;
|
||||
System.out.println("均值: "+getMean(d)+",,标准差:"+StandardDiviation(d)+",极差:"+range(d));
|
||||
}
|
||||
|
||||
|
||||
793
ym-common/src/main/java/com/cnbm/common/spc/math/Matrix.java
Normal file
793
ym-common/src/main/java/com/cnbm/common/spc/math/Matrix.java
Normal file
@@ -0,0 +1,793 @@
|
||||
package com.cnbm.common.spc.math;
|
||||
|
||||
import com.cnbm.common.spc.math.entity.T2GraphEntity;
|
||||
import org.apache.commons.math3.distribution.FDistribution;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Desc: ""
|
||||
* @Author: caixiang
|
||||
* @DATE: 2022/9/2 15:33
|
||||
*/
|
||||
public class Matrix {
|
||||
// public static void main(String[] args) {
|
||||
// double[] xbarbar = new double[2];
|
||||
// xbarbar[0] = 115.6084;
|
||||
// xbarbar[1] = 1.0564;
|
||||
//
|
||||
// double[] xi = new double[2];
|
||||
// xi[0] = 115.84;
|
||||
// xi[1] = 1.078;
|
||||
//
|
||||
// double[] xi2 = new double[2];
|
||||
// xi2[0] = 115.76;
|
||||
// xi2[1] = 1.072;
|
||||
//
|
||||
// double[] xi3 = new double[2];
|
||||
// xi3[0] = 115.11;
|
||||
// xi3[1] = 1.015;
|
||||
//
|
||||
// double[] xi4 = new double[2];
|
||||
// xi4[0] = 116.02;
|
||||
// xi4[1] = 1.089;
|
||||
//
|
||||
// double[] xi5 = new double[2];
|
||||
// xi5[0] = 115.80;
|
||||
// xi5[1] = 1.090;
|
||||
//
|
||||
// System.out.println("Ti1:"+ forTi2(xi,xbarbar)*10);
|
||||
// System.out.println("Ti2:"+ forTi2(xi2,xbarbar)*10);
|
||||
// System.out.println("Ti3:"+ forTi2(xi3,xbarbar)*10);
|
||||
// System.out.println("Ti4:"+ forTi2(xi4,xbarbar)*10);
|
||||
// System.out.println("Ti4:"+ forTi2(xi5,xbarbar)*10);
|
||||
//// double ti = 10*()
|
||||
//
|
||||
//
|
||||
//
|
||||
// //创建一个F分布对象,参数为自由度
|
||||
// FDistribution fd = new FDistribution(2,179);
|
||||
// //当α=0.05时,参数为1-α=0.95
|
||||
// double v = fd.inverseCumulativeProbability(0.99865);
|
||||
// //输出值
|
||||
// System.out.println("v: "+v*342/179);
|
||||
//
|
||||
//
|
||||
// //m = 25 n = 1 p = 3
|
||||
// FDistribution fd2 = new FDistribution(3,21);
|
||||
// //当α=0.05时,参数为1-α=0.95
|
||||
// double v2 = fd2.inverseCumulativeProbability(0.99865);
|
||||
// //输出值
|
||||
// System.out.println("v2: "+v2);
|
||||
// }
|
||||
|
||||
// public static void main(String[] args) {
|
||||
//
|
||||
// double[] xlv = new double[5];
|
||||
// xlv[0] = 155;
|
||||
// xlv[1] = 170;
|
||||
// xlv[2] = 160;
|
||||
// xlv[3] = 162;
|
||||
// xlv[4] = 163;
|
||||
//
|
||||
// double[] weigth = new double[5];
|
||||
// weigth[0] = 125;
|
||||
// weigth[1] = 162;
|
||||
// weigth[2] = 139;
|
||||
// weigth[3] = 150;
|
||||
// weigth[4] = 146;
|
||||
//
|
||||
// double x1bar = getBar(xlv);
|
||||
// double x2bar = getBar(weigth);
|
||||
// System.out.println();
|
||||
// double s11 = forS11(xlv,x1bar);
|
||||
// double s12 = forS12(weigth,x1bar,xlv,x2bar);
|
||||
// double s22 = forS22(weigth,x2bar);
|
||||
// System.out.println();
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
public static double[][] initialDemoSource(){
|
||||
double[][] source = new double[60][6];
|
||||
source[0][0] = 1;
|
||||
source[0][1] = 1;
|
||||
source[0][2] = 155;
|
||||
source[0][3] = 100;
|
||||
source[0][4] = 60;
|
||||
source[0][5] = 125;
|
||||
|
||||
source[1][0] = 1;
|
||||
source[1][1] = 2;
|
||||
source[1][2] = 170;
|
||||
source[1][3] = 120;
|
||||
source[1][4] = 82;
|
||||
source[1][5] = 162;
|
||||
|
||||
source[2][0] = 1;
|
||||
source[2][1] = 3;
|
||||
source[2][2] = 160;
|
||||
source[2][3] = 132;
|
||||
source[2][4] = 71;
|
||||
source[2][5] = 139;
|
||||
|
||||
source[3][0] = 1;
|
||||
source[3][1] = 4;
|
||||
source[3][2] = 162;
|
||||
source[3][3] = 139;
|
||||
source[3][4] = 70;
|
||||
source[3][5] = 150;
|
||||
|
||||
source[4][0] = 1;
|
||||
source[4][1] = 5;
|
||||
source[4][2] = 163;
|
||||
source[4][3] = 110;
|
||||
source[4][4] = 80;
|
||||
source[4][5] = 146;
|
||||
|
||||
source[5][0] = 2;
|
||||
source[5][1] = 1;
|
||||
source[5][2] = 157;
|
||||
source[5][3] = 110;
|
||||
source[5][4] = 59;
|
||||
source[5][5] = 124;
|
||||
|
||||
source[6][0] = 2;
|
||||
source[6][1] = 2;
|
||||
source[6][2] = 171;
|
||||
source[6][3] = 122;
|
||||
source[6][4] = 81;
|
||||
source[6][5] = 163;
|
||||
|
||||
source[7][0] = 2;
|
||||
source[7][1] = 3;
|
||||
source[7][2] = 162;
|
||||
source[7][3] = 133;
|
||||
source[7][4] = 73;
|
||||
source[7][5] = 139;
|
||||
|
||||
source[8][0] = 2;
|
||||
source[8][1] = 4;
|
||||
source[8][2] = 165;
|
||||
source[8][3] = 140;
|
||||
source[8][4] = 72;
|
||||
source[8][5] = 152;
|
||||
|
||||
source[9][0] = 2;
|
||||
source[9][1] = 5;
|
||||
source[9][2] = 161;
|
||||
source[9][3] = 112;
|
||||
source[9][4] = 81;
|
||||
source[9][5] = 147;
|
||||
|
||||
source[10][0] = 3;
|
||||
source[10][1] = 1;
|
||||
source[10][2] = 153;
|
||||
source[10][3] = 110;
|
||||
source[10][4] = 63;
|
||||
source[10][5] = 123;
|
||||
|
||||
|
||||
source[11][0] = 3;
|
||||
source[11][1] = 2;
|
||||
source[11][2] = 169;
|
||||
source[11][3] = 120;
|
||||
source[11][4] = 86;
|
||||
source[11][5] = 161;
|
||||
|
||||
|
||||
source[12][0] = 3;
|
||||
source[12][1] = 3;
|
||||
source[12][2] = 161;
|
||||
source[12][3] = 133;
|
||||
source[12][4] = 79;
|
||||
source[12][5] = 141;
|
||||
|
||||
|
||||
source[13][0] = 3;
|
||||
source[13][1] = 4;
|
||||
source[13][2] = 160;
|
||||
source[13][3] = 140;
|
||||
source[13][4] = 72;
|
||||
source[13][5] = 153;
|
||||
|
||||
|
||||
source[14][0] = 3;
|
||||
source[14][1] = 5;
|
||||
source[14][2] = 159;
|
||||
source[14][3] = 118;
|
||||
source[14][4] = 82;
|
||||
source[14][5] = 149;
|
||||
|
||||
source[15][0] = 4;
|
||||
source[15][1] = 1;
|
||||
source[15][2] = 157;
|
||||
source[15][3] = 109;
|
||||
source[15][4] = 60;
|
||||
source[15][5] = 126;
|
||||
|
||||
|
||||
source[16][0] = 4;
|
||||
source[16][1] = 2;
|
||||
source[16][2] = 171;
|
||||
source[16][3] = 126;
|
||||
source[16][4] = 81;
|
||||
source[16][5] = 163;
|
||||
|
||||
|
||||
source[17][0] = 4;
|
||||
source[17][1] = 3;
|
||||
source[17][2] = 162;
|
||||
source[17][3] = 135;
|
||||
source[17][4] = 72;
|
||||
source[17][5] = 142;
|
||||
|
||||
|
||||
source[18][0] = 4;
|
||||
source[18][1] = 4;
|
||||
source[18][2] = 163;
|
||||
source[18][3] = 135;
|
||||
source[18][4] = 70;
|
||||
source[18][5] = 151;
|
||||
|
||||
|
||||
source[19][0] = 4;
|
||||
source[19][1] = 5;
|
||||
source[19][2] = 164;
|
||||
source[19][3] = 108;
|
||||
source[19][4] = 72;
|
||||
source[19][5] = 147;
|
||||
|
||||
source[20][0] = 5;
|
||||
source[20][1] = 1;
|
||||
source[20][2] = 156;
|
||||
source[20][3] = 108;
|
||||
source[20][4] = 70;
|
||||
source[20][5] = 126;
|
||||
|
||||
|
||||
source[21][0] = 5;
|
||||
source[21][1] = 2;
|
||||
source[21][2] = 172;
|
||||
source[21][3] = 113;
|
||||
source[21][4] = 80;
|
||||
source[21][5] = 162;
|
||||
|
||||
|
||||
source[22][0] = 5;
|
||||
source[22][1] = 3;
|
||||
source[22][2] = 162;
|
||||
source[22][3] = 130;
|
||||
source[22][4] = 70;
|
||||
source[22][5] = 141;
|
||||
|
||||
|
||||
source[23][0] = 5;
|
||||
source[23][1] = 4;
|
||||
source[23][2] = 162;
|
||||
source[23][3] = 142;
|
||||
source[23][4] = 76;
|
||||
source[23][5] = 150;
|
||||
|
||||
|
||||
source[24][0] = 5;
|
||||
source[24][1] = 5;
|
||||
source[24][2] = 164;
|
||||
source[24][3] = 110;
|
||||
source[24][4] = 83;
|
||||
source[24][5] = 146;
|
||||
|
||||
source[25][0] = 6;
|
||||
source[25][1] = 1;
|
||||
source[25][2] = 157;
|
||||
source[25][3] = 100;
|
||||
source[25][4] = 60;
|
||||
source[25][5] = 128;
|
||||
|
||||
|
||||
source[26][0] = 6;
|
||||
source[26][1] = 2;
|
||||
source[26][2] = 167;
|
||||
source[26][3] = 122;
|
||||
source[26][4] = 80;
|
||||
source[26][5] = 162;
|
||||
|
||||
|
||||
source[27][0] = 6;
|
||||
source[27][1] = 3;
|
||||
source[27][2] = 156;
|
||||
source[27][3] = 133;
|
||||
source[27][4] = 73;
|
||||
source[27][5] = 142;
|
||||
|
||||
|
||||
source[28][0] = 6;
|
||||
source[28][1] = 4;
|
||||
source[28][2] = 161;
|
||||
source[28][3] = 140;
|
||||
source[28][4] = 76;
|
||||
source[28][5] = 150;
|
||||
|
||||
|
||||
source[29][0] = 6;
|
||||
source[29][1] = 5;
|
||||
source[29][2] = 164;
|
||||
source[29][3] = 111;
|
||||
source[29][4] = 82;
|
||||
source[29][5] = 147;
|
||||
|
||||
source[30][0] = 7;
|
||||
source[30][1] = 1;
|
||||
source[30][2] = 157;
|
||||
source[30][3] = 106;
|
||||
source[30][4] = 62;
|
||||
source[30][5] = 127;
|
||||
|
||||
|
||||
source[31][0] = 7;
|
||||
source[31][1] = 2;
|
||||
source[31][2] = 167;
|
||||
source[31][3] = 130;
|
||||
source[31][4] = 83;
|
||||
source[31][5] = 162;
|
||||
|
||||
|
||||
source[32][0] = 7;
|
||||
source[32][1] = 3;
|
||||
source[32][2] = 162;
|
||||
source[32][3] = 125;
|
||||
source[32][4] = 73;
|
||||
source[32][5] = 142;
|
||||
|
||||
|
||||
source[33][0] = 7;
|
||||
source[33][1] = 4;
|
||||
source[33][2] = 161;
|
||||
source[33][3] = 144;
|
||||
source[33][4] = 76;
|
||||
source[33][5] = 152;
|
||||
|
||||
|
||||
source[34][0] = 7;
|
||||
source[34][1] = 5;
|
||||
source[34][2] = 160;
|
||||
source[34][3] = 118;
|
||||
source[34][4] = 85;
|
||||
source[34][5] = 147;
|
||||
|
||||
source[35][0] = 8;
|
||||
source[35][1] = 1;
|
||||
source[35][2] = 159;
|
||||
source[35][3] = 108;
|
||||
source[35][4] = 62;
|
||||
source[35][5] = 128;
|
||||
|
||||
|
||||
source[36][0] = 8;
|
||||
source[36][1] = 2;
|
||||
source[36][2] = 167;
|
||||
source[36][3] = 118;
|
||||
source[36][4] = 84;
|
||||
source[36][5] = 162;
|
||||
|
||||
|
||||
source[37][0] = 8;
|
||||
source[37][1] = 3;
|
||||
source[37][2] = 161;
|
||||
source[37][3] = 120;
|
||||
source[37][4] = 73;
|
||||
source[37][5] = 144;
|
||||
|
||||
|
||||
source[38][0] = 8;
|
||||
source[38][1] = 4;
|
||||
source[38][2] = 164;
|
||||
source[38][3] = 135;
|
||||
source[38][4] = 76;
|
||||
source[38][5] = 151;
|
||||
|
||||
|
||||
source[39][0] = 8;
|
||||
source[39][1] = 5;
|
||||
source[39][2] = 160;
|
||||
source[39][3] = 101;
|
||||
source[39][4] = 81;
|
||||
source[39][5] = 146;
|
||||
|
||||
source[40][0] = 9;
|
||||
source[40][1] = 1;
|
||||
source[40][2] = 157;
|
||||
source[40][3] = 97;
|
||||
source[40][4] = 57;
|
||||
source[40][5] = 126;
|
||||
|
||||
|
||||
source[41][0] = 9;
|
||||
source[41][1] = 2;
|
||||
source[41][2] = 171;
|
||||
source[41][3] = 130;
|
||||
source[41][4] = 72;
|
||||
source[41][5] = 162;
|
||||
|
||||
|
||||
source[42][0] = 9;
|
||||
source[42][1] = 3;
|
||||
source[42][2] = 162;
|
||||
source[42][3] = 134;
|
||||
source[42][4] = 68;
|
||||
source[42][5] = 144;
|
||||
|
||||
|
||||
source[43][0] = 9;
|
||||
source[43][1] = 4;
|
||||
source[43][2] = 164;
|
||||
source[43][3] = 143;
|
||||
source[43][4] = 70;
|
||||
source[43][5] = 150;
|
||||
|
||||
|
||||
source[44][0] = 9;
|
||||
source[44][1] = 5;
|
||||
source[44][2] = 166;
|
||||
source[44][3] = 114;
|
||||
source[44][4] = 80;
|
||||
source[44][5] = 147;
|
||||
|
||||
|
||||
source[45][0] = 10;
|
||||
source[45][1] = 1;
|
||||
source[45][2] = 157;
|
||||
source[45][3] = 107;
|
||||
source[45][4] = 62;
|
||||
source[45][5] = 124;
|
||||
|
||||
|
||||
source[46][0] = 10;
|
||||
source[46][1] = 2;
|
||||
source[46][2] = 172;
|
||||
source[46][3] = 122;
|
||||
source[46][4] = 81;
|
||||
source[46][5] = 160;
|
||||
|
||||
|
||||
source[47][0] = 10;
|
||||
source[47][1] = 3;
|
||||
source[47][2] = 163;
|
||||
source[47][3] = 135;
|
||||
source[47][4] = 72;
|
||||
source[47][5] = 143;
|
||||
|
||||
|
||||
source[48][0] = 10;
|
||||
source[48][1] = 4;
|
||||
source[48][2] = 164;
|
||||
source[48][3] = 141;
|
||||
source[48][4] = 70;
|
||||
source[48][5] = 148;
|
||||
|
||||
|
||||
source[49][0] = 10;
|
||||
source[49][1] = 5;
|
||||
source[49][2] = 166;
|
||||
source[49][3] = 118;
|
||||
source[49][4] = 82;
|
||||
source[49][5] = 146;
|
||||
|
||||
source[50][0] = 11;
|
||||
source[50][1] = 1;
|
||||
source[50][2] = 152;
|
||||
source[50][3] = 106;
|
||||
source[50][4] = 62;
|
||||
source[50][5] = 124;
|
||||
|
||||
|
||||
source[51][0] = 11;
|
||||
source[51][1] = 2;
|
||||
source[51][2] = 167;
|
||||
source[51][3] = 122;
|
||||
source[51][4] = 82;
|
||||
source[51][5] = 162;
|
||||
|
||||
|
||||
source[52][0] = 11;
|
||||
source[52][1] = 3;
|
||||
source[52][2] = 158;
|
||||
source[52][3] = 137;
|
||||
source[52][4] = 74;
|
||||
source[52][5] = 146;
|
||||
|
||||
|
||||
source[53][0] = 11;
|
||||
source[53][1] = 4;
|
||||
source[53][2] = 159;
|
||||
source[53][3] = 146;
|
||||
source[53][4] = 72;
|
||||
source[53][5] = 150;
|
||||
|
||||
|
||||
source[54][0] = 11;
|
||||
source[54][1] = 5;
|
||||
source[54][2] = 160;
|
||||
source[54][3] = 98;
|
||||
source[54][4] = 82;
|
||||
source[54][5] = 145;
|
||||
|
||||
source[55][0] = 12;
|
||||
source[55][1] = 1;
|
||||
source[55][2] = 153;
|
||||
source[55][3] = 106;
|
||||
source[55][4] = 62;
|
||||
source[55][5] = 122;
|
||||
|
||||
|
||||
source[56][0] = 12;
|
||||
source[56][1] = 2;
|
||||
source[56][2] = 168;
|
||||
source[56][3] = 125;
|
||||
source[56][4] = 85;
|
||||
source[56][5] = 164;
|
||||
|
||||
|
||||
source[57][0] = 12;
|
||||
source[57][1] = 3;
|
||||
source[57][2] = 159;
|
||||
source[57][3] = 137;
|
||||
source[57][4] = 72;
|
||||
source[57][5] = 144;
|
||||
|
||||
|
||||
source[58][0] = 12;
|
||||
source[58][1] = 4;
|
||||
source[58][2] = 162;
|
||||
source[58][3] = 146;
|
||||
source[58][4] = 73;
|
||||
source[58][5] = 149;
|
||||
|
||||
|
||||
source[59][0] = 12;
|
||||
source[59][1] = 5;
|
||||
source[59][2] = 167;
|
||||
source[59][3] = 99;
|
||||
source[59][4] = 70;
|
||||
source[59][5] = 148;
|
||||
return source;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
double[][] source = initialDemoSource();
|
||||
|
||||
T2GraphEntity[] all = new T2GraphEntity[12];
|
||||
|
||||
//取值
|
||||
for(int i=1;i<=12;i++){
|
||||
T2GraphEntity t = new T2GraphEntity();
|
||||
|
||||
for(int j=0;j<source.length;j++){
|
||||
if(source[j][0] == i){
|
||||
|
||||
//1=观察对象、2=心率 、3=收缩压 、4=舒张压 、5=体重 、
|
||||
t.getX1Source().add(source[j][1]);
|
||||
t.getX2Source().add(source[j][3]);
|
||||
}
|
||||
}
|
||||
all[i-1] = t;
|
||||
}
|
||||
|
||||
//计算每个子组的 x1bar、x2bar、S11、S12、S22
|
||||
System.out.println();
|
||||
for(int i=0;i<all.length;i++){
|
||||
T2GraphEntity t2 = all[i];
|
||||
double[] x1Source = ListTodouble(t2.getX1Source());
|
||||
double[] x2Source = ListTodouble(t2.getX2Source());
|
||||
double x1bar = getBar(x1Source);
|
||||
double x2bar = getBar(x2Source);
|
||||
t2.setX1bar(x1bar);
|
||||
t2.setX2bar(x2bar);
|
||||
t2.setS11(forS11(x1Source,x1bar));
|
||||
t2.setS12(forS12(x1Source,x1bar,x2Source,x2bar));
|
||||
t2.setS22(forS22(x2Source,x2bar));
|
||||
}
|
||||
|
||||
//计算母体的 x1barbar、x2barbar、S11bar、S12bar、S22bar
|
||||
double x1barbar = 0;
|
||||
double x2barbar = 0;
|
||||
double s11bar = 0;
|
||||
double s12bar = 0;
|
||||
double s22bar = 0;
|
||||
for(int i=0;i<all.length;i++){
|
||||
T2GraphEntity t2 = all[i];
|
||||
x1barbar += t2.getX1bar();
|
||||
x2barbar += t2.getX2bar();
|
||||
s11bar += t2.getS11();
|
||||
s12bar += t2.getS12();
|
||||
s22bar += t2.getS22();
|
||||
}
|
||||
x1barbar /= all.length;
|
||||
x2barbar /= all.length;
|
||||
s11bar /= all.length;
|
||||
s12bar /= all.length;
|
||||
s22bar /= all.length;
|
||||
|
||||
//算 Ti2
|
||||
double[][] sbar = new double[2][2];
|
||||
sbar[0][0] = s11bar;
|
||||
sbar[0][1] = s12bar;
|
||||
sbar[1][0] = s12bar;
|
||||
sbar[1][1] = s22bar;
|
||||
double[][] inverse = inverseSE(sbar);
|
||||
|
||||
double[] xbarbar = new double[2];
|
||||
xbarbar[0] = x1barbar;
|
||||
xbarbar[1] = x2barbar;
|
||||
for(int i=0;i<all.length;i++){
|
||||
T2GraphEntity t2 = all[i];
|
||||
double[] xibar = new double[2];
|
||||
xibar[0] = t2.getX1bar();
|
||||
xibar[1] = t2.getX2bar();
|
||||
double ti = forTi2(xibar, xbarbar, inverse);
|
||||
t2.setTi(ti*6);
|
||||
}
|
||||
System.out.println();
|
||||
|
||||
//算 ucl
|
||||
//创建一个F分布对象,参数为自由度
|
||||
FDistribution fd = new FDistribution(2,59);
|
||||
//当α=0.05时,参数为1-α=0.95
|
||||
double v = fd.inverseCumulativeProbability(0.99865);
|
||||
//输出值
|
||||
System.out.println("v: "+v);
|
||||
double m = 12;
|
||||
double n = 6;
|
||||
double p = 2;
|
||||
double head = (double) 110/(double)59;
|
||||
double ucl = head*v;
|
||||
System.out.println();
|
||||
|
||||
for(int i=0;i< all.length;i++){
|
||||
T2GraphEntity t2GraphEntity = all[i];
|
||||
System.out.println(i+" 位置: "+t2GraphEntity.getTi());
|
||||
}
|
||||
System.out.println("ucl:" + ucl);
|
||||
}
|
||||
|
||||
public static double[] ListTodouble(List<Double> list){
|
||||
Double[] doubles=new Double[list.size()];
|
||||
list.toArray(doubles);
|
||||
if(doubles==null){
|
||||
return null;
|
||||
}
|
||||
double[] result=new double[doubles.length];
|
||||
for(int i=0;i<doubles.length;i++){
|
||||
result[i]=doubles[i].doubleValue();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static double getBar(double[] d){
|
||||
return Arrays.stream(d).average().getAsDouble();
|
||||
}
|
||||
|
||||
public static double forS11(double[] source , double x1bar){
|
||||
double all = 0;
|
||||
for(int i=0;i<source.length;i++){
|
||||
double c = source[i]-x1bar;
|
||||
all += c*c;
|
||||
}
|
||||
return all/(source.length-1);
|
||||
}
|
||||
public static Double forS12(double[] source1 , double x1bar , double[] source2 , double x2bar){
|
||||
double all = 0;
|
||||
if(source1.length != source2.length){
|
||||
return null;
|
||||
}
|
||||
for(int i=0;i<source1.length;i++){
|
||||
double c1 = source1[i]-x1bar;
|
||||
double c2 = source2[i]-x2bar;
|
||||
all += c1*c2;
|
||||
}
|
||||
return all/(source1.length-1);
|
||||
}
|
||||
public static double forS22(double[] source , double x2bar){
|
||||
double all = 0;
|
||||
for(int i=0;i<source.length;i++){
|
||||
double c = source[i]-x2bar;
|
||||
all += c*c;
|
||||
}
|
||||
return all/(source.length-1);
|
||||
}
|
||||
|
||||
public static double forTi2(double[] xibar,double[] xbarbar,double[][] inverse) {
|
||||
|
||||
double[] xf = new double[2];
|
||||
xf[0] = xibar[0]-xbarbar[0];
|
||||
xf[1] = xibar[1]-xbarbar[1];
|
||||
|
||||
double[] ff = new double[2];
|
||||
ff[0] = xf[0]*inverse[0][0] + xf[1]*inverse[1][0];
|
||||
ff[1] = xf[0]*inverse[0][1] + xf[1]*inverse[1][1];
|
||||
|
||||
return ff[0]*xf[0] + ff[1]*xf[1];
|
||||
|
||||
}
|
||||
|
||||
public static double formatDouble(double d) {
|
||||
// 新方法,如果不需要四舍五入,可以使用RoundingMode.DOWN
|
||||
BigDecimal bg = new BigDecimal(d).setScale(4, RoundingMode.UP);
|
||||
return bg.doubleValue();
|
||||
}
|
||||
|
||||
//2阶矩阵 求逆
|
||||
public static double[][] inverseSE(double[][] source){
|
||||
double a = source[0][0];
|
||||
double b = source[0][1];
|
||||
double c = source[1][0];
|
||||
double d = source[1][1];
|
||||
double to = 1/(a*d-b*c);
|
||||
double[][] res = new double[2][2];
|
||||
// res[0][0] = formatDouble(d*to);
|
||||
// res[0][1] = formatDouble(b*to*-1);
|
||||
// res[1][0] = formatDouble(c*to*-1);
|
||||
// res[1][1] = formatDouble(a*to);
|
||||
res[0][0] = d*to;
|
||||
res[0][1] = b*to*-1;
|
||||
res[1][0] = c*to*-1;
|
||||
res[1][1] = a*to;
|
||||
return res;
|
||||
}
|
||||
|
||||
//获取矩阵的逆
|
||||
public static int[][] inverse(int[][] A) {
|
||||
int[][] B = new int[A.length][A[0].length];
|
||||
for (int i = 0; i < A.length; i++) {
|
||||
for (int j = 0; j < A[0].length; j++) {
|
||||
B[i][j] = A[i][j];
|
||||
}
|
||||
}
|
||||
int[][] C = new int[A.length][A[0].length];
|
||||
for (int i = 0; i < A.length; i++) {
|
||||
for (int j = 0; j < A[0].length; j++) {
|
||||
C[i][j] = (int) java.lang.Math.pow(-1, i + j) * determinant(minor(B, j, i));
|
||||
}
|
||||
}
|
||||
int[][] D = new int[A.length][A[0].length];
|
||||
for (int i = 0; i < A.length; i++) {
|
||||
for (int j = 0; j < A[0].length; j++) {
|
||||
D[i][j] = C[i][j] / determinant(A);
|
||||
}
|
||||
}
|
||||
return D;
|
||||
}
|
||||
//求解矩阵的行列式
|
||||
private static int determinant(int[][] a) {
|
||||
if (a.length == 1) {
|
||||
return a[0][0];
|
||||
}
|
||||
int det = 0;
|
||||
for (int i = 0; i < a[0].length; i++) {
|
||||
det += (int) java.lang.Math.pow(-1, i) * a[0][i] * determinant(minor(a, 0, i));
|
||||
}
|
||||
return det;
|
||||
}
|
||||
//求解二维矩阵在某一位置的伴随矩阵
|
||||
private static int[][] minor(int[][] b, int i, int j) {
|
||||
int[][] a = new int[b.length - 1][b[0].length - 1];
|
||||
for (int x = 0, y = 0; x < b.length; x++) {
|
||||
if (x == i) {
|
||||
continue;
|
||||
}
|
||||
for (int m = 0,n = 0; m < b[0].length; m++) {
|
||||
if (m == j) {
|
||||
continue;
|
||||
}
|
||||
a[y][n] = b[x][m];
|
||||
n++;
|
||||
}
|
||||
y++;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.cnbm.common.spc.math.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Desc: ""
|
||||
* @Author: caixiang
|
||||
* @DATE: 2022/9/9 15:26
|
||||
*/
|
||||
@Data
|
||||
public class T2GraphEntity {
|
||||
private double x1bar;
|
||||
private double x2bar;
|
||||
private double s11;
|
||||
private double s12;
|
||||
private double s22;
|
||||
private double ti;
|
||||
private List<Double> x1Source;
|
||||
private List<Double> x2Source;
|
||||
|
||||
public T2GraphEntity(){
|
||||
x1Source = new ArrayList<>();
|
||||
x2Source = new ArrayList<>();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user