using System; using System.Windows.Forms; namespace Science.Mathematics.Calculus { /// /// Two-Dimensional Interpolation. /// public class Interpolation2D { private double[] x1a; private double[] x2a; private double[,] ya; private int m,n; public Interpolation2D() { } public double[] MapFromMeshX { set { x1a = value; m = x1a.Length; } } public double[] MapFromMeshY { set { x2a = value; n = x2a.Length; } } public double[,] MapTo { set { ya = value; } } public Interpolation2D(double[] x, double[] y, double[,] mapTo) { x1a = x; x2a = y; ya = mapTo; m = x.Length; n = y.Length; } public void ComputeForPolynomial() { Science.Mathematics.NumericalRecipes.InterpolationAndExtrapolation.Polin2 obj = new Science.Mathematics.NumericalRecipes.InterpolationAndExtrapolation.Polin2(); if (Science.Net.Check()) { obj.polin2(x1a, x2a, ya, m, n, at1, at2); dy = obj.Error; y = obj.Y; } else { try { throw new Exception(); } catch (Exception) { MessageBox.Show("Please support our authors.", "Invalid user", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } public void ComputeForSpline() { double[,] y2a = new double[m,n]; double[] y2 = new Double[n]; Science.Mathematics.NumericalRecipes.InterpolationAndExtrapolation.Splie2 obj = new Science.Mathematics.NumericalRecipes.InterpolationAndExtrapolation.Splie2(); if (Science.Net.Check()) { obj.splie2(x1a, x2a, ya, m, n, y2a); } else { try { throw new Exception(); } catch (Exception) { MessageBox.Show("Please support our authors.", "Invalid user", MessageBoxButtons.OK, MessageBoxIcon.Error); } } Science.Mathematics.NumericalRecipes.InterpolationAndExtrapolation.Splin2 obj1 = new Science.Mathematics.NumericalRecipes.InterpolationAndExtrapolation.Splin2(); obj1.splin2(x1a, x2a, ya, y2a, m, n, at1, at2); y = obj1.Y; } private double at1 = 0.0, at2 = 0.0, y = 0.0, dy = 0.0; public double At1 { set{at1=value;} } public double At2 { set{at2=value;} } public double Result { get{return y;} } public double Error { get{return dy;} } } }