Генералов Кирилл N1
import numpy as np import math f = open("order", "r") f1 = open("without_b", "w") f2 = open("export", "w") X = [] Y = [] for line in f:
q, x, y, z = map(float,line.split()) xy =[] xy.append(x) xy.append(y) X.append(xy) Y.append(z) f1.write(str(x)) f1.write(" ") f1.write(str(y)) f1.write("\n") f2.write(str(z)) f2.write("\n")
f.close() f1.close() f2.close() sum = 0.0 count = 1 for i in range(len(Y)-1):
if X[i+1][0] == X[i][0] and X[i+1][1] == X[i][1]: sum += Y[i] count += 1
sum += Y[54] NY = Y[:-count] NY.append(sum/count) NX = X[:-count+1] f4 = open("with_b","r") X1 = [] for line in f4:
x, y, z = map(float, line.split()) xy = [] xy.append(x) xy.append(y) xy.append(z) X1.append(xy)
f4.close()
mx1 = np.matrix(X1) mx = np.matrix(NX) my = np.matrix(NY)
- y=b1*x1+b2*x2
B1 = np.matmul(np.transpose(mx), mx) B2 = np.matmul(np.linalg.inv(B1), np.transpose(mx)) B = np.matmul(B2, NY) print("матрица коэффициенто b для с отсутствующим b0",B)
- y=b0+b1*x1+b2*x2
B10 = np.matmul(np.transpose(mx1), mx1) B20 = np.matmul(np.linalg.inv(B10), np.transpose(mx1)) B01 = np.matmul(B20, NY) print("матрица коэффициенто b для уравнения с b0", B01) yPs = sum/count print("значения y при паралленых опытов",yPs) sumP = 0.0 sumA = 0.0 sumA0 = 0.0 i = 0 while i < len(Y):
if i >= 49: sumP += (Y[i] - yPs)**2 else: sumA += (Y[i]-(X[i][0] * B[0, 0] + X[i][1] * B[0, 1])) ** 2 sumA0 += (Y[i] - (X1[i][0] * B01[0, 0] + X1[i][1] * B01[0, 1] + X1[i][2] * B01[0, 2])) ** 2 i += 1
print(" ") print("дисперсия аппроксимации для уравнения с отсутствующим b0",sumA/(len(NY)-2)) print("дисперсия аппроксимации для уравнения с b0",sumA0/(len(NX)-3)) print("дисперсия воспроизводимости",sumP/(count-1)) print("Адекватность для уравнения с отсутствующим b0",(sumA/(len(NY)-2))/(sumP/(count-1))) print("Адекватность модели для уравнения с b0",(sumA0/(len(NY)-3))/(sumP/(count-1))) Mx1 = np.sum(NX[0])/len(NX) Mx2 = np.sum(NX[1])/len(NX) My = np.sum(NY) / len(NY) print(" ") print("Mx1=",Mx1,"Mx2=", Mx2,"My=", My,) Dx1 = 0 Dx2 = 0 Dy = 0 for i in range(len(NY)):
Dx1 += (NX[i][0]-Mx1) ** 2 Dx2 += (NX[i][1]-Mx2) ** 2 Dy += (NY[i]-My) ** 2
Dx1 = Dx1/(len(NX)-1) Dx2 = Dx2/(len(NX)-1) Dy = Dy/(len(NY)-1) print("Dx1=", Dx1,"Dx2=", Dx2,"Dy=", Dy) kxl1 = 0 kxl2 = 0 for i in range(len(NY)):
kxl1 += ((NX[i][0] - Mx1) * (NY[i] - My)) kxl2 += ((NX[i][1] - Mx2) * (NY[i] - My))
r1 = (kxl1/(len(NX)-1))/(math.sqrt(Dx1)*math.sqrt(Dy)) r2 = (kxl2/(len(NX)-1))/(math.sqrt(Dx2)*math.sqrt(Dy)) print("r1=",r1) print("r2=",r2) b1 = r1*math.sqrt(Dy)/(math.sqrt(Dx1)) b2 = r2*math.sqrt(Dy)/(math.sqrt(Dx2)) b0 = My - b1 * Mx1 - b2 * Mx2 print("b0=",b0) print("b1=",b1) print("b2=",b2)
Вывод:
матрица коэффициентов b для с отсутствующим b0 -- 6.21947126 -8.28672793 матрица коэффициентов b для уравнения с b0 -- 1.98049713 6.19971918 -8.29944377 значения y при параллельных опытов -- -103.01333333333334
дисперсия аппроксимации для уравнения с отсутствующим b0 -- 0.5581178587847783 дисперсия аппроксимации для уравнения с b0 -- 0.00665347955397351 дисперсия воспроизводимости -- 0.016706666666666932 Адекватность для уравнения с отсутствующим b0 -- 33.40689497913624 Адекватность модели для уравнения с b0 -- 0.39825296611971694
Mx1= 3.36 Mx2= 2.94 My= -57.28606666666666 Dx1= 3485.06857142857 Dx2= 3048.5800000000013 Dy= 83576.27727831746 r1= 0.2239632426670854 r2= -0.4519976634037742 b0= -54.01331991003878 b1= 1.0967625037018953 b2= -2.3666220302946437