Zmieniono nazwę klasy na Interpolacja

Zaimplementowano metodę Interpolacja.oblicz() do obliczenia interpolacjI Newtona
This commit is contained in:
2024-11-07 18:40:31 +01:00
parent 88fd8ac676
commit 6dcca69fa0
5 changed files with 93 additions and 69 deletions

View File

@@ -0,0 +1,83 @@
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <iomanip>
using namespace std;
class Interpolacja
{
public:
void readFromFile(string filename)
{
string str;
fstream file(filename);
if (!file)
{
cerr << "Nie udalo sie otworzyc pliku o nazwie: " << filename << "\n";
exit(EXIT_FAILURE);
}
while (getline(file, str))
{
istringstream iss(str);
if (iss >> a >> b) {
x.push_back(a);
y.push_back(b);
}
}
h = x[1] - x[0];
liczba_wezlow = x.size();
file.close();
}
void oblicz()
{
tablica_roznic.assign(liczba_wezlow, vector<float>(liczba_wezlow));
for (int i = 0; i < liczba_wezlow; i++) {
tablica_roznic[i][0] = y[i];
}
for (int j = 1; j < liczba_wezlow; j++) {
for (int i = 0; i < liczba_wezlow - j; i++) {
tablica_roznic[i][j] = (tablica_roznic[i + 1][j - 1] - tablica_roznic[i][j - 1]);
}
}
suma = tablica_roznic[0][0];
for (int i = 1; i < liczba_wezlow; i++) {
czynnik = tablica_roznic[0][i];
for (int j = 0; j < i; j++) {
czynnik *= (x[j] - x[0]);
}
suma += czynnik;
}
}
void wyswietl_tabela()
{
// nagłowki
cout << setw(5) << "i" << setw(10) << "x" << setw(10) << "y";
for (int j = 1; j < liczba_wezlow; ++j)
cout << setw(10) << "Δ^" + to_string(j);
cout << endl;
// wartości
for (int i = 0; i < liczba_wezlow; i++) {
cout << setw(5) << i << setw(10) << x[i];
for (int j = 0; j < liczba_wezlow - i; j++) {
cout << setw(10) << tablica_roznic[i][j];
}
cout << endl;
}
cout << "Interpolowany wynik: " << suma << endl;
}
private:
float a, b, h, suma, czynnik;
int liczba_wezlow;
vector<float> x, y;
vector<vector<float> > tablica_roznic;
};

6
interpolacja/input.txt Normal file
View File

@@ -0,0 +1,6 @@
1 2
1.5 2.5
2 3.5
2.5 4
3 5.3
3.5 6.0