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

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

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

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


Новичок
*

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

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


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

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


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

 



- Текстовая версия 13.07.2025 20:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"