[BACK]Return to drivers_for_scaling.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Homotopy

Annotation of OpenXM_contrib/PHC/Ada/Homotopy/drivers_for_scaling.adb, Revision 1.1.1.1

1.1       maekawa     1: with integer_io;                         use integer_io;
                      2: with Communications_with_User;           use Communications_with_User;
                      3: with Timing_Package;                     use Timing_Package;
                      4: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
                      5: with Standard_Floating_Numbers_io;       use Standard_Floating_Numbers_io;
                      6: with Standard_Complex_Vectors_io;        use Standard_Complex_Vectors_io;
                      7: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
                      8: with Scaling;                            use Scaling;
                      9:
                     10: package body Drivers_for_Scaling is
                     11:
                     12:   procedure Display_Info is
                     13:
                     14:     i : array(1..12) of string(1..65);
                     15:
                     16:   begin
                     17:     i( 1):="By scaling the coefficients are transformed so that they  do  not";
                     18:     i( 2):="have extreme values.  The purpose is to avoid numerical problems.";
                     19:     i( 3):="  Equation scaling means that every polynomial is divided by  its";
                     20:     i( 4):="average coefficient.                                             ";
                     21:     i( 5):="  Variable scaling uses transformations like z  =  (2^c)*x.   The";
                     22:     i( 6):="transformation  is  such  that  real  solutions remain real.  The";
                     23:     i( 7):="inverse  of  the  condition  number  of the linear system that is";
                     24:     i( 8):="solved to set up this transformation gives an indication  on  the";
                     25:     i( 9):="condition of the original polynomial system.                     ";
                     26:     i(10):="  Solution scaling transforms the solutions of  a  scaled  system";
                     27:     i(11):="back  into  the  original  coordinate  system.   Note that in the";
                     28:     i(12):="original coordinates, the solutions can be ill-conditioned.      ";
                     29:     for k in i'range loop
                     30:       put_line(i(k));
                     31:     end loop;
                     32:   end Display_Info;
                     33:
                     34:   procedure Equation_Scaling
                     35:               ( file : in file_type; p : in out Poly_Sys ) is
                     36:
                     37:     timer : Timing_Widget;
                     38:
                     39:   begin
                     40:     put_line(file,"EQUATION SCALING :");
                     41:     tstart(timer);
                     42:     Scale(p);
                     43:     tstop(timer);
                     44:     new_line(file); print_times(file,timer,"Equation Scaling"); new_line(file);
                     45:   end Equation_Scaling;
                     46:
                     47:   procedure Variable_Scaling
                     48:               ( file : in file_type; p : in out Poly_Sys;
                     49:                 basis : out natural; scvc : out Link_to_Vector ) is
                     50:
                     51:     timer : Timing_Widget;
                     52:     rcond : double_float;
                     53:     bas : natural := 2;
                     54:     scalecoeff : Vector(1..2*p'length);
                     55:
                     56:   begin
                     57:     put_line(file,"EQUATION AND VARIABLE SCALING :");
                     58:    -- put("  Reducing the variability of coefficients ? (y/n) ");
                     59:    -- Ask_Yes_or_No(yn);
                     60:    -- if yn = 'y'
                     61:    --  then put_line(file,"  Reduce the variability of coefficients.");
                     62:    --       scale(p,bas,true,rcond,scalecoeff);
                     63:    --  else put_line(file,"  No reduce of variability of coefficients.");
                     64:    --       scale(p,bas,false,rcond,scalecoeff);
                     65:    -- end if;
                     66:     tstart(timer);
                     67:     scale(p,bas,false,rcond,scalecoeff);
                     68:     tstop(timer);
                     69:     put("  The inverse condition is "); put(rcond,3,3,3); new_line;
                     70:     put(file,"  The inverse condition is "); put(file,rcond); new_line(file);
                     71:     basis := bas;
                     72:     scvc := new Vector'(scalecoeff);
                     73:     new_line(file); print_times(file,timer,"Variable Scaling"); new_line(file);
                     74:   end Variable_Scaling;
                     75:
                     76:   procedure Write_Results ( file : in file_type; p : in Poly_Sys;
                     77:                             basis : in natural; scvc : in Link_to_Vector ) is
                     78:   begin
                     79:     new_line(file);
                     80:     put_line(file,"THE SCALED SYSTEM :");
                     81:     new_line(file); put(file,p); new_line(file);
                     82:     if basis /= 0
                     83:      then new_line(file);
                     84:           put_line(file,"SCALING COEFFICIENTS :");
                     85:           new_line(file);
                     86:           put(file,basis,1); new_line(file);
                     87:           put_line(file,scvc);
                     88:     end if;
                     89:   end Write_Results;
                     90:
                     91:   procedure Driver_for_Scaling
                     92:               ( file : in file_type; p : in out Poly_Sys;
                     93:                 basis : out natural; scvc : out Link_to_Vector ) is
                     94:
                     95:     ans : character;
                     96:     res_scvc : Link_to_Vector;
                     97:     bas : natural := 0;
                     98:
                     99:   begin
                    100:     loop
                    101:       new_line;
                    102:       put_line("MENU for Scaling Polynomial Systems :");
                    103:       put_line("  0 : No Scaling       : leave the menu                     ");
                    104:       put_line("  1 : Equation Scaling : divide by average coefficient      ");
                    105:       put_line("  2 : Variable Scaling : change of variables, as z = (2^c)*x");
                    106:       put("Type 0, 1, or 2 to select scaling, or i for info : ");
                    107:       Ask_Alternative(ans,"012i");
                    108:       if ans = 'i'
                    109:        then new_line; Display_Info;
                    110:       end if;
                    111:       exit when ans /= 'i';
                    112:     end loop;
                    113:     case ans is
                    114:       when '1' => Equation_Scaling(file,p);
                    115:       when '2' => Variable_Scaling(file,p,bas,res_scvc);
                    116:       when others => null;
                    117:     end case;
                    118:     case ans is
                    119:       when '1' | '2' => Write_Results(file,p,bas,res_scvc);
                    120:       when others    => null;
                    121:     end case;
                    122:     basis := bas; scvc := res_scvc;
                    123:   end Driver_for_Scaling;
                    124:
                    125: end Drivers_for_Scaling;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>