/
mrFeld
/
Test
Обзор
Документация
Войти
/
mrFeld
/
Test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
8_week_class2.py
92 строки
2 KB
Vladimir N.
Approx
05 ноя 2024, 01:42
05 ноя 2024, 01:42
13a670c
Код
Авторство
О чём код?
import numpy as np import matplotlib.pyplot as plt x_vals=np.array([0,0.5,0.7,1]) y_vals= (x_vals+1)**2 # Расчёт коэффииентом встроенным методом # A=np.vstack([np.ones_like(x_vals), x_vals, x_vals**2]).T # coef = np.linalg.lstsq(A, y_vals)[0] # c0, c1, c2 = coef # Расчёт коэффииентом методом квадратных корней (в лоб) # m1 = np.mean(x_vals) # m2 = np.mean(x_vals ** 2) # m3 = np.mean(x_vals ** 3) # m4 = np.mean(x_vals ** 4) # K01 = np.mean(y_vals) # K11 = np.mean(x_vals * y_vals) # K21 = np.mean(x_vals ** 2 * y_vals) # s11 = 1 # s12 = m1 # s13 = m2 # s22 = (np.abs(m2 - m1 ** 2)) ** 0.5 # s23 = (m3 - m1 * m2) / s22 # s33 = (np.abs(m4 - (s13 ** 2 + s23 ** 2))) ** 0.5 # z1 = K01 # z2 = (K11 - m1 * K01) / s22 # z3 = (K21 - (s13 * z1 + s23 * z2)) / s33 # c2 = z3 / s33 # c1 = (z2 - s23 * c2) / s22 # c0 = z1 - (s12 * c1 + s13 * c2) # Расчёт коэффииентов методом Крамера m1 = np.mean(x_vals) m2 = np.mean(x_vals ** 2) m3 = np.mean(x_vals ** 3) m4 = np.mean(x_vals ** 4) K01 = np.mean(y_vals) K11 = np.mean(x_vals * y_vals) K21 = np.mean(x_vals ** 2 * y_vals) A = [ [1, m1, m2], [m1, m2, m3], [m2, m3, m4] ] B = [K01, K11, K21] def detM(matrix): return (matrix[0][0] * (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1]) - matrix[0][1] * (matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0]) + matrix[0][2] * (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0])) det_A = detM(A) A0 = [B, [m1, m2, m3], [m2, m3, m4]] A1 = [[1, m1, m2], B, [m2, m3, m4]] A2 = [[1, m1, m2], [m1, m2, m3], B] det_A0 = detM(A0) det_A1 = detM(A1) det_A2 = detM(A2) c0 = det_A0 / det_A c1 = det_A1 / det_A c2 = det_A2 / det_A x_range = np.linspace(min(x_vals)-1, max(x_vals)+1, 100) y_original = (x_range+1)**2 y_aprox = c0 + c1*x_range + c2*x_range**2 y_approx = c0 + c1*x_vals + c2*x_vals**2 errors = y_vals - y_approx mse = np.mean(errors**2) print(f"Найденные коэффициенты: c0 = {c0}, c1 = {c1}, c2 = {c2}") print("Аппроксимированные значения:", y_approx) print("Средний квадрат ошибки:", mse) plt.plot(x_vals, y_vals, 'o', label='Входные данные') plt.plot(x_range, y_original , 'r', label='оригинальная функция') plt.plot(x_range, y_aprox, 'r', label = 'Апроксимированное значение', color='black') plt.legend() plt.show()