Implementacja interpolacji Newtona w C++

0

Witam, dostałem za zadanie zaimplementować interpolację Newtona... Tak jak nie mam problemu z liczeniem tego "na kartce" tak nie mogę znaleźć jakiejś zależności by to zaimplementować. Dodam, że muszę obejść się bez tablicy dwuwymiarowej. Do liczenia ilorazów różnicowych stworzyć tablicę o wielkości n*(n-1)/2? Czy zapisywać to jakoś do zmiennej?

Z góry dziękuję za jakieś nakierowanie mnie, nie oczekuję gotowego kodu.

0

Napisałem coś takiego:

#include <iostream>

using namespace std;

void interpol(double *, double *, int, int);
double *liczIloraz(double *y, double *x, int n);

int main()
{
    int n;
    cout << "Podaj liczbe wezlow: " << endl;
    cin >> n;
    double arg;
    double *x = new double[n];
    double *y = new double[n];
    for(int i = 0; i < n; i++)
    {
        cout << "x[" << i << "] = ";
        cin >> x[i];
        cout << "y[" << i << "] = ";
        cin >> y[i];
    }

    cout << "Podaj punkt: ";
    cin >> arg;
	double* b = liczIloraz(y, x, n);
	interpol(b, x, n, arg);

    return 0;
}

double *liczIloraz(double *y, double *x, int n)
{
	int i, j;
	double z;
	for (i = 0; i < n; j++)
	{
		z = y[0];
		for (j = 0 ; j > n - i; j++)
		{
			y[j] = (y[j] - y[j - 1]) / (x[i + j] - x[j]);
		}
		y[n - i] = z;
	}

	return y;
}

void interpol(double *p, double *x, int n, int arg)
{
	double w;
	double suma = 0;
	int j, i;
	for (i = n - 1; i >= 0; i--)
	{
		w = 1;
		for (j = 0; j < i; j++)
			w*= (arg - x[j]);

		w *= p[j];
		suma += w;
	}
	cout << suma << endl;
}

No i program stoi po linijce

cin >> arg;

Nie robi dosłownie nic, a ja nie mam w ogóle pomysłu dlaczego..

0

Sprawdź dokładnie 37 linijkę, w takiej postaci ta pętla nigdy się nie wykona.

Jak nie wiesz co się dzieje to albo sobie wypisuj jakie wartości przyjmują zmienne, np:

for (i = 0; i < n; j++)
{
    cout << "zmienna i: " << i << endl;
    z = y[0];
    for (j = 0 ; j > n - i; j++)
    {
        cout << "zmienna j: " << j << endl;
        y[j] = (y[j] - y[j - 1]) / (x[i + j] - x[j]);
    }
    y[n - i] = z;
}

albo używaj debugera do śledzenia zmiennych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1