double polynomialInterpolation (double x, vector<Vector> points) throw(CoincidentPointsException) { size_t n = points.size(); double px = 0.0; vector<double> lagrangian(n, 1.0); for (size_t i=0; i < n; i++) for (size_t j=0; j < n; j++) if (i != j) lagrangian[i] *= ( (x - points[j][0]) / (points[i][0] - points[j][0]) ); for (size_t i=0; i < n; i++) px += (points[i][1] * lagrangian[i]); return px; }
Force3 force(unsigned i, Parameters ps, Configurations c, Length dx) { Configurations cx = c; Configurations cy = c; Configurations cz = c; cx.position[i] = c.position[i] + dx * ex; cy.position[i] = c.position[i] + dx * ey; cz.position[i] = c.position[i] + dx * ez; Force fx = (lagrangian(i, ps, cx) - lagrangian(i, ps, c)) / dx; Force fy = (lagrangian(i, ps, cy) - lagrangian(i, ps, c)) / dx; Force fz = (lagrangian(i, ps, cz) - lagrangian(i, ps, c)) / dx; Force3 f = fx * ex + fy * ey + fz * ez; return f; }