#! /usr/bin/perl use strict; use warnings; sub lagrange { #x is an array of x values, f is an array of function values, LC are the reduced lagrange coefficients. my @x = shift; my @f = shift; my ($i, $j); my @LC; my $point = @x; my $den = 1; for ($i=0; $i < $point; $i++) { for ($j = 0; $j < $point; $j++) { unless ($j == $i) { $den *= ($x[$i] - $x[$j]); } $LC[$i] = $f[$i]/$den; $den = 1; } } return \@LC; } sub lageval { my @x = shift; my @LC = shift; my $x0 = shift; my $point = @x; my @mult; my $sum = 0; my ($i, $j); for($i=0; $i<$point; $i++) { $mult[$i] = 1; } for ($i=0; $i<$point;$i++) { for ($j = 0; $j<$point; $j++) { unless ($j == $i) { $mult[$i] *= $x0 - $x[$j]; } } $sum += $mult[$i] * $LC[$i]; } return $sum; } 1;