Дано: исходная функция \(f : X → Y\), «базис» \(g_i : X → Y \qquad f, g_i ∈ F(X,Y)\), условия интерполяции \(λ_j : F(X, Y) → 𝐑\)
Найти: \(Pf = \sum\limits^n_{i=1} α_i \, g_i\), такую, что \(λ_j[Pf] = λ_j[f]\).
\(\color{red}{λ_j(f)}\), \(\color{blue}{f}\), \(\color{green}{Pf}\)
\(G(X, Y)\) — линейная оболочка \(\{g_i\}\) в \(F(X,Y)\)
\(Λ(X, Y)\) — линейная оболочка \(\{λ_j\}\) в \(F^*(X, Y)\)
Найти \(P : F(X, Y) → G(X, Y)\) т.ч. \(λ(f)=λ(Pf) | λ ∈ Λ\).
Теорема (с. 12). При линейно независимых \(g_i\) и \(λ_j\):
\(Pf ≡ Σ_i α_i g_i\)
Как и в случае с решением линейных систем, необходимо учитывать вычислительную погрешность.
Число обусловленности базиса \(g_i\): \(\mathrm{cond}(g_i) = \dfrac{\min_α{K(α)}}{\max_α{K(α)}}\)
\(K(α) = \dfrac{\| \sum α_i g_i \|_G}{\| α \|}\)
Работаем с функциями одной переменной на отрезке \(f : 𝐑 ⊃ [a, b] → 𝐑\)
Для точек \(x_1 < x_2 < … < x_n\) и условий \(λ_j = f(x_j)\):
\(l_i(x) = \prod\limits_{j \neq i} \dfrac{x - x_j}{x_i - x_j}\)
\(λ_j(l_i) = δ_{ij}\)
\(L f = \sum f(x_i) l_i\)
Число обусловленности: \(κ ⩾ C e^{n/2}\)
Требования ко второй задаче и заготовку программного кода можно скачать в дисплейных классах.
Для этого в терминале нужно запустить текстовый браузер lynx
:
lynx
Для сохранения файла на диск стрелками выделите ссылку на файл и нажмите D. Этот же файл доступен по ссылке: https://goo.gl/HCXKZV
.c
или .cpp
-файлов) с заданным интерфейсом:int method_init(int n, double a, double b, double *values, double *derivatives, double *state);
double method_compute(int n, double x, double *state)
int method_init(int n, double a, double b, double *values, double *derivatives, double *state);
Первая функция вычисляет коэффициенты приближения и сохраняет их в массив state
. Аргументы первой функции:
n
— количество точекa, b
— границы отрезка приближенияvalues
— массив значений в точкахderivatives
— массив производных в точкахstate
— память для хранения коэффициентов приближенияВторая функция вычисляет значение приближения \(Pf\), заданное в массиве state
в точке x
.
n
— количество точек, по которым выполнялось приближениеx
— аргумент функцииstate
— массив коэффициентов приближенияТем, кто использует C++ может быть удобнее написать класс, который хранит n
и state
в полях. Тогда можно единообразно обрабатывать при рисовании исходную функцию и приближение (через базовый класс).
Будем использовать заготовку на Qt
. Для этого нужно скачать graph_qt4.zip
через lynx
, или по ссылке: https://goo.gl/OVGfVe
Для сборки вам понадобится установленная версия Qt4 и команды:
qmake
make
В дисплейных классах вместо qmake
нужно использовать команду qmake-qt4