Вычислите smin в линейной регрессии chinquared ⇐ Python
Вычислите smin в линейной регрессии chinquared
x=[0. , 1. , 2. , 3. , 4. , 5.], f=[ 3.4 , 8.5 , 11.7 , 19.3 , 22.9 , 32.4], sigma_f=[0.3 , 0.8 , 1.2 , 1.9 , 2.3 , 3.2] напишите код для:
a) вычислить наиболее подходящие параметры a и b, их неопределенности и Smin». Код, который я написал, правильно вычисляет a, b и их неопределенности. Мой код правильно выводит все значения, кроме smin.
импортировать numpy как np Защиту getA (x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 A = (np.sum(x * y/sigma_y_sq) * np.sum(1/sigma_y_sq) - np.sum(y/sigma_y_sq) * np.sum(x/sigma_y_sq)) / знаменатель вернуть А Защиту getB (x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 B = (np.sum(y / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - np.sum(x / sigma_y_sq) * np.sum(x * y / sigma_y_sq)) / знаменатель возврат Б def getSigmaA(x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 sigma_A = np.sqrt(np.sum(1 / sigma_y_sq) / знаменатель) вернуть сигма_А def getSigmaB(x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 sigma_B = np.sqrt(np.sum(x ** 2 / sigma_y_sq) / знаменатель) вернуть сигму_Б def get_sigma_min(x, f, sigma_f, a, b): остатки = f - (a * x + b) sigma_min = np.sqrt(np.sum(остатки ** 2) / (len(x) - 2)) вернуть сигма_мин # Входные данные x = np.array([0., 1., 2., 3., 4., 5.]) f = np.array([3.4, 8.5, 11.7, 19.3, 22.9, 32.4]) sigma_f = np.array([0,3, 0,8, 1,2, 1,9, 2,3, 3,2]) # Рассчитать параметры A и B A = getA(x, f, sigma_f) B = getB(x, f, сигма_f) # Рассчитаем неопределенности для A и B сигма_А = getSigmaA(x, f, sigma_f) сигма_B = getSigmaB(x, f, sigma_f) # Вычисляем сигма_мин sigma_min = get_sigma_min(x, f, sigma_f, A, B) # Распечатать результаты print(f"Параметры линии регрессии:") print(f"A = {A:.2f}, B = {B:.2f}") print(f"Неопределенности:") print(f"sigma_A = {sigma_A:.2f}, sigma_B = {sigma_B:.2f}") print(f"sigma_min = {sigma_min:.2f}") Этот код выводит 2,19 в качестве значения smin. Должно быть 3,36. Не могу понять, в чем дело
x=[0. , 1. , 2. , 3. , 4. , 5.], f=[ 3.4 , 8.5 , 11.7 , 19.3 , 22.9 , 32.4], sigma_f=[0.3 , 0.8 , 1.2 , 1.9 , 2.3 , 3.2] напишите код для:
a) вычислить наиболее подходящие параметры a и b, их неопределенности и Smin». Код, который я написал, правильно вычисляет a, b и их неопределенности. Мой код правильно выводит все значения, кроме smin.
импортировать numpy как np Защиту getA (x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 A = (np.sum(x * y/sigma_y_sq) * np.sum(1/sigma_y_sq) - np.sum(y/sigma_y_sq) * np.sum(x/sigma_y_sq)) / знаменатель вернуть А Защиту getB (x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 B = (np.sum(y / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - np.sum(x / sigma_y_sq) * np.sum(x * y / sigma_y_sq)) / знаменатель возврат Б def getSigmaA(x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 sigma_A = np.sqrt(np.sum(1 / sigma_y_sq) / знаменатель) вернуть сигма_А def getSigmaB(x, y, sigma_y): сигма_y_sq = сигма_y ** 2 знаменатель = np.sum(1 / sigma_y_sq) * np.sum(x ** 2 / sigma_y_sq) - (np.sum(x / sigma_y_sq)) ** 2 sigma_B = np.sqrt(np.sum(x ** 2 / sigma_y_sq) / знаменатель) вернуть сигму_Б def get_sigma_min(x, f, sigma_f, a, b): остатки = f - (a * x + b) sigma_min = np.sqrt(np.sum(остатки ** 2) / (len(x) - 2)) вернуть сигма_мин # Входные данные x = np.array([0., 1., 2., 3., 4., 5.]) f = np.array([3.4, 8.5, 11.7, 19.3, 22.9, 32.4]) sigma_f = np.array([0,3, 0,8, 1,2, 1,9, 2,3, 3,2]) # Рассчитать параметры A и B A = getA(x, f, sigma_f) B = getB(x, f, сигма_f) # Рассчитаем неопределенности для A и B сигма_А = getSigmaA(x, f, sigma_f) сигма_B = getSigmaB(x, f, sigma_f) # Вычисляем сигма_мин sigma_min = get_sigma_min(x, f, sigma_f, A, B) # Распечатать результаты print(f"Параметры линии регрессии:") print(f"A = {A:.2f}, B = {B:.2f}") print(f"Неопределенности:") print(f"sigma_A = {sigma_A:.2f}, sigma_B = {sigma_B:.2f}") print(f"sigma_min = {sigma_min:.2f}") Этот код выводит 2,19 в качестве значения smin. Должно быть 3,36. Не могу понять, в чем дело
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Улучшение линейной регрессии, регуляризация L1 и L2 данных об осадках в Python
Anonymous » » в форуме Python - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-