temp result
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <iomanip>
|
||||
#include <cmath>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -21,37 +22,84 @@ public:
|
||||
while (getline(file, str))
|
||||
{
|
||||
istringstream iss(str);
|
||||
if (iss >> a >> b) {
|
||||
if (iss >> a >> b)
|
||||
{
|
||||
x.push_back(a);
|
||||
y.push_back(b);
|
||||
}
|
||||
}
|
||||
h = x[1] - x[0];
|
||||
|
||||
liczba_wezlow = x.size();
|
||||
if (liczba_wezlow < 2)
|
||||
{
|
||||
cerr << "Za malo danych do interpolacji.\n";
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
h = x[1] - x[0];
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
void oblicz()
|
||||
{
|
||||
tablica_roznic.assign(liczba_wezlow, vector<float>(liczba_wezlow));
|
||||
bool rowne_odstepy = true;
|
||||
float pierwszy_odstep = x[1] - x[0];
|
||||
|
||||
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]);
|
||||
// Sprawdzenie czy odstępy x są takie same
|
||||
for (int i = 2; i < liczba_wezlow; i++)
|
||||
{
|
||||
if (std::abs((x[i] - x[i - 1]) - pierwszy_odstep) > 1e-6)
|
||||
{
|
||||
rowne_odstepy = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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]);
|
||||
if (rowne_odstepy)
|
||||
{
|
||||
// Newton
|
||||
tablica_roznic.assign(liczba_wezlow, vector<float>(liczba_wezlow, 0));
|
||||
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;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Lagrange
|
||||
suma = 0.0;
|
||||
for (int i = 0; i < liczba_wezlow; i++)
|
||||
{
|
||||
double iloczyn = tablica_roznic[i][0];
|
||||
for (int j = 0; j < liczba_wezlow; j++)
|
||||
{
|
||||
if (i != j)
|
||||
{
|
||||
iloczyn *= (x[j] - x[0]) / (x[i] - x[j]);
|
||||
}
|
||||
}
|
||||
suma += iloczyn;
|
||||
}
|
||||
suma += czynnik;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,9 +112,11 @@ public:
|
||||
cout << endl;
|
||||
|
||||
// wartości
|
||||
for (int i = 0; i < liczba_wezlow; i++) {
|
||||
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++) {
|
||||
for (int j = 0; j < liczba_wezlow - i; j++)
|
||||
{
|
||||
cout << setw(10) << tablica_roznic[i][j];
|
||||
}
|
||||
cout << endl;
|
||||
@@ -81,3 +131,4 @@ private:
|
||||
vector<float> x, y;
|
||||
vector<vector<float> > tablica_roznic;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
1 2
|
||||
1.5 2.5
|
||||
2 3.5
|
||||
2.5 4
|
||||
3 5.3
|
||||
3.5 6.0
|
||||
0.15 1.34
|
||||
0.20 1.39
|
||||
0.27 1.46
|
||||
0.35 1.54
|
||||
0.40 1.59
|
||||
0.46 1.66
|
||||
Reference in New Issue
Block a user