26 lines
885 B
Perl
26 lines
885 B
Perl
#!/usr/bin/perl -w
|
|
use strict;
|
|
|
|
use PDL;
|
|
use PDL::Math;
|
|
use PDL::Fit::Polynomial;
|
|
|
|
my $x = float [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
my $y = float [1, 6, 17, 34, 57, 86, 121, 162, 209, 262, 321];
|
|
# above will output: 3.00000037788248 * $x**2 + 1.99999750988868 * $x + 1.00000180493936
|
|
|
|
# $x = float [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
# $y = float [ 2.7, 2.8, 31.4, 38.1, 58.0, 76.2, 100.5, 130.0, 149.3, 180.0];
|
|
# above correctly returns: " 1.08484845125187 * $x**2 + 10.3551513321297 * $x-0.616363852007752 "
|
|
|
|
my ($yfit, $coeffs) = fitpoly1d $x, $y, 3; # 3rd degree
|
|
|
|
foreach (reverse(0..$coeffs->dim(0)-1)) {
|
|
print " +" unless(($coeffs->at($_) <0) || $_==$coeffs->dim(0)-1); # let the unary minus replace the + operator
|
|
print " ";
|
|
print $coeffs->at($_);
|
|
print " * \$x" if($_);
|
|
print "**$_" if($_>1);
|
|
print "\n" unless($_)
|
|
}
|