Witam. Napisałem (z użyciem biblioteki Eigen) program, który ma wyznaczyć współczynniki wielomianu interpolacyjnego. Problem w tym, że wyniki zwracane przez ten program są co najmniej dziwne. W programie korzystam z macierzy Vandermonde'a oraz metody LU. Czy możliwe jest, że zagadnienie jest aż tak źle uwarunkowane, że jedyny współczynnik, który się zgadza, ma wartość 1, natomiast pozostałe wyniki to 0 lub -0?
Kod programu:
#include <iostream>
#include <cmath>
#include <iomanip>
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/LU>
int main()
{
const int size=5;
double x[]={-1.23, -1.19, -0.74, 0.11, 2.56}; //węzły
double fx[]={1.5129, 1.4161, 0.5476, 0.0121, 6.5536}; //wartości w węzłach
Eigen::MatrixXd X(size, size);
Eigen::VectorXd a(size);
Eigen::VectorXd Y(size);
//Eigen::IOFormat format(50, 0, ", ", "\n", "[", "]");
for(int i=0; i<size; ++i)
{
for(int j=0; j<size; ++j)
{
X(i, j)=std::pow(x[i], size-1-j);
}
Y(i)=fx[i];
}
Eigen::PartialPivLU<Eigen::MatrixXd> lu(X);
a=lu.solve(Y);
for(int k=0; k<size; ++k)
{
std::cout<<"a"<<k<<" = "<<a(size-1-k)<<std::endl;
}
}