Beispiel #1
0
static void Main(){

int n=10, N=200;
double[] x = new double[n];
double[] y = new double[n];

int i;
for(i=1; i<n; i++){
	x[i]=2*PI*i/(n-1);
	y[i]=Sin(x[i]);
	WriteLine("{0:g6} {1:g6}",x[i],y[i]);
	}

Write("\n\n");

var ls = new lspline(x,y);
double z;
double step=(x[n-1]-x[0])/(N-1);

for(z=x[0],i=0;i<N;z=x[0]+(++i)*step){
	WriteLine($"{z} {Sin(z)} {ls.eval(z)}");
	}

Write("\n\n");

for(z=x[0],i=0;i<N;z=x[0]+(++i)*step){
	WriteLine($"{z} {1-Cos(z)} {ls.integ(z)}");
	}
}//Main
Beispiel #2
0
    public static int Main()
    {
        // The interpolation routines will be tested on the function f(x) = sin(x)
        double xmin = 0;                                                  // Minimum x value
        double xmax = 3 * PI;                                             // Maximum x value

        misc.generate_data(f1, xmin, xmax, 0.5, "./datafiles/data.txt");  // Generate tabulated function values
        misc.generate_data(f2, xmin, xmax, 0.5, "./datafiles/data2.txt"); // Generate tabulated integration values
        misc.generate_data(f3, xmin, xmax, 0.5, "./datafiles/data3.txt"); // Generate tabulated integration values
        // Load tabulated data values into double arrays
        List <double[]> data = misc.load_data("./datafiles/data.txt");

        double[] x = data[0];
        double[] y = data[1];
        int      n = x.Length;

        // Preparation of output files for plotting
        var lspline_out = new System.IO.StreamWriter("./datafiles/lspline_out.txt", append: false);
        var qspline_out = new System.IO.StreamWriter("./datafiles/qspline_out.txt", append: false);
        var cspline_out = new System.IO.StreamWriter("./datafiles/cspline_out.txt", append: false);
        var outfile     = new System.IO.StreamWriter("./out.txt", append: false);

        double dz = 0.01;
        // Output files for linear interpolation
        var res1 = new lspline(x, y);

        for (double z = x[0]; z <= x[x.Length - 1]; z += dz)
        {
            lspline_out.WriteLine($"{z} {res1.spline(z)} {res1.integral(z)}");
        }
        lspline_out.Close();
        // Output files for quadratic interpolation
        var res2 = new qspline(x, y);

        for (double z = x[0]; z <= x[x.Length - 1]; z += dz)
        {
            qspline_out.WriteLine($"{z} {res2.spline(z)} {res2.integral(z)} {res2.derivative(z)}");
        }
        qspline_out.Close();
        // Output files for cubic interpolation
        var res3 = new cspline(x, y);

        for (double z = x[0]; z <= x[x.Length - 1]; z += dz)
        {
            cspline_out.WriteLine($"{z} {res3.spline(z)} {res3.integral(z)} {res3.derivative(z)}");
        }
        cspline_out.Close();
        // Output files for comparsion of interpolation routines in terms of the integration values
        outfile.WriteLine($"In the following, the interpolation routines are compared with their integration values.");
        outfile.WriteLine($"For comparison, f(x) = sin(x) is interpolated and integrated from 0 to 2*pi (analytical value: 0).\n");
        outfile.WriteLine($"Linear interpolation:");
        outfile.WriteLine($"Integration result:       {res1.integral(2*PI)}");
        outfile.WriteLine($"Error:                    {0-res1.integral(2*PI)}\n");
        outfile.WriteLine($"Quadratic interpolation:");
        outfile.WriteLine($"Integration result:       {res2.integral(2*PI)}");
        outfile.WriteLine($"Error:                    {0-res2.integral(2*PI)}\n");
        outfile.WriteLine($"Cubic interpolation:");
        outfile.WriteLine($"Integration result:       {res3.integral(2*PI)}");
        outfile.WriteLine($"Error:                    {0-res3.integral(2*PI)}\n");
        outfile.Close();
        return(0);
    }
Beispiel #3
0
    static int Main(string[] args)
    {
        if (args.Length < 3)
        {
            Console.Error.WriteLine("too few arguments");
            return(1);
        }
        string       infile     = args[0];
        string       outfile1   = args[1];
        string       outfile2   = args[2];
        StreamReader instream   = new StreamReader(infile);
        StreamWriter outstream1 = new StreamWriter(outfile1, append: false);
        StreamWriter outstream2 = new StreamWriter(outfile2, append: false);

        //Importing the data into vectors
        List <double> xlist = new List <double>();
        List <double> ylist = new List <double>();

        do
        {
            string line = instream.ReadLine();
            if (line == null)
            {
                break;
            }
            string[] values = line.Split(' ', '\t');

            xlist.Add(Double.Parse(values[0]));
            ylist.Add(Double.Parse(values[1]));
        } while (true);

        int    n = xlist.Count;
        vector x = new vector(n);
        vector y = new vector(n);

        for (int i = 0; i <= (n - 1); i++)
        {
            x[i] = xlist[i];
            y[i] = ylist[i];
        }

        lspline s = new lspline(x, y);
        // The linear interpolation
        int N = 999;

        for (int i = 0; i <= N; i++)
        {
            double z  = (x[n - 1] - x[0]) / N * i + x[0];
            double yz = s.eval(z);
            outstream1.WriteLine($"{z} \t {yz}");
        }

        // Intergrating by the linear interpolation
        for (int i = 0; i <= N; i++)
        {
            double z      = (x[n - 1] - x[0]) / N * i + x[0];
            double area_z = s.integral(z);
            outstream2.WriteLine($"{z} \t {area_z}");
        }

        outstream1.Close();
        outstream2.Close();
        instream.Close();

        return(0);
    }