построй функцию наилучшее приближение функции f(x) = sin(pi * x) в конечномерном подпространстве K гильбертова пространства интегрируемых с квадратом функций определённых на отрезке от минус 1 до 1 в котором скалярное произведение определено как интеграл от минус 1 до 1, где K класс многочленов степени не выше 4
Resposta
Для построения наилучшего приближения функции f(x)=sin(πx) в подпространстве многочленов степени не выше 4 с заданным скалярным произведением, необходимо решить задачу ортогональной проекции.
Шаги решения:
Определение пространства и задачи:
Пусть K — пространство многочленов степени не выше 4. Нам нужно найти многочлен p(x)∈K, минимизирующий норму:
∥f(x)−p(x)∥2=∫−11(sin(πx)−p(x))2dx→min.
Ортогональность:
Условие минимизации эквивалентно ортогональности ошибки приближения f(x)−p(x) к любому многочлену степени не выше 4. То есть:
∫−11(sin(πx)−p(x))xkdx=0,k=0,1,2,3,4.
Построение и решение системы:
Получается система из 5 линейных уравнений относительно коэффициентов многочлена p(x)=a0+a1x+a2x2+a3x3+a4x4:
Реализация на Python:
Вот простая функция, вычисляющая наилучшее приближение:
python
import numpy as np
from scipy.integrate import quad
from numpy.polynomial import Polynomial
defbest_poly_approximation(f, degree, interval=(-1,1)):# Создание матрицы и вектора правых частей A = np.zeros((degree+1, degree+1)) b = np.zeros(degree+1)# Заполнение матрицы и вектораfor i inrange(degree+1):for j inrange(degree+1): A[i, j], _ = quad(lambda x: x**(i+j), interval[0], interval[1]) b[i], _ = quad(lambda x: f(x)* x**i, interval[0], interval[1])# Решение линейной системы coeffs = np.linalg.solve(A, b)return Polynomial(coeffs)# Функция для приближенияf =lambda x: np.sin(np.pi * x)# Вычисляем многочлен степени 4poly = best_poly_approximation(f,4)# Вывод коэффициентовprint(poly)
Эта функция вернёт многочлен с коэффициентами, наилучшим образом приближающий исходную функцию в заданном подпространстве многочленов степени не выше 4.