Witam! zająłem się problemem interpolacji newtona i napisałem taki oto kod:
Niestety cos nie działa, nie wiem gdzie popełniłem błąd, mógłby ktos sprawdzic i pomóc??
#include <iostream>
using namespace std;
int silnia (int n)
{
if (n<0)
return 0;
if (n==0 || n==1)
return 1;
return silnia(n-1)*n;
}
double interpolacja_Newtona(int n, double x, double xn[], double yn[])
{
double iloczyn;
double y = 0.0;
for(int i = 1; i < n; i++)
{
for(int j = 0; j < (n-i); j++)
{
yn[j] = yn[j+1] - yn[j];
}
iloczyn = 1;
for(int j = 0; j < i; j++)
{
iloczyn = iloczyn * (x - xn[j]);
}
y += (yn[0]*iloczyn)/(silnia(i));
}
return y;
}
int main(int argc, char *argv[])
{
int n;
cout << "Podaj liczbe rownan: " ;
cin >> n;
double *xn = new double[n];
double *yn = new double[n];
for(int i = 0; i < n; i++)
{
cout << "Podaj wartosc wspolzednej x(" << i << "): " ;
cin >> xn[i];
cout << "Podaj wartosc wspolzednej y(" << i << "): " ;
cin >> yn[i];
}
double x;
cout << "Podaj punkt w ktorym policzona zostanie wartosc funkcji: ";
cin >> x;
cout << endl;
cout << "Wartosc funkcji w punkcie dla interpolacji newtona " << x << " wynosi "<< interpolacja_Newtona(n, x, xn, yn) << endl;
system("pause");
}