Ещё раз. Вы строите подсетку (более мелкую, чем сеть опорных значений сплайна), чтобы пройтись по ней и найти максимальную разность. Это всё понятно и правильно, но это потом. Пока что этого не надо. Не надо совсем. Нельзя строить подсетку. Не надо вычислять значение сплайна в десяти точках. Не надо даже в двух.
Надо в одной.
Вот , хочу построить в точкe x=1:
Если не менять интервалы сплайна, а просто строить функцию сплайна по интервалу [a,a+h]
то вот что удивительно, функция даже что-то возвращает
Код:
a=1.
b=2.
n=10.
s2[x_] :=
f[z[[a]]]*(x - z[[b]])/(z[[a]] - z[[b]]) +
f[z[[b]]]*(x - z[[a]])/(z[[b]] - z[[a]])
s2[1.]
2.71828
Exp[1.]
2.71828
Но если попытаться сделать функцию, ужа зависимую от того, в какой интервал попадает это число...
Код:
a = -10.;
b = 10.;
n = 10.;
f[x_] := Exp[x]
h = (b - a)/n;
z := Table[a + h*k, {k, 0, n}];
z
Код:
s[x_] :=
f[z[[a + h*k]]]*(x - z[[a + h*(k + 1)]])/(z[[a + h*k]] -
z[[a + h*(k + 1)]]) +
f[z[[a + h*(k + 1)]]]*(x - z[[a + h*k]])/(z[[a + h*(k + 1)]] -
z[[a + h*k]])
s[4.]
То тогда она перестаёт функционировать)
Давабление Table проблему не решает...
Код:
s[x_] := Table[
f[z[[a + h*k]]]*(x - z[[a + h*(k + 1)]])/(z[[a + h*k]] -
z[[a + h*(k + 1)]]) +
f[z[[a + h*(k + 1)]]]*(x - z[[a + h*k]])/(z[[a + h*(k + 1)]] -
z[[a + h*k]]), {k, 0, n}]
И получается на выходе вот такой вот мусор
Код:
Part::partw: Part 12.` of {-10.,-8.,-6.,-4.,-2.,0.,2.,4.,6.,8.,10.} does not exist. >>
0.054276, 1.98168, 54.5982, 54.5982, (2980.96 (4. - List))/(
8. - List) - (4. E^List)/(-8. + List), (
0.000335463 (4. - List))/(-8. - List) + (12. E^List)/(
8. + List), 0.0542
Но ведь всё равно , при построении этого сплайна надо учитывать в какой подинтервал эта точка попадает....
Т.е. всё равно надо придумать как менять границы сплайна, в зависимости от вводимого в функцию числа. Но как это сделать , сохранив простоту ? Да хоть просто, как это сделать...
-- 02.11.2012, 17:54 --X[n_] := Table[{a + h*k, f[a + h*k]}, {k, 0, n}];
После того, как описана функция, вычисляющая сплай, почему бы вот точно также не вычислить значение сплайна на другой (любой) сетке. Надо только заменить f на функцию сплайн.
Что-то у меня антивирус стал кричать про угрозу при заходе в эту (и другие) тему???
Спасибо, отличная идея (всё гениальное - просто
)Теперь осталось домучить функцию сплайна
п.п.с. извинте, за некоторый бардак в комментарии, изменяел его несколько раз после написания ))