using System;
using System.Collections.Generic;
namespace filereading
{
class Program
{
public static double[] x;// input array x values
public static double[] y;//values of function
public static double[,] fddtable;//2d table
static void Main(string[] args)
{
string line;
#region Inputxvalues
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("x.txt");
List<double> filedata = new List<double>();
while ((line = file.ReadLine()) != null)
{
filedata.Add(Convert.ToDouble(line));
}
file.Close();
x = filedata.ToArray();
Console.Write("data from x file is :");
for (int i = 0; i < x.Length; i++)
{
Console.Write(x[i] + " ");
}
Console.WriteLine();
#endregion
#region Inputyvalues
file = new System.IO.StreamReader("fx.txt");
List<double> filedatay = new List<double>();
while ((line = file.ReadLine()) != null)
{
filedatay.Add(Convert.ToDouble(line));
}
file.Close();
y = filedatay.ToArray();
Console.Write("data from fx file is :");
for (int i = 0; i < y.Length; i++)
{
Console.Write(y[i] + " ");
}
Console.WriteLine();
#endregion
Console.WriteLine("Enter value of x:");
double X = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("For value :" + X + " fn calculated via langrange is : " + langrange(x, y, X));
fdd(x, y); //forward divided difference table
newtonfdd(x,y,X); //newton forward divided difference table using fdd optimal
// Suspend the screen.
Console.ReadLine();
}
public static double langrange(double[] x, double[] y, double X)
{
double[] l = new double[x.Length];
double[] z = new double[x.Length];
double sum = 0, num = 1, denum = 1;
for (int i = 0; i < x.Length; i++)
{
num = 1; denum = 1;
for (int j = 0; j < x.Length; j++)
{
if (i != j)
{
num *= (X - x[j]);
denum *= (x[i] - x[j]);
}
}
l[i] = num / denum;
z[i] = l[i] * y[i];
sum += z[i];
}//end for
return sum;
}
public static void fdd(double[] x, double[] y)
{
double[,] y1 = new double[y.Length, y.Length];
for (int i = 0; i < y.Length; i++)
{
y1[i,0] = y[i];
}
for (int j = 1; j < x.Length; j++)
for (int i = 0; i < (x.Length - j); i++)
y1[i, j] = Math.Round(y1[i + 1, j - 1] - y1[i, j - 1], 4) / (x[i + j] - x[i]); // for round about value
Console.WriteLine();
Console.WriteLine("**********Forward Difference Table ***********");
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("OD 1D 2D 3D");
Console.WriteLine();
//display Forward Difference Table
for (int i = 0; i < x.Length; i++)
{
Console.Write(x[i] + " ");
for (int j = 0; j < (x.Length); j++)
if (y1[i, j] != 0)
Console.Write(y1[i, j] + " ");
Console.WriteLine();
}//for ends
}
public static void newtonfdd(double[] x,double[] y,double X)
{
//double[,]
fddtable = new double[x.Length, y.Length];
double ans = 0;//fo
for (int i = 0; i < y.Length; i++)
{
fddtable[i, 0] = y[i];
}
double product = 1;
ans = fddtable[0, 0];
for (int i = 1; i < x.Length; i++)
{
product *= (X - x[i - 1]);
ans += product * fddoptimal(0, i);
}
Console.WriteLine("Sum using Newton FDD is :" + ans);
}
public static double fddoptimal(int i, int j)
{
if (j == 0)
return fddtable[i, j];
if (fddtable[i, j] == 0)
{
double first = fddoptimal(i + 1, j - 1);
double second = fddoptimal(i, j - 1);
double thrid = first - second;
fddtable[i, j] = (thrid);
fddtable[i, j] = (thrid) / (x[i + j] - x[i]);
}
return fddtable[i, j];
}
}
}File f//File should look like
0
1
3 file fx
1
3
55