- •Вариант - 8
- •Моделирование химико-технологических процессов
- •Теоретическая часть Экспериментально-статистические модели на основе активного эксперимента (методы планирования экстремальных экспериментов)
- •Планы первого порядка. Полный факторный эксперимент.
- •Свойства матрицы планирования
- •Расчет коэффициентов регрессии
- •Статистический анализ уравнения регрессии
- •Исходные данные
- •Ход работы
- •Результаты исследования
- •Приложение a
- •Приложение б
Приложение a
X0 = [+1, +1, +1, +1, +1, +1, +1, +1]
X1 = [+1, -1, +1, -1, +1, -1, +1, -1]
X2 = [+1, +1, -1, -1, +1, +1, -1, -1]
X3 = [+1, +1, +1, +1, -1, -1, -1, -1]
Y1 = [32.29, 25.8, 38.24, 19.5, 37.42, 42.54, 31.2, 46.7]
Y2 = [32.34, 26.0, 38.35, 19.52, 37.69, 42.94, 29.85, 46.1]
b0 = 0
b1 = 0
b2 = 0
b3 = 0
n = 3
l = 2
numbers = l**n
L = n + 1
print("Расчет коэффициентов регрессии:")
Ysr = [i for i in range(numbers)]
for i in range(numbers):
Ysr[i] = (Y1[i] + Y2[i])/2
print(f"Ysr : [Ysr1 = {Ysr[0]:.3f}, Ysr2 = {Ysr[1]:.3f}, Ysr3 = {Ysr[2]:.3f}, Ysr4 = {Ysr[3]:.3f}, Ysr5 = {Ysr[4]:.3f}, Ysr6 = {Ysr[5]:.3f}, Ysr7 = {Ysr[6]:.3f}, Ysr8 = {Ysr[7]:.3f}]")
for i in range(numbers):
b0 = b0 + Ysr[i]/numbers
b1 = b1 + Ysr[i] *X1[i]/numbers
b2 = b2 + Ysr[i] *X2[i]/numbers
b3 = b3 + Ysr[i] *X3[i]/numbers
print(f"b0 = {b0:.3f}, b1 = {b1:.3f}, b2 = {b2:.3f}, b3 = {b3:.3f}")
Yr = [i for i in range(numbers)]
for i in range(numbers):
Yr[i] = b0 + b1 * X1[i] + b2 * X2[i] + b3 * X3[i]
print(f"Yr : [Yr1 = {Yr[0]:.3f}, Yr2 = {Yr[1]:.3f}, Yr3 = {Yr[2]:.3f}, Yr4 = {Yr[3]:.3f}, Yr5 = {Yr[4]:.3f}, Yr6 = {Yr[5]:.3f}, Yr7 = {Yr[6]:.3f}, Yr8 = {Yr[7]:.3f}]")
print("Уравнение регрессии:")
print(f"Y^ = {b0:.3f} + {b1:.3f} * X1 + {b2:.3f} * X2 + {b3:.3f} * X3", end='\n\n')
# Регрессионный анализ
print("1. Оценка дисперсии воспроизводимости (оценка ошибки опыта)")
S2 = [i for i in range(numbers)]
for i in range(numbers):
S2[i] = (Y1[i]-Ysr[i])**2 + (Y2[i]-Ysr[i])**2
print(f"S2 : [S2_1 = {S2[0]:.3f}, S2_2 = {S2[1]:.3f}, S2_3 = {S2[2]:.3f}, S2_4 = {S2[3]:.3f}, S2_5 = {S2[4]:.3f}, S2_6 = {S2[5]:.3f}, S2_7 = {S2[6]:.3f}, S2_8 = {S2[7]:.3f}]")
S2_sum = sum(S2)
print(f"sum_S2 = {S2_sum:.3f}")
print("Критерий Кохрена:")
G = max(S2)/S2_sum
print(f"G = {G:.4f}")
Gt = 0.6798
if G < Gt:
print(f"Так как {G:.4f} < {Gt}, то дисперсия однородна", end='\n\n')
else:
print(f"Так как {G:.4f} > {Gt}, то дисперсия не однородна", end='\n\n')
print("2. Оценка значимости коэффициентов по критерию Стьюдента")
S_vospr2 = sum(S2)/numbers
print(f"S_vospr2 = {S_vospr2:.4f}")
Sb2 = S_vospr2/numbers
tb = [j for j in range(4)]
b = [b0, b1, b2, b3]
for j in range(4):
tb[j] = abs(b[j])/Sb2**0.5
print(f"tb0 = {tb[0]:.3f}, tb1 = {tb[1]:.3f}, tb2 = {tb[2]:.3f}, tb3 = {tb[3]:.3f}" )
tt = 2.31
Y = [i for i in range(numbers)]
for j in range(4):
if tb[j] > tt:
print(f"Коэффициент регрессии b{j} значим так как {tb[j]:.3f} > {tt}")
elif tb[j] < tt:
print(f"Коэффициент регрессии b{j} не значим, так как {tb[j]:.3f} < {tt}, поэтому b{j} приравнивается к 0 и исключается из уравнения")
b[j] = 0
print(f"Уравнение будет иметь вид: Y^ = {b[0]:.3f} + {b[1]:.3f} * X1 + {b[2]:.3f} * X2 + {b[3]:.3f} * X3", end='\n\n')
print("3. Проверка модели на адекватность по критерию Фишера")
for i in range(numbers):
Y[i] = b[0] + b[1] * X1[i] + b[2] * X2[i] + b[3] * X3[i]
print(f"Y = {Y[0]:.3f}, {Y[1]:.3f}, {Y[2]:.3f}, {Y[3]:.3f}, {Y[4]:.3f}, {Y[5]:.3f}, {Y[6]:.3f}, {Y[7]:.3f}")
S_ost2 = 0
for i in range (numbers):
S_ost2 += ((Ysr[i] - Y[i])**2) * 1/(numbers-L)
print(f"S_ost2 = {S_ost2:.3f}")
F = S_ost2/S_vospr2
print(f"F = {F:.3f}")
Ft = 3.8
if F < Ft:
print(f"Так как {F:.3f} < {Ft}, уравнение регрессии адекватно")
elif F > Ft:
print(f"Так как {F:.3f} > {Ft}, уравнение регрессии неадекватно")
