public static double evaluateLagrangePolynome(double x, Vector nodes, int j) { int idx; //Gibt die Position zurück, wenn x einer Stützerstelle entspricht. if ((idx = nodes.ContainsValue(x)) != -1) { if (idx == j) return 1.0; else return 0.0; } Vector barycentricWeights = computeBarycentricWeights(nodes); double tempProd = 1.0; for(int i = 0; i < nodes.Length; i++) { if (i != j) tempProd *= (x - nodes[i]); } tempProd *= barycentricWeights[j]; return tempProd; }
public static double evaluateLagrangeRepresentation(double x, Vector nodes, Vector functionValues) { int idx; //Gibt die Position zurück, wenn x einer Stützerstelle entspricht. if( (idx = nodes.ContainsValue(x)) != -1) return functionValues[idx]; Vector barycentricWeights = computeBarycentricWeights(nodes); double tempQuot = 0.0; double denominator = 0.0; double numerator = 0.0; for(int i = 0; i < nodes.Length; i++) { tempQuot = barycentricWeights[i] / (x - nodes[i]); numerator += functionValues[i] * tempQuot; denominator += tempQuot; } return numerator / denominator; }