Тема: PERL: Как "вытянуть" математические формулы?
Здравствуйте, в PERL я не очень опознан, но не удается мне "вытянуть" математические формули с кода(200 строк).
Вот наисложнейшая для меня часть кода которую я не могу понять.
sub kelly {
my $mrg = 0.99999;
my $mrg2 = 0.99999;
my $aline = $_[2];
my $gline = $_[4];
my $raline = $aline < 0 ? int($aline-0.3) : int($aline+0.3);
my $rgline = int($gline+0.3);
my @p = two($_[0], $_[1], $raline, $rgline);
my @f = ();
my ($stop, $rem, $t, $u, $n, $i, $ulog, $bu);
my $index = 0;
my ($sta, $sto, $reta, $reto);
my @o = (
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
);
#print "@p\n";
@o[0] = [afill1($aline-$raline,$_[3]*$mrg)];
@o[1] = [afill2($aline-$raline,$_[3]/($_[3]-1)*$mrg)];
@o[2] = [gfill1($gline-$rgline,$_[5]*$mrg2)];
@o[3] = [gfill2($gline-$rgline,$_[5]/($_[5]-1)*$mrg2)];
#print "$o[0][0] $o[0][1] $o[0][2] $o[0][3] $o[0][4] $o[0][5] $o[0][6] $o[0][7] $o[0][8]\n";
#print "$o[2][0] $o[2][1] $o[2][2] $o[2][3] $o[2][4] $o[2][5] $o[2][6] $o[2][7] $o[2][8]\n";
while (!$stop) {
$rem = -1;
for ($t = 0; $t < 5; $t++) {
$f[$t] += 0.001;
for ($u = 0, $n = 0; $n < @p; $n++) {
$ulog=0;
for ($i = 0; $i < 5; $i++) {
$ulog += $f[$i]*($o[$i][$n]-1);
}
#print "n,u,ulog:$n $u $ulog\n";
$ulog = -0.999 if ($ulog < -0.999);
$u += $p[$n]*log(1+$ulog);
}
if ($u > $bu+0.000001) {
$rem=$t;
$bu = $u;
}
$f[$t] -= 0.001;
}
if ($rem >= 0) {
$f[$rem] += 0.001;
} else {
$stop = 1;
}
# printf "%.4f %.3f %.3f %.3f %.3f\n", $bu, $f[0], $f[1], $f[2],$f[3];
}
printf "%.4f %.3f %.3f %.3f %.3f\n", $bu, $f[0],$f[1],$f[2],$f[3];
# print "$bu @f\n";
$sta = $f[0] + $f[1];
$sto = $f[2] + $f[3];
$reta = -$sta;
$reto = -$sto;
if ($_[6] + $raline == $_[7]) {
$index += 3;
} elsif ($_[6] + $raline < $_[7]) {
$index +=6;
}
if ($_[6]+$_[7] == $rgline) {
$index++;
} elsif ($_[6]+$_[7] < $rgline) {
$index+=2;
}
for ($i = 0; $i < 2; $i++) {
$reta += $f[$i]*$o[$i][$index];
}
for ($i = 2; $i < 4; $i++) {
$reto += $f[$i]*$o[$i][$index];
}
return ($sta, $sto, $reta, $reto);
}
Почему мне это нужно?
Я не могу понять связь введенных цифр с конечным результатом, а именно последние 4 цифры с 13.
Если кто желает помочь разобрать целый код то могу предложить вознаграждение.