Witam.
Poniżej będą znajdować tylko wyrywki kodu, ponieważ przypuszczam, że gdzieś w nich leży problem, jednak w załączniku znajdować będzie się cały program oraz wzory
Mam zadanie na studiach ( zamieszczone w tytule tematu ), jednak szukam błędu od 2 dni i już nie mam pojęcia gdzie go szukać.
Na końcu działania programu za pomocą gnuplota powinien rysować wykres wielomianu wyznaczonego metodą interpolacji, jednak on rysuje tą funkcje pierwotną ( węzły są wyznaczane na podstawie węzłów Czebyszewa, zaś wartości dla tych węzłów na podstawie funkcji ).
Algorytm wyznaczania węzłów Czebyszewa
- int węzły - liczba węzłów podawana przez użytkownika
- int a,b - zakres na jakim mają być wyznaczane te węzły
void wezly_czebyszewa(double *x, int wezly, int a, int b) // przekazywana jest pusta tablica
{
double gora,dol;
gora = 2*wezly+1;
double tmp;
for ( int i = 0; i<wezly; i++)
{
dol = 2*i +1;
tmp = cos(gora * 3.14 / dol);
x[i] = 0.5 * ((b-a)*tmp + (a+b));
}
}
Wartości funkcji są wyznaczane na podstawie otrzymanych "x" z powyższego algorytm, to działa dobrze.
*tab_x, tab_y - są to tablicy z "x" i wartościami dla tych "x" potrzebne do interpolacji Lagrange'a
double interpolacja (double *tab_x, double *tab_y, double x, int wezel){
double wynik =0.0;
double t;
double gora,dol;
for ( int k =0 ; k < wezel; k++){
gora = dol =1.0;
for (int j =0; j < wezel; j++){
if (j != k){
gora = gora * (x - tab_x[j]);
dol = dol *(tab_x[k] - tab_x[j]);
}
}
wynik += tab_y[k] * (gora/dol);
}
return wynik;
}
I problem wygląda tak, że wyznacza on wartości ( nie tylko dla węzłów ) dokładnie takie same jak dla funkcji dla której węzły były policzone.
Np. Wyznaczam węzły Czebyszewa i liczę dla nich wartość z funkcji liniowej ( 3x -7 ) i potem,gdy gunplot rysuje wykres dla tego wielomianu to wychodzi linia prosta dokładnie taka sama jak dla tej funkcji liniowej. :/
Dodam, że winą nie jest gnuplot, bo gdy biorę na sucho wyznaczanie wartości wielomianu dla jakieś zadanego x ( różnego do węzła ) to wychodzi dokładne taka sama jak dla funkcji liniowej, stąd gnuplot rysuje linie prostą.