WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Кто-то шарит в математике?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Кто-то шарит в математике?
Del опубликован 17-10-2001 19:49 MSK   Click Here to See the Profile for Del   Click Here to Email Del  
Народ помогите кто чем может - надо закодить полином Лагранжа (создание функции на основе сушествуюших точек). Я пытался перевести математический метод (как в книге написано) в код - чуть с ума не сошёл - когда точек больше десятка хочется просто повеситься=)
В обшем помогите кто может (люди добрые :)
ViSko опубликован 18-10-2001 01:10 MSK     Click Here to See the Profile for ViSko  Click Here to Email ViSko     
Даю свою прогу всё должно работать читай комент.

---------------------------------------

// Автор: Сардыко В.С 2000 год
// Интерполяция Лагранжа.
// Компилятор: 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[i] == x[k]) continue;
// убираем, а то ноль в знаменателе

Znam *= x[i] - 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[i]*L(px,n,i);
}

printf("Результат : %f ",R); // вывод результата
return 0;
}


Oval опубликован 18-10-2001 12:35 MSK     Click Here to See the Profile for Oval  Click Here to Email Oval     
Чему бы и итерацию по i не загнать в функцию?
Del опубликован 19-10-2001 17:26 MSK     Click Here to See the Profile for Del  Click Here to Email Del     
Большое спасибо. Попробую так.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.