平面上の 2 点が与えられたx, y
場合:
x, f(x)
1, 3
2, 5
Lagrange と find を使用してそれらを補間できf(1.5)
ます4
。少し考えてみると、方程式の係数を見つける方法を見つけることができました。
void l1Coefficients(const vector<double> &x, const vector<double> &y) {
double a0 = y[0]/(x[0]-x[1]);
double a1 = y[1]/(x[1]-x[0]);
double b0 = (-x[1]*y[0])/(x[0]-x[1]);
double b1 = (-x[0]*y[1])/(x[1]-x[0]);
double a = a0 + a1;
double b = b0 + b1;
cout << "P1(x) = " << a << "x +" << b << endl;
}
それは私に与えます P1(x) = 2x +1
。
もう少し考えて、それを拡張して2nd
方程式を注文することができました。したがって、ポイントを考えると:
1, 1
2, 4
3, 9
P2(x) = 1x^2 +0x +0
次の式を見つけました。
void l2Coefficients(const vector<double> &x, const vector<double> &y) {
double a0 = y[0] / ((x[0]-x[1])*(x[0]-x[2]));
double a1 = y[1] / ((x[1]-x[0])*(x[1]-x[2]));
double a2 = y[2] / ((x[2]-x[0])*(x[2]-x[1]));
double b0 = -(x[1]+x[2])*y[0] / ((x[0]-x[1])*(x[0]-x[2]));
double b1 = -(x[0]+x[2])*y[1] / ((x[1]-x[0])*(x[1]-x[2]));
double b2 = -(x[0]+x[1])*y[2] / ((x[2]-x[0])*(x[2]-x[1]));
double c0 = (x[1]*x[2])*y[0] / ((x[0]-x[1])*(x[0]-x[2]));
double c1 = (x[0]*x[2])*y[1] / ((x[1]-x[0])*(x[1]-x[2]));
double c2 = (x[0]*x[1])*y[2] / ((x[2]-x[0])*(x[2]-x[1]));
double a = a0 + a1 + a2;
double b = b0 + b1 + b2;
double c = c0 + c1 + c2;
cout << "P2(x) = " << a << "x^2 +" << b << "x +" << c << endl;
}
一生懸命働いて、実際に4次までの次数の方程式の係数を見つけることができました。
n
次数方程式の係数を見つけるには? どこ
Pn(x) = c_2x^2 + c_1x^1 + c_0x^0 + ...