LINUX.ORG.RU

С++: Экстраполяция и интерполяция.


0

0

Есть с десяток точек - значений некоей математической функции вида f(x). Надо интерполировать и экстраполировать эту функцию. Работать надо под Win32 и Linux. Какую библиотеку использовать?

anonymous

Мозг. Ну и в книжках почитать, что такое интерполяция. Ты просто сейчас чушь сказал.

redgremlin ★★★★★
()

Надо использовать маленький цифровой экстраполятор. Экстраполировать, экстраполировать и выэкстраполировать.

anonymous
()

Полином Лагранжа, полином Бернштейна.

ip1981 ☆☆
()
Ответ на: комментарий от anonymous

Отличная шутка. Надо следующее: получить интерполяционный многочлен. Им же можно и экстраполировать. Вопрос другой: какая библиотека такое умеет.

anonymous
()
Ответ на: комментарий от anonymous

> Надо следующее: получить интерполяционный многочлен. Им же можно и экстраполировать. Вопрос другой: какая библиотека такое умеет

Многочлен - это тупо массив коэффициентов. Какие нафиг библиотеки нужны для столь простой задачи?

ShprotX
()
Ответ на: комментарий от anonymous

Подозреваю формошлёпщика, на любой чих ищущего готовые "компоненты".

Твоя примитивная задача решается в пару строк - но ты всё равно "библиотеку" ищешь? Смешно.

P.S. Попробуй gsl, но для твоей задачи это как из пушки по воробьям.

anonymous
()

Умеет ccmath, функция qrlsq. В исходниках есть пример (раздел cfit)

anonymous
()

Примерчик на С для совсем ленивых.

#include <math.h>
#include <stdio.h>
#include <ccmath.h>

#define SIZE 6
#define DIM 3

int main()
{
  int i, j;
  double t;


  int x[SIZE] = { 2, 5, 8, 10, 15, 21 };
  double y[SIZE] = { 78.3, 71.0, 66.4, 61.0, 54.7, 45.0 };
  double a[DIM*SIZE];

  for ( i=0; i<SIZE; i++) {
    for ( j=0; j<DIM; j++)
      a[i*DIM+j] = pow( x[i], j);
    }


  for( i=0; i<SIZE; i++)
   printf( "X: %2d. Y: %4.1f\n", x[i], y[i]);

/* compute least squares coefficients via QR reduction */
  t=qrlsq( a, y, SIZE, DIM, &i);

  if (i== -1) 
    printf("thermal fit error: singular reduced matrix\n");
  else {
    printf("sum of squared fit residuals (ssq) = %.3e\n", t);
    printf("coefficients\n");
    for ( i=0; i<DIM; i++) printf("%6.3f\n", y[i]);
  }
  return 0;
}

anonymous
()
Ответ на: комментарий от ShprotX

только я очень сомневаюсь что на практике кому-нибудь нужен интерполяционный полином..

dilmah ★★★★★
()

рекомендую полиномы Лежандра для полиниминальной интерполяции, равно как и кривые Безье для сплайн-интерполяции

у полиноминальной экстраполяции ошибка, если мне не изменяет память, растёт экспоненциально в лучшем случае

а чтобы работало и под win32 и под linux я в своё время писал всё это добро на yorick, чего и тебе советую ;)

jtootf ★★★★★
()

прошёлся по ссылкам и вспомнил про функцию Рунге ;) удачи тебе с полиноминальной интерполяцией, да

jtootf ★★★★★
()

Это общая постановка задачи. Ее уже несколько веков решают. Конкретных особенностей в твоей задаче нет?

balodja ★★★
()
Ответ на: комментарий от dave

> Надо интерполировать и экстраполировать

рисовать-то надо? Есть > пара дюжен методов интерполяции,
каждый из которых чем-то по своему хорош 

Valeriy_Onuchin ★★
()

> некоей математической функции вида f(x)

.. и потом, что за вопрос? если функция f(x) известна,
зачем тут что-то интерполировать, экстрополировать?

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

До кучи можно вспомнить еще и метод наименьших квадратов. Пока что, задача нераскрыта.

dave ★★★★★
()
Ответ на: комментарий от jtootf

> прошёлся по ссылкам и вспомнил про функцию Рунге ;) удачи тебе с полиноминальной интерполяцией, да

Если интерполировать по корням полиномов Чебышева, то ничего не случится

annoynimous ★★★★★
()
Ответ на: комментарий от annoynimous

> еще и метод наименьших квадратов

не надо путать фитирование и интерполяцию ...
фитирование и регрессия - это больше на тему экстраполяции.

btw, есть еще так называемя "тангенциальная" интреполяция -
это когда набор произвольных точек необходимо соединить
плавной кривой. Под "плавной" понимается кривая, производная
(т.е. тангенс касательной) которой в каждой точке меняется 
"плавно" и непрерывно. 
Именно такой метод реализован на этом графике:
http://root.cern.ch/root/html/TGraph.html

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

я ничего не путаю. вообще говоря, интерполяцию полиномом можно свести в м.н.к. просто невязка станет равна нулю и все.

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.