дорогие товарищи, здравствуйте.
Увы я не совсем правильно сформулировал вопрос в первый раз.
Нужно оценить апроксимацию функции сплайнами первого порядка. Т.е. "накопление" значений разности по модулю между функцией и соответствующим сплайном
на отрезке
.
Но пока проблема не в этом, а в реализации самой функции сплайна на этих участках.
Да, в узлах сетки, значение сплайна совпадает с функцией, но в промежутках, они различны.
Для того, чтобы посчитать их, я пытаюсь записать функцию, которая будет находить значение j-того сплайна, на интервале
Код написан в Wolfram Mathematica
Код:
Для функции начальны еданные таковы
a = -10.;
b = 10.;
n = 10.;
f[x_] := Exp[x]
h = (b - a)/n;
X[n_] := Table[{a + h *k, f[a + h*k]}, {k, 0, n}]
X[n] // MatrixForm
в эту функцию надо занести данный из х и она должа записать таблицу со значениями сплайна в этой точке х.
sg1[x_, n0_] := Module[{n = n0, j, X = X[n]},
For[j = 1, j <= n + 1, j++,
If[x < (j)*h && x > (j - 1)*h,
s = Table[{j + 1,
f[X[[j, 2]]]*(x - X[[j + 1, 1]])/(X[[j, 1]] - X[[j + 1, 1]]) +
f[X[[j + 1,
2]]]*((x - X[[j, 1]])/(X[[j + 1]] - X[[j, 1]]))}, {j, 1,
n}]]]
]
x1 = Table[x, {x, a, b, 1/5}];
x1
sg1[x1, n]
s
Но почему-то вместо таблицы, в s заносится лишь одно значение, и то в формате
{***,{***,***}}
вместо {j,s_j()},т.е.{ j-тый сплайн, и значение j сплайна в точке }
как я понял, это из-за того что не выполняется правильно опирация сложения и деления в этой части кода:
"f[X[[j, 2]]]*(x - X[[j + 1, 1]])/(X[[j, 1]] - X[[j + 1, 1]]) +
f[X[[j + 1, 2]]]*((x - X[[j, 1]])/(X[[j + 1]] - X[[j, 1]]))"
Если не трудно, вы не могли бы помочь заставить этоу функцию работать ?
п.с.
Всё это я делаю чтобы найти в итоге общую погрешность между апроксимация функции линейными сплайнами...