while( abs( $mutRate - 0.01) > 1e-16 ) { ++$iter; $k *= $mutRate * 100; # map $_ /= ( $mutRate * 100), @$_ for @lnPAM; for my $aref ( @lnPAM ) { $_ /= ( $mutRate * 100 ) for @$aref; } # @matrix = map[ map exp( $_ ), @$_ ], @lnPAM; undef @matrix; for my $aref ( @lnPAM ) { my @temp; push @temp, exp( $_ ) for @$aref; push @matrix, \@temp; } # $mutRate = sum map{ $freq[ $_ ] * ( 1 - $matrix[ $_ ][ $_ ] ) } 0..19; $mutRate = 0; for my $i ( 0 .. 19 ) { $mutRate += $freq[ $i ] * ( 1 - $matrix[ $i ][ $i ] ); } printf "After %d iteration(s), k=%13.9f, RateMutation=%19.17f\n", $iter, $k, $mutRate; }