Математический форум Math Help Planet
http://mathhelpplanet.com/

Разобрать задание (интерполяция полиномов Ньютона/Л
http://mathhelpplanet.com/viewtopic.php?f=64&t=57966
Страница 1 из 3

Автор:  neversleep [ 26 янв 2018, 10:04 ]
Заголовок сообщения:  Разобрать задание (интерполяция полиномов Ньютона/Л

Приветствую всех, сразу оговорюсь, в математеке я ламер. Прошу помочь разобрать задание.

Задание выглядит так: Написать программу интерполяции таблично заданной функции с помощью полиномов Ньютона или Лагранжа.

Входные данные:

• исходная сетка узлов интерполяции
• значения интерполируемой функции
• новая сетка узлов, на которой необходимо вычислить значения функции
• порядок полинома

Далее даны вот такие ф-ции(я их переписал на c++):

Код:
// y = sinx * cosx
double y(const double x)
{
    return sin(x) + cos(x);
}

// Xi = -3/4π + 0.1π * i; i = 0, 1, 2, ..., 20;
double fi(const double i)
{
    return -0.75 * M_PI + 0.1 * M_PI * i;
}

// Xj = -3/4π + 0.15π * j; j = 1, ..., 10
double fj(const double j)
{
    return -0.75 * M_PI + 0.15 * M_PI * j;
}


Не понятно, как получить входные данные. Я так полагаю, что нужно начать с вычисления значений fi(i) и fj(j):

Код:
for (unsigned i = 0; i <= 20; ++i) {
    cout << i << ": " << fi(i) << endl;
}

for (unsigned j = 0; j <= 10; ++j) {
    cout << j << ": " << fj(j) << endl;
}


Но, опять же, не совсем понятно, что именно я тут получил? По пунктам:

• Первый цикл(в примере выше) - это и есть исходная сетка узлов интерполяции?
• Как получить значения интерполируемой функции? Что подставлять в качестве аргемента x ф-ции y?
• Второй цикл - это новая сетка узлов?
• Порядок полинома - с этим, навенрое, позже возникнут вопоросы.

Автор:  swan [ 26 янв 2018, 10:23 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

neversleep писал(а):
• Первый цикл(в примере выше) - это и есть исходная сетка узлов интерполяции?

да
neversleep писал(а):
• Как получить значения интерполируемой функции? Что подставлять в качестве аргемента x ф-ции y?

узлы исходной сетки
neversleep писал(а):
• Второй цикл - это новая сетка узлов?

да
neversleep писал(а):
• Порядок полинома - с этим, навенрое, позже возникнут вопоросы.

должен пользователем задаваться (исходя из задания)

Upd. Видимо, всё же, надо полагать, что степень полинома равна количество узлов -1
То есть в вашем случае - 20.

Автор:  neversleep [ 26 янв 2018, 11:06 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

swan писал(а):
neversleep писал(а):
• Первый цикл(в примере выше) - это и есть исходная сетка узлов интерполяции?

да
neversleep писал(а):
• Как получить значения интерполируемой функции? Что подставлять в качестве аргемента x ф-ции y?

узлы исходной сетки
neversleep писал(а):
• Второй цикл - это новая сетка узлов?

да
neversleep писал(а):
• Порядок полинома - с этим, навенрое, позже возникнут вопоросы.

должен пользователем задаваться (исходя из задания)

Upd. Видимо, всё же, надо полагать, что степень полинома равна количество узлов -1
То есть в вашем случае - 20.

Спасибо.

В выходных данных мне нужно получить:

• новая сетка
• значения функции на новой сетке
• погрешность интерполирования

Есть ли какой-нибудь инструмент(мб сайт) или программа, чтобы я туда ввёл исходные данные, а в итоге получил требуемые выходные данные(может не все, но хотя бы часть из них)? Если еще распишет алгоритм решения, то вообще супер :) Я спрашиваю потому, что когда буду писать программу, чтобы было с чем сверить.

Автор:  swan [ 26 янв 2018, 11:16 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

По жизни тоже планируете шпаргалка и пользоваться? Делайте, выводить на график. С 99% вероятностью, если ошибка будет, то не сможете не заметить.

Автор:  neversleep [ 27 янв 2018, 11:43 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

swan писал(а):
По жизни тоже планируете шпаргалка и пользоваться? Делайте, выводить на график. С 99% вероятностью, если ошибка будет, то не сможете не заметить.

Я бы с радостью, но для неподготовленного человека это все не так просто.

Не доходит до меня такой момент: вот я у меня есть исходная и новая сетки(получил их по заданным формулам):

▼ сетки
Код:
// исходная
x=fi(0)=-2.356194, y(x)=-1.414214
x=fi(1)=-2.042035, y(x)=-1.344997
...
x=fi(20)=3.926991, y(x)=-1.414214


Код:
// новая
x=fj(1)=-1.884956, y(x)=-1.260074
x=fj(2)=-1.413717, y(x)=-0.831254
...
x=fj(10)=2.356194, y(x)=0.000000


На примере первого элемента исходной сетки: пара чисел -2.356194 и -1.414214 - это и есть сама сетка? (т.е -2.356194 это x, а -1.414214 это y=f(x) ?) Или же это 0 и -2.356194 , или 0 и -1.414214 ?

Автор:  swan [ 27 янв 2018, 16:12 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

У вас есть 21 икс и соответственно 21 значений, игреков. Строите по ним интерполяционный многочлен. Значения этого многочлена в новых 11 иксах - это ваши приближения. Сумма модулей разностей между этими приближениями и истинными значениями, деленная на сумму значений функции - это погрешность

Автор:  searcher [ 27 янв 2018, 16:34 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

swan писал(а):
Upd. Видимо, всё же, надо полагать, что степень полинома равна количество узлов -1То есть в вашем случае - 20.

swan писал(а):
У вас есть 21 икс и соответственно 21 значений, игреков. Строите по ним интерполяционный многочлен.

А вот тут, даже если всё правильно запрограммировано, может получиться ерунда вследствие катастрофического роста ошибок округления.

Автор:  swan [ 27 янв 2018, 17:24 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

searcher, думаете? Кажется, что 20 - это пока еще не критично. Впрочем, спорить не буду, а проверить сейчас негде

Автор:  searcher [ 27 янв 2018, 17:35 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

swan писал(а):
searcher, думаете? Кажется, что 20 - это пока еще не критично. Впрочем, спорить не буду, а проверить сейчас негде

Посмотрим, что получится у топик-стартера.

Автор:  neversleep [ 28 янв 2018, 10:27 ]
Заголовок сообщения:  Re: Разобрать задание (интерполяция полиномов Ньютона/Л

searcher писал(а):
swan писал(а):
searcher, думаете? Кажется, что 20 - это пока еще не критично. Впрочем, спорить не буду, а проверить сейчас негде

Посмотрим, что получится у топик-стартера.


▼ Получилось вот что
Код:
x=fi(0)=-2.35619449019234483700, y(x)=-1.41421356237309492343
x=fi(1)=-2.04203522483336552540, y(x)=-1.34499702392791453676
x=fi(2)=-1.72787595947438621380, y(x)=-1.14412280563536850053
x=fi(3)=-1.41371669411540690220, y(x)=-0.83125387555490681812
x=fi(4)=-1.09955742875642759060, y(x)=-0.43701602444882098331
x=fi(5)=-0.78539816339744827900, y(x)=0.00000000000000011102
x=fi(6)=-0.47123889803846896740, y(x)=0.43701602444882114984
x=fi(7)=-0.15707963267948965580, y(x)=0.83125387555490692915
x=fi(8)=0.15707963267948965580, y(x)=1.14412280563536872258
x=fi(9)=0.47123889803846896740, y(x)=1.34499702392791453676
x=fi(10)=0.78539816339744827900, y(x)=1.41421356237309492343
x=fi(11)=1.09955742875642759060, y(x)=1.34499702392791453676
x=fi(12)=1.41371669411540690220, y(x)=1.14412280563536872258
x=fi(13)=1.72787595947438621380, y(x)=0.83125387555490692915
x=fi(14)=2.04203522483336552540, y(x)=0.43701602444882120535
x=fi(15)=2.35619449019234483700, y(x)=0.00000000000000011102
x=fi(16)=2.67035375555132414860, y(x)=-0.43701602444882092779
x=fi(17)=2.98451302091030346020, y(x)=-0.83125387555490670710
x=fi(18)=3.29867228626928277180, y(x)=-1.14412280563536850053
x=fi(19)=3.61283155162826208340, y(x)=-1.34499702392791453676
x=fi(20)=3.92699081698724139500, y(x)=-1.41421356237309514547

x=fj(1)=-1.884956, Ln(x)=-1.26007351067014261581, y(x)=-1.26007351067010109347
x=fj(2)=-1.413717, Ln(x)=-0.83125387555490681812, y(x)=-0.83125387555490681812
x=fj(3)=-0.942478, Ln(x)=-0.22123174208247439743, y(x)=-0.22123174208247431416
x=fj(4)=-0.471239, Ln(x)=0.43701602444882114984, y(x)=0.43701602444882114984
x=fj(5)=0.000000, Ln(x)=0.99999999999999977796, y(x)=1.00000000000000000000
x=fj(6)=0.471239, Ln(x)=1.34499702392791453676, y(x)=1.34499702392791453676
x=fj(7)=0.942478, Ln(x)=1.39680224666742058837, y(x)=1.39680224666742058837
x=fj(8)=1.413717, Ln(x)=1.14412280563536872258, y(x)=1.14412280563536872258
x=fj(9)=1.884956, Ln(x)=0.64203952192020652401, y(x)=0.64203952192020630196
x=fj(10)=2.356194, Ln(x)=0.00000000000000011102, y(x)=0.00000000000000011102

0.0000000000000115 - погрешность


Если кому интересен код - могу скинуть.

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/