@result=grid(2,-2,2,-2,4,1e-15,1000); print"\n*@result*"; ($user,$system,$cuser,$csystem) = times; print "\n***\n$user\n***"; sub grid($_) { my $max_rsd = $_[0]; my $min_rsd = $_[1]; my $max_shift = $_[2]; my $min_shift = $_[3]; my $resolution = $_[4]; my $precision = $_[5]; my $loopcount = 0; my $delta_rsd = ($max_rsd-$min_rsd)*(1/$resolution); my $delta_shift = ($max_shift-$min_shift)*(1/$resolution); my @memory = (0,0,10000); do { #******Find Min Value******* for($i=$min_rsd;$i<=$max_rsd;$i=$i+$delta_rsd) { #print "(i: $i, Max: $max_rsd, Min: $min_rsd,\n $min_rsd+$delta_rsd)"; for($j=$min_shift;$j<=$max_shift;$j=$j+$delta_shift) { my $mse = function($i, $j);#********************* $temp=$min_shift+$delta_shift; print "(j: $j, Max: $max_shift, Min: $min_shift,\n d: $delta_shift +: $temp"; if($mse < $memory[2]) { @memory = ($i, $j, $mse); #print "($memory[0],$memory[1])"; } if($temp==$min_shift){print" true)\n";} else{print" false)\n";} } } #******Focus Parameters******* #$max_rsd = $memory[0]+$delta_rsd; #$min_rsd = $memory[0]-$delta_rsd; #$max_shift = $memory[1]+$delta_shift; #$min_shift = $memory[1]-$delta_shift; #$delta_rsd = ($max_rsd-$min_rsd)*(1/$resolution); #$delta_shift = ($max_shift-$min_shift)*(1/$resolution); print"($memory[0], $max_rsd, $min_rsd,\n $delta_rsd)"; if($memory[0] == $max_rsd or $memory[0] == $min_rsd) { $max_rsd = $memory[0]+$delta_rsd*$resolution*(1/2); $min_rsd = $memory[0]-$delta_rsd*$resolution*(1/2); $max_shift = $memory[1]+$delta_shift*$resolution*(1/2); $min_shift = $memory[1]-$delta_shift*$resolution*(1/2); } else { $max_rsd = $memory[0]+$delta_rsd*(1/2); $min_rsd = $memory[0]-$delta_rsd*(1/2); $max_shift = $memory[1]+$delta_shift*(1/2); $min_shift = $memory[1]-$delta_shift*(1/2); $delta_rsd = ($max_rsd-$min_rsd)*(1/$resolution); $delta_shift = ($max_shift-$min_shift)*(1/$resolution); } $loopcount++; if($max_rsd == $min_rsd){print " e\n";} else{print " n\n";} } while((2*$delta_rsd>$precision));#and ($loopcount<$_[6])); #while(($delta_rsd!=0) and ($delta_shift!=0) and ($loopcount<$_[6])); return @memory; } sub function($_) #arbitary function...will be given in the partually written program { return ($_[0]-50.02)**2+2; } #### for($j=$min_shift;$j<=$max_shift;$j=$j+$delta_shift) { my $mse = function($i, $j);#********************* $temp=$min_shift+$delta_shift; print "(j: $j, Max: $max_shift, Min: $min_shift,\n d: $delta_shift +: $temp"; if($mse < $memory[2]) { @memory = ($i, $j, $mse); #print "($memory[0],$memory[1])"; } if($temp==$min_shift){print" true)\n";} else{print" false)\n";} }