Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

интерполяция

3.2K
12 сентября 2006 года
Gazzy
38 / / 02.08.2006
вопросов на самом деле два:

1) как провести двумерную интерполяцию если допустим в таблице вида

X 1 2 3 4 7
y
1
2
3
4
в каждой строке может быть лишь 1 значение (а может иногда два)?

2) на сей раз одномерная интерполяция. как быть если конечные разности так и не становятся одинаковыми, для использования формулы Ньютона. как в этом случае интерполировать?
5.7K
23 сентября 2006 года
denxx
45 / / 05.01.2006
Код:
// Интерполяция Лагранжа.
// Компилятор: Visual C++ 6.0
 
#include "stdafx.h"
 
float x[6] = {1.5, 1.54, 1.56, 1.60,1.63, 1.70};
float y[6] = {3.873,3.924,3.950,4.00,4.037,4.123};
 
/* Главная функция, вычисляет коэффициенты Лагранжа
x - аргумент
n - степень многочлена или число x - ов
i - номер узла
*/
 
float L(float xp,int n,int i) {
float Chesl; // чеслитель и знаменатель
float Znam;
Chesl = 1; Znam = 1;
int k;
// вычисление чеслителя
for (k = 0; k!= n; k++ ) {
if ( k == i ) continue;
// убираем множитель x - x(i)
Chesl *= xp - x[k];
}
// вычисление знаменателя
for(k= 0; k!= n;k++) {
if (x == x[k]) continue;
// убираем, а то ноль в знаменателе
Znam *= x - x[k];
}
return Chesl/Znam;
}
int main(int argc, char* argv[])
{
// вычисляем степень полинома
int n = sizeof(y)/sizeof(float);
// начальное значение
float R = 0;
// произвольная точка для проверки
float px = 1.55;
// вычисляем значение интерполяционного многочлена
// в точке должно выйти 3.937
for (int i = 0; i != n; i++) {
R += y*L(px,n,i);
}
printf("Результат : %f ",R); // вывод результата
return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог