package Optimize @ISA = qw() sub nS2Calculation return shift->{nS2Calculation}; sub SetnS2Calculation sub SetnS2Calculation { my($this,$n)= return $this->{nS2Calculation} = $n; sub IncrementnS2 sub IncrementnS2 { my($this)= return $this->{nS2Calculation}++; sub Variable sub Variable { my ($this,$i)= return $this->{pVariables}->[$i]; sub pVariables sub pVariables { my ($this)= return $this->{pVariables}; sub pParameterNameArray sub pParameterNameArray { my ($this) = return $this->{pParameterNameArray}; sub new my ($module) = @_; return $this; sub DESTROY my $this = shift; sub RecoverParams my ($pOptVars, $pAllParams, $pOptId) = @_; return \@a; sub PDLtoList my ($piddle) = @_; return @a; sub PDLtoListRef my ($piddle) = @_; return \@a; sub BinarySearch my ($this, $xmin, $xmax, $pCalS, $nMaxIter, $xEPS, $SEPS, $iPrintLevel) = @_; return ([0.0], 0.0); return ([($xmin+$xmax)/2.0], ($Smin+$Smax)/2.0) if(abs($xmax - $xmin) < $xEPS); return ([$xhalf], $Shalf) if(abs($Shalf) < $SEPS); return ([($xmin+$xmax)/2.0], ($Smin+$Smax)/2.0); sub PrintParameters my ($this, $IsDetail, $pVars, $MinVal, $PrintAll) = @_; returned'" if(!defined $MinVal); return; sub Initialize my ($this) = @_; sub RecoverParameters my ($this, $pVars) = @_; return if(!defined $pRecoverFunction); sub CalPenalty my ($this, $Penalty, $pVars, $IsPrint) = @_; return $p; sub AddParameters2 my ($this, @params) = @_; return (\@Name, \@pVariable, \@Guess, \@OptId, \@Scale); sub AddParameters my ($this, @params) = @_; return $this->AddParameters2(@params) if($params[6] =~ /CODE\(0x/); return (\@Name, \@pVariable, \@Guess, \@OptId, \@Scale); sub UpdateParameters my ($this) = @_; sub XVal my ($this, $y, $EPS, $nMaxIter, $xmin, $xmax, $xinit, $dx, $Debug) = @_; return $this->XValByBinaryMethod($y, $EPS, $nMaxIter, $xmin, $xmax, $xinit, $dx, $Debug); return $this->XValByNewtonMethod($y, $EPS, $nMaxIter, $xmin, $xmax, $xinit, $dx, $Debug); sub XValByNewtonMethod my ($this, $y, $EPS, $nMaxIter, $xmin, $xmax, $xinit, $dx, $Debug) = @_; return undef; return undef; return $x; sub YVal my ($this, $x) = @_; return &$pFunc($this, $x); sub YCal my ($this, $x) = @_; return &$pFunc($this, $x); sub CalS2 my ($this) = @_; return $S2; sub mlsqYCal my ($this, $x, $pVars) = @_; return $ycal; sub mlsqFunc my ($idx, $x) = @_; return 1.0 if($idx == 0); return $x**$idx; sub mlsq my ($this, $pX, $pY, $m, $iPrintLevel) = @_; return \@c; sub mlsqYCal2 my ($this, $x, $pVars) = @_; return $ycal; sub mlsqFunc2 my ($this, $idx, $x) = @_; return 1.0 if($n == 0); return $x**$n; sub mlsq2 my ($this, $pX, $pY, $pm, $iPrintLevel) = @_; $this->{pFunc} = sub { $this->mlsqFunc2( $this->{YCalFunc} = sub { mlsqYCal2( sub { $this->mlsqFunc2( return ($pCi, $S2); sub LCFunctionsYCal my ($this, $x, $pVars) = @_; return $ycal; sub lsqLCFuncions my ($this, $pX, $pY, $nParams, $pFunc, $iPrintLevel) = @_; return \@c; sub LinearOptimization my ($pVariables, $pFunc, $iPrintLevel, $pBuildDifferentialMatrixesFunc) = @_; return $NewS; sub SetDumpingFactor my ($this, $Dump0, $Dump1, $nDump) = @_; return ($Dump0, $Dump1, $DumpStep, $nDump); sub ModifiedNewton my ($this, $pVariables, $pFunc, $EPS, $nMaxIter, $iPrintLevel, $pBuildDifferentialMatrixesFunc) = @_; return $MinS; return $MinS; return -1; sub BuildDifferentialMatrixes my ($pFunc, $pVariables, $diffv) = @_; return ($Si, $Sij); sub BuildDifferentialVector my ($pFunc, $pVariables, $diffv) = @_; return $Si; sub BuildDifferentialMatrix my ($pFunc, $pVariables, $diffv) = @_; return $Sij; sub Differentiate1 my ($pFunc, $pVariables, $idx, $dv) = @_; return ($S1 - $Sm1) / $dv / 2.0; sub Differentiate2 my ($pFunc, $pVariables, $idx, $jdx, $dv) = @_; return ($S1 - $Sm1) / $dv / 2.0; sub Optimize my $this = shift; my $Method = shift; my $pCoeff = $this->mlsq( return ($pCoeff, $S2); my ($pCoeff, $S2) = $this->mlsq2( return ($pCoeff, $S2); my $pCoeff = $this->lsqLCFuncions( return ($pCoeff, $S2); my ($pInitial, $pOptId, $pScale, $EPS, $nMaxIter, $iPrintLevel, $pMinimizationFunc, $pPDLDisplayFunc, $pBuildDifferentialMatrixesFunc ) = @_; return 0; return ($pOptVars, $MinVal); return ($pOptVars, $MinVal); return ($pOptVars, $MinVal); return (\@a, $ssize); return 0; return 0;