[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     ! 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>