По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом его продифференцировать аналитически.
Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.
Существуют ли какие-либо извесные проблемы в этой области?
Здравствуйте Кендер, Вы писали:
К>Коллеги,
К>По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом его продифференцировать аналитически. К>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.
А в чём выражается неверность результата? Если в недостаточной точности, то может стоит попробовать строить многочлен более высоких степеней? Так то у Вас всегда линейная функция отвечает за производную...
К>Существуют ли какие-либо извесные проблемы в этой области?
Вы назвали как минимум одну
Здравствуйте Кендер, Вы писали:
К>Коллеги,
К>По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже
Производная точки??? — Это как?
>сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом >его продифференцировать аналитически.
Э... а это как? Интерполяционный многочлен в форме Лагранжа или Ньютона строится по всем точкам и имеет степень, равную количеству этих точек, т.е. 2000 в данном случае, но никак не 4.
К>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.
Насчет того, что понимается под неправильностью, тебя уже спросили.
Здравствуйте Хитрик Денис, Вы писали:
К>>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата. ХД>А в чём выражается неверность результата?
В качестве тест-кейса использовался банальный cos(x), который должен давать вполне предсказуемую производную -sin(x). На деле производная не имеет характера -sin(x), больше напоминает x*sin(x). ХД>Если в недостаточной точности, то может стоит попробовать строить многочлен более высоких степеней?
Уже пробовал L(x) более высокой степени (6-й), это привело к еще большему расхождению.
Оставь мне свой е-майл, я тебе перешлю график ошибочной производной. Лучше адын раз увидеть. :)
Здравствуйте Lexey, Вы писали:
L>Производная точки??? — Это как?
Точнее "Производная в точке". Может быть два варианта:
1. Если мы можем генерировать точки в любом количестве и в любом месте, то мы можем подобать такие точки, что производная возмется с заданной точностью. (Реально, это уже не производная от точки, а производная от функции. И это не мой случай.)
2. Мой случай. Можно аппроксимировать полином к заданной последовательности точек. (L(x) в моем случае.) Поскольку коэффициенты L(X) известны, его можо дифференцировать аналитически.
Надеюсь, ты понял.
L>Э... а это как? Интерполяционный многочлен в форме Лагранжа или Ньютона строится по всем точкам и имеет степень, равную количеству этих точек, т.е. 2000 в данном случае, но никак не 4.
Я разбиваю свою последовательность на "отрезки" по 5 точек, из которых замечатьльно выходит L(x) 4-й степени. {p1,p2,p3,p4,p5}, {p2,p3,p4,p5,p6}, {p3,p4,p5,p6,p7} ..., где pi = {xi, yi}.
L>Насчет того, что понимается под неправильностью, тебя уже спросили.
Здравствуйте Кендер, Вы писали:
К>Здравствуйте Хитрик Денис, Вы писали:
К>>>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата. ХД>>А в чём выражается неверность результата? К>В качестве тест-кейса использовался банальный cos(x), который должен давать вполне предсказуемую производную -sin(x). На деле производная не имеет характера -sin(x), больше напоминает x*sin(x).
А чего же ты хочешь? Никогда ты не получишь нормальное приближение синуса полиномом, если только точки специально не будешь выбирать.
ХД>>Если в недостаточной точности, то может стоит попробовать строить многочлен более высоких степеней? К>Уже пробовал L(x) более высокой степени (6-й), это привело к еще большему расхождению.
Здравствуйте Lexey, Вы писали:
L>А чего же ты хочешь? Никогда ты не получишь нормальное приближение синуса полиномом, если только точки специально не будешь выбирать.
1. Понимаю, что ошибка будет иметь место. С другой стороны, если она будет в пределах 1%, то я буду считать приближение нормальным. В любом случае производная должна иметь характер sin(x).
2. Какие точки нужно выбирать, если выбирать специально?
3. Оставь свой аддрес, я тебе прмшлб график того безобразия, которое я получил, а заодно и код программы.
Здравствуйте Кендер, Вы писали: К>По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом его продифференцировать аналитически.
К>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.
Замечен еще один артефакт: при увеличении степени L(x) и количесива точек n, ошибка растет. Это свидетельствует о том, что возможно проблема в погрешности измерения.