- #-Newtons divided difference interpolation formula implementation using perl language-----
- =comment
- -----Input Instruction------
- Enter the number of records
- Now enter the value of x and corresponding y
- Finally enter the value of x for finding y.
- =cut
- #-------------main code start---------
- print "\Enter how many record you to enter : ";
- $n = <>;
- $k = 0;
- print "Enter the value of x with corresponding y : \n";
- for($i=0; $i<$n; $i++)
- {
- $x[$i] = <>; # Input x[]
- $y[$k][$i]= <>; # Input y[]
- }
- print "\n\nEnter X for finding f(x): ";
- $p = <>;
- # Mechanism for difference table-----------
- for($i=1;$i<$n;$i++)
- {
- $k=$i;
- for($j=0;$j<($n-$i);$j++)
- {
- $y[$i][$j]=($y[$i-1][$j+1]-$y[$i-1][$j])/($x[$k]-$x[$j]);
- $k++;
- }
- }
- # Print difference table-----------
- print "\n\n--------------------------------Difference table for Newtons Divided Formula Formula--------------------------------------\n";
- print "------------------------------------------------------------------------------------------------------------------------------------------\n";
- print " X\t\t";
- for($i=0;$i<$n;$i++){
- print "Y($i)\t\t";
- }
- print "\n------------------------------------------------------------------------------------------------------------------------------------------\n";
- for($i=0;$i<$n;$i++)
- {
- printf("\n %.4lf\t",$x[$i]);
- for($j=0;$j<($n-$i);$j++)
- {
- printf(" %.3lf ",$y[$j][$i]);
- }
- print "\n";
- }
- $i=0;
- do
- {
- if(($x[$i]<$p) && ($p<$x[$i+1])){
- $k=1;
- }
- else{
- $i++;
- }
- }while($k != 1);
- $f=$i;
- $sum=0;
- for($i=0;$i<($n-1);$i++)
- {
- $k=$f;
- $temp=1;
- for($j=0;$j<$i;$j++)
- {
- $temp = $temp * ($p - $x[$k]);
- $k++;
- }
- $sum = $sum + ($temp*($y[$i][$f]));
- }
- printf("\n\nFinal answer f(%.2f) = %f\n\n",$p,$sum);
- print "-------------THANK YOU------------\n";
- =comment
- --------------Input example-----------
- 5
- 0 1
- 1 3
- 3 49
- 4 129
- 7 813
- .3
- Ans : (0.30) = 1.831000
- =cut
No comments:
Post a Comment