IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> интерполяционный полином Ньютона n-й степени, нужно написать в Delphi
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Руслан

Репутация: -  0  +


Здравствуйте все!
Вобщем сразу к делу. Есть такая задачка:
Функция задана таблично (n +1 значение). Разработайте программу, строящую интерполяционный полином Ньютона n-й степени.
Вроде что-то нарыл в нете, но не то. Помогите плиз кто может.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Женский
Реальное имя: Натали

Репутация: -  1  +


я не понимаю((( что у меня должно получиться на выходе??
и ещё...вы можете закомментить вот эти функции??

function Prod(t: double; k: integer): double;  // t(t-1)...(t-k)
begin
if k=0 then Prod:=t else Prod:=t*Prod(t-1,k-1)
end;


function FinDif(k,i: integer): double; // finite difference
begin
if k=0 then FinDif:=y[i] else FinDif:=FinDif(k-1,i+1)-FinDif(k-1,i)
end;


function NewtonPol(x: double): double;
var
k: integer;
p,t,f: double;
begin
p:=y[0];
t:=(x-x0)/h;
f:=1;
for k:=1 to n do begin
f:=f*k;
p:=p+Prod(t,k-1)*FinDif(k,0)/f
end;
NewtonPol:=p
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(klik1602 @ 18.06.2011 23:57) *
я не понимаю((( что у меня должно получиться на выходе??
Как что? значение интерполяционного полинома. Если вызвать NewtonPol с параметром x, то вернется значение полинома в точке x. Я не вполне уверен, представляют ли какой-то интерес его коэффициенты, поскольку они стоят перед степенями конечных разностей порядков до n. Так что я беру назад свои слова выше и предлагаю считать конечным продуктом саму программу )).

Цитата
и ещё...вы можете закомментить вот эти функции??
_Закомментить_ - не рекомендую, работать не будет. А _прокомментить_ - можно.. ))

Собственно, я особо не разбираюсь в интерполировании. Просто делал тупо по формулам, а формулы взял в Википедии.

function Prod(t: double; k: integer): double;  // t(t-1)...(t-k)
begin
if k=0 then Prod:=t else Prod:=t*Prod(t-1,k-1)
end;
Тут просто произведение - то есть то, что написано в оригинальном комменте. Чтоб в этом убедиться, заметь, что она просто умножает сама себя k раз, а при вызове мы каждый раз уменьшаем ее на 1.

function FinDif(k,i: integer): double;   // finite difference
begin
if k=0 then FinDif:=y[i] else FinDif:=FinDif(k-1,i+1)-FinDif(k-1,i)
end;
Тут просто по определению конечных разностей, см. вики

Далее все один в один (если я не ошибся, конечно - я все ждал, что dark_san проверит, но она исчезла) по формулам. Я использовал прямую интерполяционную формулу Ньютона вот отсюда. Функция Prod (англ. product - произведение) вычисляет числитель дроби, знаменатель (фаеториал) считается по ходу дела (переменная f), а функция FinDif (англ. Finite Difference) считает конечные разности. Сумма находится в цикле. Вот и все, вроде..
function NewtonPol(x: double): double;
var
k: integer;
p,t,f: double;
begin
p:=y[0];
t:=(x-x0)/h;
f:=1;
for k:=1 to n do begin
f:=f*k;
p:=p+Prod(t,k-1)*FinDif(k,0)/f
end;
NewtonPol:=p
end;



Добавлено через 1 мин.
Цитата(TarasBer @ 20.06.2011 16:59) *
в этом алгоритме n-ая конечная разность ищется за O(2^n), что просто отвратительно.
А что ж ты замолчал?.. Расскажи даме, как делать быстрее )).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Mystical   интерполяционный полином Ньютона n-й степени   31.05.2009 7:23
Ozzя   http://algolist.manual.ru/maths/approx.php   31.05.2009 12:31
Mystical   Теория это конечно хорошо, но думаю я не из тех кт…   31.05.2009 19:27
volvo   А я думаю - ты из тех, кто пальцем не пошевелит, а…   31.05.2009 20:04
klik1602   оуу)) а меня точно такая же задача, Функция задана…   15.06.2011 23:17
Lapp   и построить - это значит функцию рисовать?? Нет, э…   16.06.2011 3:54
klik1602   ребят, помогите пожалуйста, на вас вся надежда..   16.06.2011 3:28
Lapp   Поиск по семплу +полин* +Ньют* дает, в частности, …   16.06.2011 5:12
klik1602   уух)) а вы ,ребята, с юмором)) меня препод думаю е…   16.06.2011 5:36
klik1602   я не понимаю((( что у меня должно получиться на вы…   19.06.2011 2:57
Lapp   я не понимаю((( что у меня должно получиться на вы…   21.06.2011 9:38
klik1602   хммм, полиномы это точно не моё..   20.06.2011 19:44
TarasBer   Объяснить, что делают эти функции? Это называется …   20.06.2011 19:59
klik1602   как это называется я-то знаю) но что они делают в …   20.06.2011 21:55
TarasBer   > Расскажи даме, как делать быстрее )). Надо с…   21.06.2011 13:19
klik1602   ага..кажется что-то начинаю понимать.. :yes2:   23.06.2011 1:38


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.05.2024 2:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name