Statistiques
| Branche: | Révision :

meplib / binaries / bin / checkSolutions-02.pl @ master

Historique | Voir | Annoter | Télécharger (13,17 ko)

1 08aa5d9e Serge Torres
#! /usr/bin/perl
2 08aa5d9e Serge Torres
3 08aa5d9e Serge Torres
# checkSolutions-02.pl - ST - 2006-03-15
4 08aa5d9e Serge Torres
#
5 08aa5d9e Serge Torres
# Check the quality of and sort a set of solutions with the Maple infnorm.
6 08aa5d9e Serge Torres
#
7 08aa5d9e Serge Torres
# COMMAND LINE SYNTAX:
8 08aa5d9e Serge Torres
# checkSolutions-01.pl  digitsFile solutionsFile function lowerBound upperBound
9 08aa5d9e Serge Torres
10 08aa5d9e Serge Torres
# NOTE(S):
11 08aa5d9e Serge Torres
# Changes from checkSolutions-02.pl: This versions can use several bit sizes
12 08aa5d9e Serge Torres
# ---------------------------------- instead of a single one for all 
13 08aa5d9e Serge Torres
#                                    coefficients
14 08aa5d9e Serge Torres
#
15 08aa5d9e Serge Torres
# This version checks the solutions produced by the "gp" PARI utility
16 08aa5d9e Serge Torres
# Use only for "monochunk" coefficients. For multiple chunks 
17 08aa5d9e Serge Torres
# coefficients use the "checkSimpleSolutions" utilities family.
18 08aa5d9e Serge Torres
19 08aa5d9e Serge Torres
##############################################################################
20 08aa5d9e Serge Torres
# PROGRAM DECLARATIONS
21 08aa5d9e Serge Torres
##############################################################################
22 08aa5d9e Serge Torres
23 08aa5d9e Serge Torres
BEGIN
24 08aa5d9e Serge Torres
{
25 08aa5d9e Serge Torres
  # Modify @INC here if necessary
26 08aa5d9e Serge Torres
  my $scriptDirName = `dirname $0`;
27 08aa5d9e Serge Torres
  chomp($scriptDirName);
28 08aa5d9e Serge Torres
  unshift(@INC,$scriptDirName);
29 08aa5d9e Serge Torres
  unshift(@INC, '../utils');
30 08aa5d9e Serge Torres
};
31 08aa5d9e Serge Torres
32 08aa5d9e Serge Torres
# core modules
33 08aa5d9e Serge Torres
use strict; # must be first to force strict in all others
34 08aa5d9e Serge Torres
use Carp;
35 08aa5d9e Serge Torres
use Getopt::Long;
36 08aa5d9e Serge Torres
use Math::BigInt;
37 08aa5d9e Serge Torres
use Math::BigRat;
38 08aa5d9e Serge Torres
use Math::BigFloat;
39 08aa5d9e Serge Torres
40 08aa5d9e Serge Torres
# custom modules
41 08aa5d9e Serge Torres
# Uncomment if you want to use standard exit error codes.
42 08aa5d9e Serge Torres
# the stdExitErrors.pm file must be available around.
43 08aa5d9e Serge Torres
use stdExitErrors;
44 08aa5d9e Serge Torres
45 08aa5d9e Serge Torres
##############################################################################
46 08aa5d9e Serge Torres
# PROGRAM CONSTANT DECLARATIONS
47 08aa5d9e Serge Torres
##############################################################################
48 08aa5d9e Serge Torres
my $bigIntZero = Math::BigInt->new('0');
49 08aa5d9e Serge Torres
my $debug = 1;
50 08aa5d9e Serge Torres
my $variableName = "x"; 
51 08aa5d9e Serge Torres
my $mapleApplication = "/usr/local/maple/bin/maple";
52 08aa5d9e Serge Torres
##############################################################################
53 08aa5d9e Serge Torres
# PROGRAM VARIABLE DECLARATIONS
54 08aa5d9e Serge Torres
##############################################################################
55 08aa5d9e Serge Torres
my $digitsFileName    = "";
56 08aa5d9e Serge Torres
my $solutionsFileName = "";
57 08aa5d9e Serge Torres
my $positionsFileName = "";
58 08aa5d9e Serge Torres
my $numDigits         = 0;
59 08aa5d9e Serge Torres
my $numDigitsData     = 0;
60 08aa5d9e Serge Torres
my @digits            = ();
61 08aa5d9e Serge Torres
my $function          = "";
62 08aa5d9e Serge Torres
my $lowerBound        = "";
63 08aa5d9e Serge Torres
my $upperBound        = "";
64 08aa5d9e Serge Torres
my $elem              = "";
65 08aa5d9e Serge Torres
my $line              = "";
66 08aa5d9e Serge Torres
my $lineNum           = 0;
67 08aa5d9e Serge Torres
my @line              = ();
68 08aa5d9e Serge Torres
my $isFirstLine       = 1;
69 08aa5d9e Serge Torres
my $powerOfTen        = 0;
70 08aa5d9e Serge Torres
my $solutionVectorRef = 0;
71 08aa5d9e Serge Torres
my @solutionMatrix    = ();
72 08aa5d9e Serge Torres
my @positionsVector   = ();
73 08aa5d9e Serge Torres
my $powerIndex        = 0;
74 08aa5d9e Serge Torres
my $polynomialDegree  = 0;
75 08aa5d9e Serge Torres
my $polynomialString  = "";
76 08aa5d9e Serge Torres
my @polynomials       = ();
77 08aa5d9e Serge Torres
my $mapleProgram      = "";
78 08aa5d9e Serge Torres
my $mapleResult       = 0;
79 08aa5d9e Serge Torres
my $infNorm           = "";
80 08aa5d9e Serge Torres
my @infNorm           = ();
81 08aa5d9e Serge Torres
my %sortHash          = ();
82 08aa5d9e Serge Torres
my @sortedInfNorms    = ();
83 08aa5d9e Serge Torres
#
84 08aa5d9e Serge Torres
#
85 08aa5d9e Serge Torres
#
86 08aa5d9e Serge Torres
##############################################################################
87 08aa5d9e Serge Torres
# TEST ENVIRONMENT AND CONFIGURATION VARIABLES
88 08aa5d9e Serge Torres
##############################################################################
89 08aa5d9e Serge Torres
90 08aa5d9e Serge Torres
##############################################################################
91 08aa5d9e Serge Torres
# INITIALIZE DEBUG FILE
92 08aa5d9e Serge Torres
##############################################################################
93 08aa5d9e Serge Torres
94 08aa5d9e Serge Torres
##############################################################################
95 08aa5d9e Serge Torres
# INITIALIZE LOG FILE
96 08aa5d9e Serge Torres
##############################################################################
97 08aa5d9e Serge Torres
98 08aa5d9e Serge Torres
##############################################################################
99 08aa5d9e Serge Torres
# GET COMMAND LINE ARGUMENTS
100 08aa5d9e Serge Torres
##############################################################################
101 08aa5d9e Serge Torres
102 08aa5d9e Serge Torres
##############################################################################
103 08aa5d9e Serge Torres
# PROGRAM MAIN
104 08aa5d9e Serge Torres
##############################################################################
105 08aa5d9e Serge Torres
&usage();
106 08aa5d9e Serge Torres
#
107 08aa5d9e Serge Torres
# Check the command line parameters
108 08aa5d9e Serge Torres
#
109 08aa5d9e Serge Torres
# It's a TODO!
110 08aa5d9e Serge Torres
#
111 08aa5d9e Serge Torres
# Open the files
112 08aa5d9e Serge Torres
#
113 08aa5d9e Serge Torres
# Open the digits file
114 08aa5d9e Serge Torres
#
115 08aa5d9e Serge Torres
if (! open(DF, "<$digitsFileName"))
116 08aa5d9e Serge Torres
{
117 08aa5d9e Serge Torres
  print STDERR "\n\nCan't open $digitsFileName. Aborting the program!\n\n";
118 08aa5d9e Serge Torres
  exit($EX_NOINPUT);
119 08aa5d9e Serge Torres
}
120 08aa5d9e Serge Torres
# Next the solution vector file.
121 08aa5d9e Serge Torres
#
122 08aa5d9e Serge Torres
if (! open(SVF, "<$solutionsFileName"))
123 08aa5d9e Serge Torres
{
124 08aa5d9e Serge Torres
  print STDERR "\n\nCan't open $solutionsFileName. Aborting the program!\n\n";
125 08aa5d9e Serge Torres
  exit($EX_NOINPUT);
126 08aa5d9e Serge Torres
}
127 08aa5d9e Serge Torres
#
128 08aa5d9e Serge Torres
# Read the digits file
129 08aa5d9e Serge Torres
#
130 08aa5d9e Serge Torres
while ($line = <DF>)
131 08aa5d9e Serge Torres
{
132 08aa5d9e Serge Torres
  # Remove the '\n'.
133 08aa5d9e Serge Torres
  chomp($line);
134 08aa5d9e Serge Torres
  # Coalescing all consecutive spaces to one.
135 08aa5d9e Serge Torres
  $line =~ s/(\s)+/ /g;
136 08aa5d9e Serge Torres
  # Removing leading and trailling spaces.
137 08aa5d9e Serge Torres
  $line =~ s/(^\s*)||(\s*$)//g;
138 08aa5d9e Serge Torres
  # Forget about comment lines
139 08aa5d9e Serge Torres
  if ($line =~ /^\s*#/) { next; }
140 08aa5d9e Serge Torres
  @line = split(/ /, $line);
141 08aa5d9e Serge Torres
  if ($isFirstLine)
142 08aa5d9e Serge Torres
  {
143 08aa5d9e Serge Torres
    if (@line != 1)
144 08aa5d9e Serge Torres
    {
145 08aa5d9e Serge Torres
      print STDERR "\n\nInvalid number (", (@line * 1), ") of digits data.\n";
146 08aa5d9e Serge Torres
      print STDERR "Aborting the program!\n\n";
147 08aa5d9e Serge Torres
      exit($EX_DATAERR);
148 08aa5d9e Serge Torres
    }
149 08aa5d9e Serge Torres
    $numDigitsData  = $line;
150 08aa5d9e Serge Torres
    $isFirstLine    = 0;
151 08aa5d9e Serge Torres
  }
152 08aa5d9e Serge Torres
  else
153 08aa5d9e Serge Torres
  {
154 08aa5d9e Serge Torres
    if (@line != $numDigitsData)
155 08aa5d9e Serge Torres
    {
156 08aa5d9e Serge Torres
      print STDERR "\n\nThe number of announced digits data ($numDigitsData) and ";
157 08aa5d9e Serge Torres
      print STDERR "the number of actual digits data", (@line * 1), " do not match.\n";
158 08aa5d9e Serge Torres
      print STDERR "Aborting the program!\n\n";
159 08aa5d9e Serge Torres
      exit($EX_DATAERR);
160 08aa5d9e Serge Torres
    }
161 08aa5d9e Serge Torres
    @digits = @line;
162 08aa5d9e Serge Torres
    last;
163 08aa5d9e Serge Torres
  }
164 08aa5d9e Serge Torres
} # End while ($line = <DF>)
165 08aa5d9e Serge Torres
close(DF);
166 08aa5d9e Serge Torres
#
167 08aa5d9e Serge Torres
# Scan the solutions file.
168 08aa5d9e Serge Torres
#
169 08aa5d9e Serge Torres
while ($line = <SVF>)
170 08aa5d9e Serge Torres
{
171 08aa5d9e Serge Torres
  # Remove the '\n'.
172 08aa5d9e Serge Torres
  chomp($line);
173 08aa5d9e Serge Torres
  # Coalescing all consecutive spaces to one.
174 08aa5d9e Serge Torres
  $line =~ s/(\s)+/ /g;
175 08aa5d9e Serge Torres
  # Removing leading and trailling spaces.
176 08aa5d9e Serge Torres
  $line =~ s/(^\s*)||(\s*$)//g;
177 08aa5d9e Serge Torres
  # Only take into account the lines starting with "A[".
178 08aa5d9e Serge Torres
  if (! ($line =~ /^A\[/))
179 08aa5d9e Serge Torres
  {
180 08aa5d9e Serge Torres
    next;
181 08aa5d9e Serge Torres
  }
182 08aa5d9e Serge Torres
  # Remove syntatic sugar.
183 08aa5d9e Serge Torres
  $line =~ s/.*=\[//;
184 08aa5d9e Serge Torres
  $line =~ s/\]://;
185 08aa5d9e Serge Torres
  $solutionVectorRef = [];
186 08aa5d9e Serge Torres
  @$solutionVectorRef = split(/,/, $line);
187 08aa5d9e Serge Torres
  for (my $i = 0 ; $i < @$solutionVectorRef ; $i++)
188 08aa5d9e Serge Torres
  {
189 08aa5d9e Serge Torres
    $$solutionVectorRef[$i] = Math::BigInt->new($$solutionVectorRef[$i]);
190 08aa5d9e Serge Torres
    if($$solutionVectorRef[$i]->is_nan())
191 08aa5d9e Serge Torres
    {
192 08aa5d9e Serge Torres
      print STDERR "\n\n\"$line\" from the solution vector file holds an invalid";
193 08aa5d9e Serge Torres
      print STDERR " number at index $i.";
194 08aa5d9e Serge Torres
      print STDERR " Aborting the program!\n\n";
195 08aa5d9e Serge Torres
      exit($EX_DATAERR);
196 08aa5d9e Serge Torres
    }
197 08aa5d9e Serge Torres
  } # End for
198 08aa5d9e Serge Torres
  push(@solutionMatrix, $solutionVectorRef);
199 08aa5d9e Serge Torres
} # End while ($line = <SVF>)
200 08aa5d9e Serge Torres
#
201 08aa5d9e Serge Torres
# Degree of the polynomial
202 08aa5d9e Serge Torres
#
203 08aa5d9e Serge Torres
$polynomialDegree = @{$solutionMatrix[0]} - 1;
204 08aa5d9e Serge Torres
if ($polynomialDegree < 0)
205 08aa5d9e Serge Torres
{
206 08aa5d9e Serge Torres
  print STDERR "\n\n\"Polynomial degree ($polynomialDegree) is invalid:";
207 08aa5d9e Serge Torres
  print STDERR " it should be superior or equal to 0.";
208 08aa5d9e Serge Torres
  print STDERR " Aborting the program!\n\n";
209 08aa5d9e Serge Torres
  exit($EX_DATAERR);
210 08aa5d9e Serge Torres
}
211 08aa5d9e Serge Torres
#
212 08aa5d9e Serge Torres
# Compute the chunk multipliers
213 08aa5d9e Serge Torres
#
214 08aa5d9e Serge Torres
#
215 08aa5d9e Serge Torres
# Shape a polynomial for Maple
216 08aa5d9e Serge Torres
#
217 08aa5d9e Serge Torres
for (my $i = 0 ; $i < @solutionMatrix ; $i++)
218 08aa5d9e Serge Torres
{
219 08aa5d9e Serge Torres
  $polynomialString = "P:=$variableName->";
220 08aa5d9e Serge Torres
  for (my $j = 0 ; $j <= $polynomialDegree ; $j++)
221 08aa5d9e Serge Torres
  {
222 08aa5d9e Serge Torres
    if ($j != 0)
223 08aa5d9e Serge Torres
    {
224 08aa5d9e Serge Torres
      $polynomialString .= " + $variableName * ("
225 08aa5d9e Serge Torres
    }
226 08aa5d9e Serge Torres
    if (${$solutionMatrix[$i]}[$j] < 0)
227 08aa5d9e Serge Torres
    {
228 08aa5d9e Serge Torres
      $polynomialString .= "((${$solutionMatrix[$i]}[$j])";
229 08aa5d9e Serge Torres
    }
230 08aa5d9e Serge Torres
    else
231 08aa5d9e Serge Torres
    {
232 08aa5d9e Serge Torres
      $polynomialString .= "(${$solutionMatrix[$i]}[$j]";
233 08aa5d9e Serge Torres
    }
234 08aa5d9e Serge Torres
      #$polynomialString .= "* 2^$decPointPos)";
235 08aa5d9e Serge Torres
      $polynomialString .= "/2^$digits[$j]";
236 08aa5d9e Serge Torres
      #$polynomialString .= "+";
237 08aa5d9e Serge Torres
    if ($j != 0)
238 08aa5d9e Serge Torres
    {
239 08aa5d9e Serge Torres
      $polynomialString .= ") ";
240 08aa5d9e Serge Torres
    }
241 08aa5d9e Serge Torres
  } # End or $j
242 08aa5d9e Serge Torres
  $polynomialString .= (')' x ($polynomialDegree + 1));
243 08aa5d9e Serge Torres
  $polynomialString .= ";";
244 08aa5d9e Serge Torres
  push(@polynomials, $polynomialString);
245 08aa5d9e Serge Torres
} # End for $i
246 08aa5d9e Serge Torres
print STDERR $polynomialString, "\n";
247 08aa5d9e Serge Torres
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
248 08aa5d9e Serge Torres
#exit(0);
249 08aa5d9e Serge Torres
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
250 08aa5d9e Serge Torres
#
251 08aa5d9e Serge Torres
if ($debug)
252 08aa5d9e Serge Torres
{
253 08aa5d9e Serge Torres
  print STDERR "\nNum digits: $numDigitsData\n";
254 08aa5d9e Serge Torres
  for (my $i = 0 ; $i < @digits ; $i++)
255 08aa5d9e Serge Torres
  {
256 08aa5d9e Serge Torres
    print STDERR "$digits[$i] ";
257 08aa5d9e Serge Torres
  }
258 08aa5d9e Serge Torres
  print SDTERR "\n";
259 08aa5d9e Serge Torres
  print STDERR "\n Solutions:\n";
260 08aa5d9e Serge Torres
  for (my $i = 0 ; $i < @solutionMatrix ; $i++)
261 08aa5d9e Serge Torres
  {
262 08aa5d9e Serge Torres
    for (my $j = 0 ; $j < @{$solutionMatrix[$i]} ; $j++)
263 08aa5d9e Serge Torres
    {
264 08aa5d9e Serge Torres
      print STDERR "${$solutionMatrix[$i]}[$j] ";
265 08aa5d9e Serge Torres
    } # End for $j
266 08aa5d9e Serge Torres
    print STDERR "\n"
267 08aa5d9e Serge Torres
  } # End for $i
268 08aa5d9e Serge Torres
  print STDERR "\n";
269 08aa5d9e Serge Torres
  print STDERR "\n";
270 08aa5d9e Serge Torres
  print STDERR "Degree of the polynomial: $polynomialDegree";
271 08aa5d9e Serge Torres
  print STDERR "\n";
272 08aa5d9e Serge Torres
  print STDERR "Polynomials:\n";
273 08aa5d9e Serge Torres
  foreach $elem (@polynomials)
274 08aa5d9e Serge Torres
  {
275 08aa5d9e Serge Torres
    print STDERR "$elem\n"
276 08aa5d9e Serge Torres
  }
277 08aa5d9e Serge Torres
  print STDERR "\n\n";
278 08aa5d9e Serge Torres
} # End debug
279 08aa5d9e Serge Torres
#
280 08aa5d9e Serge Torres
# Run Maple and analyse the output.
281 08aa5d9e Serge Torres
#
282 08aa5d9e Serge Torres
#
283 08aa5d9e Serge Torres
# The interesting part is made of the three last lines.
284 08aa5d9e Serge Torres
# The last line is made of a simple prompt at the begining of the line: ">"
285 08aa5d9e Serge Torres
# 
286 08aa5d9e Serge Torres
for (my $i = 0 ; $i < @polynomials ; $i++)
287 08aa5d9e Serge Torres
{
288 08aa5d9e Serge Torres
  $mapleProgram = "with(numapprox);\n";
289 08aa5d9e Serge Torres
  $mapleProgram .= "Digits:=80;\n";
290 08aa5d9e Serge Torres
  $mapleProgram .= "interface(screenwidth=1000);";
291 08aa5d9e Serge Torres
  $mapleProgram .= $polynomials[$i];
292 08aa5d9e Serge Torres
  $mapleProgram .= "infnorm(($function-P(x)), x=$lowerBound..$upperBound, 'xmax');";
293 08aa5d9e Serge Torres
  $mapleResult = &runMaple($mapleProgram);
294 08aa5d9e Serge Torres
  for (my $j = 0 ; $j <  @$mapleResult; $j++)
295 08aa5d9e Serge Torres
  {
296 08aa5d9e Serge Torres
    if ($$mapleResult[$j] =~ /^> quit/)
297 08aa5d9e Serge Torres
    {
298 08aa5d9e Serge Torres
      #
299 08aa5d9e Serge Torres
      # Removing leading and trailling spaces for the exponent line. 
300 08aa5d9e Serge Torres
      $$mapleResult[$j - 3] =~ s/(^\s*)||(\s*$)//g;
301 08aa5d9e Serge Torres
      # Check if the exponent line is empty and, if not, that it is made of 
302 08aa5d9e Serge Torres
      # digits
303 08aa5d9e Serge Torres
      if ($$mapleResult[$j - 3] ne "" && $$mapleResult[$j - 3] !~ /[:alpha:]/)
304 08aa5d9e Serge Torres
      {
305 08aa5d9e Serge Torres
        $infNorm = $$mapleResult[$j - 3];
306 08aa5d9e Serge Torres
        $powerOfTen = '(' . $$mapleResult[$j - 3] . '))';
307 08aa5d9e Serge Torres
      }
308 08aa5d9e Serge Torres
      else
309 08aa5d9e Serge Torres
      {
310 08aa5d9e Serge Torres
        $infNorm = "";
311 08aa5d9e Serge Torres
        $powerOfTen = "";
312 08aa5d9e Serge Torres
      }
313 08aa5d9e Serge Torres
      # Removing leading and trailling spaces.
314 08aa5d9e Serge Torres
      $$mapleResult[$j - 2] =~ s/(^\s*)||(\s*$)//g;
315 08aa5d9e Serge Torres
      print STDERR '.';
316 08aa5d9e Serge Torres
      if (length($powerOfTen) > 0)
317 08aa5d9e Serge Torres
      {
318 08aa5d9e Serge Torres
        @infNorm = split(/ /, $$mapleResult[$j - 2]);
319 08aa5d9e Serge Torres
        $infNorm = sprintf("%.30f", 
320 08aa5d9e Serge Torres
	                eval("$infNorm[0] * ($infNorm[1]**$powerOfTen"));
321 08aa5d9e Serge Torres
      }
322 08aa5d9e Serge Torres
      else
323 08aa5d9e Serge Torres
      {
324 08aa5d9e Serge Torres
        $infNorm = sprintf("%.30f",($$mapleResult[$j - 2] * 1));
325 08aa5d9e Serge Torres
      }
326 08aa5d9e Serge Torres
      while(defined($sortHash{$infNorm}))
327 08aa5d9e Serge Torres
      {
328 08aa5d9e Serge Torres
        $infNorm .= ' ';
329 08aa5d9e Serge Torres
      }
330 08aa5d9e Serge Torres
      $sortHash{$infNorm} = $solutionMatrix[$i];
331 08aa5d9e Serge Torres
    } # End if ($$mapleResult[$j] =~ /^> quit/)
332 08aa5d9e Serge Torres
  } # End for $j
333 08aa5d9e Serge Torres
} # End for $i
334 08aa5d9e Serge Torres
print STDERR "\n";
335 08aa5d9e Serge Torres
@sortedInfNorms = sort {$a <=> $b} (keys(%sortHash));
336 08aa5d9e Serge Torres
foreach $elem (@sortedInfNorms)
337 08aa5d9e Serge Torres
{
338 08aa5d9e Serge Torres
  for (my $i = 0 ; $i < @{$sortHash{$elem}} ; $i ++)
339 08aa5d9e Serge Torres
  {
340 08aa5d9e Serge Torres
    print  "${$sortHash{$elem}}[$i] ";
341 08aa5d9e Serge Torres
  }
342 08aa5d9e Serge Torres
  print "-\> ";
343 08aa5d9e Serge Torres
  print sprintf("%.10e",eval($elem)),"\n";
344 08aa5d9e Serge Torres
}
345 08aa5d9e Serge Torres
346 08aa5d9e Serge Torres
# Uncomment this line and remove the next one if using stdExitErrors.
347 08aa5d9e Serge Torres
exit($EX_OK);
348 08aa5d9e Serge Torres
349 08aa5d9e Serge Torres
##############################################################################
350 08aa5d9e Serge Torres
# PROGRAM SUBS
351 08aa5d9e Serge Torres
##############################################################################
352 08aa5d9e Serge Torres
#
353 08aa5d9e Serge Torres
##############################################################################
354 08aa5d9e Serge Torres
# sub runMaple
355 08aa5d9e Serge Torres
##############################################################################
356 08aa5d9e Serge Torres
# Performed task: runs Maple with a program and returns the answer
357 08aa5d9e Serge Torres
#
358 08aa5d9e Serge Torres
# input   : $mapleProgram
359 08aa5d9e Serge Torres
# output  : $mapleResultRef
360 08aa5d9e Serge Torres
# globals : none
361 08aa5d9e Serge Torres
# uses    : none
362 08aa5d9e Serge Torres
# notes   : none
363 08aa5d9e Serge Torres
#
364 08aa5d9e Serge Torres
sub runMaple {
365 08aa5d9e Serge Torres
  my ($mapleProgram) = @_;
366 08aa5d9e Serge Torres
  if (! defined($mapleProgram))
367 08aa5d9e Serge Torres
  {
368 08aa5d9e Serge Torres
    my @call_info = caller(0);
369 08aa5d9e Serge Torres
    print "\n\n", $call_info[3], " missing parameter. Aborting program!\n\n";
370 08aa5d9e Serge Torres
    # Uncomment this line and remove the next one if using stdExitErrors.
371 08aa5d9e Serge Torres
    #exit($EX_SOFTWARE);
372 08aa5d9e Serge Torres
    exit(1);
373 08aa5d9e Serge Torres
  }
374 08aa5d9e Serge Torres
  my $line        = "";
375 08aa5d9e Serge Torres
  my $mapleResult = [];
376 08aa5d9e Serge Torres
  #print STDERR $mapleProgram, "\n";
377 08aa5d9e Serge Torres
  open(MR, "echo \"$mapleProgram\"  | $mapleApplication |");
378 08aa5d9e Serge Torres
  while($line = <MR>)
379 08aa5d9e Serge Torres
  {
380 08aa5d9e Serge Torres
    chomp($line);
381 08aa5d9e Serge Torres
    push(@$mapleResult,$line); 
382 08aa5d9e Serge Torres
  }
383 08aa5d9e Serge Torres
  return($mapleResult);
384 08aa5d9e Serge Torres
} # End runMaple
385 08aa5d9e Serge Torres
##############################################################################
386 08aa5d9e Serge Torres
# sub mySub
387 08aa5d9e Serge Torres
##############################################################################
388 08aa5d9e Serge Torres
# Performed task:
389 08aa5d9e Serge Torres
#
390 08aa5d9e Serge Torres
# input   :
391 08aa5d9e Serge Torres
# output  :
392 08aa5d9e Serge Torres
# globals :
393 08aa5d9e Serge Torres
# uses    :
394 08aa5d9e Serge Torres
# notes   :
395 08aa5d9e Serge Torres
#
396 08aa5d9e Serge Torres
sub mySub {
397 08aa5d9e Serge Torres
  my ($someParameter) = @_;
398 08aa5d9e Serge Torres
  if (! defined($someParameter))
399 08aa5d9e Serge Torres
  {
400 08aa5d9e Serge Torres
    my @call_info = caller(0);
401 08aa5d9e Serge Torres
    print "\n\n", $call_info[3], " missing parameter. Aborting program!\n\n";
402 08aa5d9e Serge Torres
    # Uncomment this line and remove the next one if using stdExitErrors.
403 08aa5d9e Serge Torres
    #exit($EX_SOFTWARE);
404 08aa5d9e Serge Torres
    exit(1);
405 08aa5d9e Serge Torres
  }
406 08aa5d9e Serge Torres
} # End mySub
407 08aa5d9e Serge Torres
##############################################################################
408 08aa5d9e Serge Torres
# sub $retv = _privateSubName($argv)
409 08aa5d9e Serge Torres
##############################################################################
410 08aa5d9e Serge Torres
411 08aa5d9e Serge Torres
sub _privateSubName
412 08aa5d9e Serge Torres
{
413 08aa5d9e Serge Torres
	my $argv = shift();
414 08aa5d9e Serge Torres
	my $retv = undef;
415 08aa5d9e Serge Torres
	return($retv);
416 08aa5d9e Serge Torres
};
417 08aa5d9e Serge Torres
#
418 08aa5d9e Serge Torres
##############################################################################
419 08aa5d9e Serge Torres
# sub usage
420 08aa5d9e Serge Torres
##############################################################################
421 08aa5d9e Serge Torres
# Performed task: checks the command line parameters
422 08aa5d9e Serge Torres
#
423 08aa5d9e Serge Torres
# input   : none
424 08aa5d9e Serge Torres
# output  : none
425 08aa5d9e Serge Torres
# globals : $ARGV,others...
426 08aa5d9e Serge Torres
# uses    : none
427 08aa5d9e Serge Torres
# notes   :
428 08aa5d9e Serge Torres
#
429 08aa5d9e Serge Torres
sub usage {
430 08aa5d9e Serge Torres
  if (! defined($ARGV[4]))
431 08aa5d9e Serge Torres
  {
432 08aa5d9e Serge Torres
    my $scriptName = `basename $0`;
433 08aa5d9e Serge Torres
    chomp $scriptName;
434 08aa5d9e Serge Torres
    print STDERR "\n\nUsage: $scriptName numDigits solutionsFile \n";
435 08aa5d9e Serge Torres
    print STDERR "       " , (" " x length("$scriptName "));
436 08aa5d9e Serge Torres
    print STDERR " function lowerBound upperBound\n\n";
437 08aa5d9e Serge Torres
    print STDERR "  - digitsFile: the name of the file holding the number of digits\n";
438 08aa5d9e Serge Torres
    print STDERR "    for each coefficient;\n";
439 08aa5d9e Serge Torres
    print STDERR "  - solutionFile: the name of the solution vector file;\n";
440 08aa5d9e Serge Torres
    print STDERR "  - function (e.g. \"cos(x)\", don't forget quoting);\n";
441 08aa5d9e Serge Torres
    print STDERR "  - lowerBound (e.g. 0, don't forget quoting for complex expressions;\n";
442 08aa5d9e Serge Torres
    print STDERR "  - upperBound (e.g. \"Pi/4\" , don't forget quoting for complex expressions;\n";
443 08aa5d9e Serge Torres
    # Uncomment this line and remove the next one if using stdExitErrors.
444 08aa5d9e Serge Torres
    #exit($EX_USAGE);
445 08aa5d9e Serge Torres
    exit(1);
446 08aa5d9e Serge Torres
  } # End if
447 08aa5d9e Serge Torres
# Some initializations  
448 08aa5d9e Serge Torres
$digitsFileName           = $ARGV[0];
449 08aa5d9e Serge Torres
$digitsFileName           =~ s/"//g;
450 08aa5d9e Serge Torres
$solutionsFileName        = $ARGV[1];
451 08aa5d9e Serge Torres
$solutionsFileName        =~ s/"//g;
452 08aa5d9e Serge Torres
$function                 = $ARGV[2];
453 08aa5d9e Serge Torres
$function                 =~ s/"//g;
454 08aa5d9e Serge Torres
$lowerBound               = $ARGV[3];
455 08aa5d9e Serge Torres
$lowerBound               =~ s/"//g;
456 08aa5d9e Serge Torres
$upperBound               = $ARGV[4];
457 08aa5d9e Serge Torres
$upperBound               =~ s/"//g;
458 08aa5d9e Serge Torres
} # End usage
459 08aa5d9e Serge Torres
460 08aa5d9e Serge Torres
461 08aa5d9e Serge Torres
__END__