Newtons divided difference interpolation formula implementation using perl language


  1. #-Newtons divided difference interpolation formula implementation using perl language-----
  2.  
  3. =comment
  4.  
  5.     -----Input Instruction------
  6.  
  7.     Enter the number of records
  8.  
  9.     Now enter the value of x and corresponding y
  10.  
  11.     Finally enter the value of x for finding y.
  12.  
  13. =cut
  14.  
  15.     #-------------main code start---------
  16.  
  17.  
  18.  
  19.   print "\Enter how many record you to enter : ";
  20.  
  21.   $n = <>;
  22.  
  23.   $k = 0;
  24.  
  25.   print "Enter the value of x with corresponding y : \n";
  26.  
  27.   for($i=0; $i<$n; $i++)
  28.  
  29.   {
  30.  
  31.    $x[$i] = <>; # Input x[]
  32.  
  33.    $y[$k][$i]= <>; # Input y[]
  34.  
  35.   }
  36.  
  37.   print "\n\nEnter X for finding f(x): ";
  38.  
  39.   $p = <>;
  40.  
  41.   # Mechanism for difference table-----------
  42.  
  43.   for($i=1;$i<$n;$i++)
  44.  
  45.   {
  46.  
  47.     $k=$i;
  48.     for($j=0;$j<($n-$i);$j++)
  49.     {
  50.  
  51.      $y[$i][$j]=($y[$i-1][$j+1]-$y[$i-1][$j])/($x[$k]-$x[$j]);
  52.  
  53.      $k++;
  54.  
  55.     }
  56.  
  57.   }
  58.  
  59.   # Print difference table-----------
  60.  
  61. print "\n\n--------------------------------Difference table for Newtons Divided Formula Formula--------------------------------------\n";
  62.  
  63. print "------------------------------------------------------------------------------------------------------------------------------------------\n";
  64.  
  65. print "     X\t\t";
  66.  
  67. for($i=0;$i<$n;$i++){
  68.  
  69.     print "Y($i)\t\t";
  70.  
  71. }
  72.  
  73. print "\n------------------------------------------------------------------------------------------------------------------------------------------\n";
  74.  
  75.  
  76.   for($i=0;$i<$n;$i++)
  77.  
  78.   {
  79.  
  80.     printf("\n %.4lf\t",$x[$i]);
  81.  
  82.     for($j=0;$j<($n-$i);$j++)
  83.  
  84.     {
  85.  
  86.      printf("           %.3lf             ",$y[$j][$i]);
  87.  
  88.     }
  89.  
  90.    print "\n";
  91.  
  92.   }
  93.  
  94.  
  95.   $i=0;
  96.  
  97.   do
  98.  
  99.   {
  100.  
  101.    if(($x[$i]<$p) && ($p<$x[$i+1])){
  102.  
  103.     $k=1;
  104.  
  105.     }
  106.  
  107.    else{
  108.  
  109.     $i++;
  110.  
  111.     }
  112.  
  113.   }while($k != 1);
  114.  
  115.  
  116.  
  117.   $f=$i;
  118.  
  119.   $sum=0;
  120.  
  121.   for($i=0;$i<($n-1);$i++)
  122.  
  123.   {
  124.  
  125.    $k=$f;
  126.  
  127.    $temp=1;
  128.  
  129.    for($j=0;$j<$i;$j++)
  130.  
  131.    {
  132.  
  133.     $temp = $temp * ($p - $x[$k]);
  134.  
  135.     $k++;
  136.  
  137.    }
  138.  
  139.     $sum = $sum + ($temp*($y[$i][$f]));
  140.  
  141.   }
  142.  
  143.   printf("\n\nFinal answer f(%.2f) = %f\n\n",$p,$sum);
  144.  
  145.   print "-------------THANK YOU------------\n";
  146.  =comment
  147.  
  148. --------------Input example-----------
  149.  
  150.     5
  151.  
  152.     0 1
  153.  
  154.     1 3
  155.  
  156.     3 49
  157.  
  158.     4 129
  159.  
  160.     7 813
  161.  
  162.     .3
  163.  
  164.     Ans : (0.30) = 1.831000
  165.  
  166. =cut
  167.  

No comments:

Post a Comment