Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 23.01.02 16:02
Оценка:
Коллеги,

По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом его продифференцировать аналитически.

Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.

Существуют ли какие-либо извесные проблемы в этой области?

Спасибо,
успехов,
Кендер
Re: Дифференцирование многочлена Лагранжа
От: Хитрик Денис Россия RSDN
Дата: 23.01.02 18:43
Оценка:
Здравствуйте Кендер, Вы писали:

К>Коллеги,


К>По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом его продифференцировать аналитически.

К>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.

А в чём выражается неверность результата? Если в недостаточной точности, то может стоит попробовать строить многочлен более высоких степеней? Так то у Вас всегда линейная функция отвечает за производную...

К>Существуют ли какие-либо извесные проблемы в этой области?

Вы назвали как минимум одну
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: Дифференцирование многочлена Лагранжа
От: Lexey Россия  
Дата: 24.01.02 10:13
Оценка:
Здравствуйте Кендер, Вы писали:

К>Коллеги,


К>По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже


Производная точки??? — Это как?

>сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом >его продифференцировать аналитически.


Э... а это как? Интерполяционный многочлен в форме Лагранжа или Ньютона строится по всем точкам и имеет степень, равную количеству этих точек, т.е. 2000 в данном случае, но никак не 4.

К>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.


Насчет того, что понимается под неправильностью, тебя уже спросили.
Re[2]: Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 24.01.02 14:28
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

К>>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.

ХД>А в чём выражается неверность результата?
В качестве тест-кейса использовался банальный cos(x), который должен давать вполне предсказуемую производную -sin(x). На деле производная не имеет характера -sin(x), больше напоминает x*sin(x).
ХД>Если в недостаточной точности, то может стоит попробовать строить многочлен более высоких степеней?
Уже пробовал L(x) более высокой степени (6-й), это привело к еще большему расхождению.

Оставь мне свой е-майл, я тебе перешлю график ошибочной производной. Лучше адын раз увидеть. :)
Re[3]: Дифференцирование многочлена Лагранжа
От: Хитрик Денис Россия RSDN
Дата: 24.01.02 14:35
Оценка:
Здравствуйте Кендер, Вы писали:

К>Оставь мне свой е-майл, я тебе перешлю график ошибочной производной. Лучше адын раз увидеть.


hdv@obninsk.com

P.S. А если ещё и программу вышлешь, будет просто супер!
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[2]: Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 24.01.02 14:51
Оценка:
Здравствуйте 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>Насчет того, что понимается под неправильностью, тебя уже спросили.


Ответ см. выше.
Re[3]: Дифференцирование многочлена Лагранжа
От: Lexey Россия  
Дата: 25.01.02 14:57
Оценка:
Здравствуйте Кендер, Вы писали:

К>Здравствуйте Хитрик Денис, Вы писали:


К>>>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.

ХД>>А в чём выражается неверность результата?
К>В качестве тест-кейса использовался банальный cos(x), который должен давать вполне предсказуемую производную -sin(x). На деле производная не имеет характера -sin(x), больше напоминает x*sin(x).

А чего же ты хочешь? Никогда ты не получишь нормальное приближение синуса полиномом, если только точки специально не будешь выбирать.

ХД>>Если в недостаточной точности, то может стоит попробовать строить многочлен более высоких степеней?

К>Уже пробовал L(x) более высокой степени (6-й), это привело к еще большему расхождению.

Это абсолютно бесполезно.
Re[4]: Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 25.01.02 22:42
Оценка:
Здравствуйте Lexey, Вы писали:

L>А чего же ты хочешь? Никогда ты не получишь нормальное приближение синуса полиномом, если только точки специально не будешь выбирать.


1. Понимаю, что ошибка будет иметь место. С другой стороны, если она будет в пределах 1%, то я буду считать приближение нормальным. В любом случае производная должна иметь характер sin(x).
2. Какие точки нужно выбирать, если выбирать специально?
3. Оставь свой аддрес, я тебе прмшлб график того безобразия, которое я получил, а заодно и код программы.
Re: Дифференцирование многочлена Лагранжа
От: Хитрик Денис Россия RSDN
Дата: 26.01.02 11:08
Оценка:
Здравствуйте Кендер, Вы писали:
К>По долгу службы передо мной стоит задача взять третью производную от множество точек {х,y} n ~ 2000. Ничтоже сумняшися я решил для каждой точки построить интерполяционный многочлен Лагранжа (L(x), четвертой степени)), а потом его продифференцировать аналитически.

К>Ни смотря на то, что алгоритм получения L(x), как и дифференцирование многочлена работают верно по-отдельности, вместе они не дают правильного результата.


Посмотри ещё здесь:
http://www.srcc.msu.su/num_anal/lib_na/libnal.htm
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 26.01.02 11:08
Оценка:
Замечен еще один артефакт: при увеличении степени L(x) и количесива точек n, ошибка растет. Это свидетельствует о том, что возможно проблема в погрешности измерения.
Re[2]: Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 27.01.02 21:08
Оценка:
ХД>Посмотри ещё здесь:
ХД>http://www.srcc.msu.su/num_anal/lib_na/libnal.htm

Спасибо, нашел там немало полезных алгоритмов.

Кендер
Re: Дифференцирование многочлена Лагранжа
От: Кендер  
Дата: 27.01.02 21:11
Оценка:
ЗАРАБОТАЛО.

Это был банальный баг в фомле дифференцирования многочдена. Теперь при дифференцировании cos(x) ошибка < 2%.

Всем спасибо за советы и поддержку. Код (хотя и банальный) по мылу.

Кендер
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.