Реализация значений гибельтрова пространства
У меня есть задача написать программу:
Пусть Нp[0, 1] - гильбертово пространство функций, суммируемых с квадратом на [0, 1], скалярное произведение в котором имеет вид (x,y) = x(t)y(t)p(f)dt
где p(t) непрерывна на [0, 1] и p(t) > 0 на [0, 1]. Для заданной функции x(t) принадлежащей Hp[0, 1] найти элемент наилучшего приближения элементами подпространства L многочленов степени n <= 3. Составить и реализовать на ЭВМ алгоритм решения этой задачи, предусматривающий:
- ортогонализацию базиса L (вычисление интегралов по формуле Симпсона с шагом 0,05);
- выдачу на печать коэффициентов многочлена u*(t) по степеням и величины p(x, L) = ||x - u*| Hp[0,1];
- в случае, когда весовая функция p(t) зависит от параметра a, исследование зависимости p(x, L) от a при а € [0, 1], изменяющемся с шагом 0,1;
- построение графиков x(t) и элемента наилучшего приближения (t) (в вариантах с параметром - только при а = 0 и а = 1);
- проверку правильности составления алгоритма на варианте x(t) = t^3, p(t) = 1.
Я реализовал для начала вычисление по формуле Симпсона с шагом 0.05:
public static double Integrate(Func<double, double> func, double a, double b)
{
double sum = 0;
double n = 10;
while (Math.Abs((b - a) / n) > 0.05)
{
n++;
}
double h = (b - a) / n;
double x = a + h;
while (x < b)
{
sum += 4 * func(x);
x += h;
sum += 2 * func(x);
x += h;
}
sum = (h / 3) * (sum + func(a) - func(b));
return sum;
}
Тестирую на данных
x_t = (Func<double, double>)(t => Math.Pow(1.0 + t * t, 1.0 / 3.0));
p_t = (Func<double, double, double>)((t, alpha) => 1.0 + alpha * Math.Pow(t, 2.0));
Сделал вывод графиков x(t). Но у меня проблема с расчетом элементов и нормы наилучшего приближения.
При ручном расчете, будет что элемент наилучшего приближения получается:
1
0
0,4
-0,1
А норма наилучшего приближения -
4,8E-05
Но я не могу получить эти значения. Вопрос как рассчитать эти значения с учетом ортогонализацией базиса L и какой код написать?
P.S Можно на любом удобном языке. (C#/C++/Python) Я бы желал разобраться и понять как лучше сделать мне.