#!/usr/bin/perl

use lib 'd:/Programs/Perl/lib';

use strict;
use Sci::Optimize;

my $m = 5;
my $iPrintLevel = 0;
my @x;
my @y;
my $nData = 30;
for(my $i = 0 ; $i < $nData ; $i++) {
	$x[$i] = IdxToX($i);
	$y[$i] = YObs($x[$i]);
}

my $Opt = new Optimize;
#my ($pCi) = $Opt->mlsq(\@x, \@y, $m, $iPrintLevel);
my ($pCi, $S2) = $Opt->Optimize("mlsq", \@x, \@y, $m, $iPrintLevel);
print "Optimized at (", join(',',@{$pCi}), ") with S2=$S2\n";

my $OutFile = "a.csv";
open(OUT, ">$OutFile") or die "Can not write to [$OutFile].\n";
print OUT "x,yobs,ycal,ci\n";
for(my $i = 0 ; $i < $nData ; $i++) {
	my $x = IdxToX($i);
	my $yobs = YObs($x);
	my $ycal = $Opt->YCal($x);
	if($i <= $m) {
		print OUT "$x,$yobs,$ycal,$pCi->[$i]\n";
	}
	else {
		print OUT "$x,$yobs,$ycal\n";
	}
}
close(OUT);
exit;

#==============================================
# 
#==============================================
sub IdxToX
{
	my ($i) = @_;
	return $i * 0.1;
}

sub YObs
{
	my ($x) = @_;
	my $yobs = exp(-$x*$x);
	return $yobs;
}
