#!/usr/bin/perl -w

use lib "d:/Programs/Perl/lib";

use strict;
use Sci::Science;

my @x = (0.15,       0.20,       0.25,       0.30,       0.35);
my @y = (0.86070798, 0.81873075, 0.77880078, 0.74081822, 0.70468809);
my $n = 55;
my $xi = 0.27;
	
my $v = InterpolateByLagrange(\@x, \@y, $xi);
my $z = exp(-$xi);
print "xi=$xi, v=$v, z=$z\n";

exit;

sub InterpolateByLagrange
{
	my ($pX, $pY, $x) = @_;

	my $nData = @$pX;
	if($nData < 3 or $x < $pX->[0] or $x >= $pX->[$nData-1]) {
		return undef;
	}

	my $w = 0.0;
	for(my $i = 0 ; $i < $nData-1 ; $i++) {
		my $w1 = 1.0;
		my $w2 = $pX->[$i];
		for(my $j = 0 ; $j < $nData-1 ; $j++) {
			my $w3 = $pX->[$j];
			if($i != $j) {
				$w1 *= ($x - $w3) / ($w2 - $w3);
			}
		}
		$w += $w1 * $pY->[$i];
	}
	return $w;
}
