interpolationpolynomial.java~1~
来自「一个一元曲线多项式数值演示例子」· JAVA~1~ 代码 · 共 106 行
JAVA~1~
106 行
package numbercruncher.mathutils;/** * A polynomial interpolation function. */public class InterpolationPolynomial implements Evaluatable{ /** number of data points */ private int n; /** array of data points */ private DataPoint data[]; /** divided difference table */ private float dd[][]; /** * Constructor. * @param data the array of data points */ public InterpolationPolynomial(DataPoint data[]) { this.data = data; this.dd = new float[data.length][data.length]; for (int i = 0; i < data.length; ++i) { addDataPoint(data[i]); } } /** * Constructor. * @param maxPoints the maximum number of data points */ public InterpolationPolynomial(int maxPoints) { this.data = new DataPoint[maxPoints]; this.dd = new float[data.length][data.length]; } /** * Return the data points. * @return the array of data points */ public DataPoint[] getDataPoints() { return data; } /** * Return the divided difference table. * @return the table */ public float[][] getDividedDifferenceTable() { return dd; } /** * Return the current number of data points. * @return the count */ public int getDataPointCount() { return n; } /** * Add new data point: Augment the divided difference table * by appending a new entry at the bottom of each column. * @param dataPoint the new data point */ public void addDataPoint(DataPoint dataPoint) { if (n >= data.length) return; data[n] = dataPoint; dd[n][0] = dataPoint.y; ++n; for (int order = 1; order < n; ++order) { int bottom = n - order - 1; float numerator = dd[bottom+1][order-1] - dd[bottom][order-1]; float denominator = data[bottom + order].x - data[bottom].x; dd[bottom][order] = numerator/denominator; } } /** * Return the value of the polynomial * interpolation function at x. * (Implementation of Evaluatable.) * @param x the value of x * @return the value of the function at x */ public float at(float x) { if (n < 2) return Float.NaN; float y = dd[0][0]; float xFactor = 1; // Compute the value of the function. for (int order = 1; order < n; ++order) { xFactor = xFactor*(x - data[order-1].x); y = y + xFactor*dd[0][order]; } return y; } /** * Reset. */ public void reset() { n = 0; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?