예제 #1
0
        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;
        }
예제 #2
0
        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;
        }