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

Annotation of OpenXM_contrib/PHC/Ada/Schubert/chebychev_polynomials.adb, Revision 1.1.1.1

1.1       maekawa     1: with Standard_Mathematical_Functions;    use Standard_Mathematical_Functions;
                      2:
                      3: package body Chebychev_Polynomials is
                      4:
                      5:   function Create ( k : natural ) return Vector is
                      6:   begin
                      7:     if k = 0
                      8:      then declare
                      9:             res : Vector(0..0);
                     10:           begin
                     11:             res(0) := 1.0;
                     12:             return res;
                     13:           end;
                     14:      elsif k = 1
                     15:          then declare
                     16:                 res : Vector(0..1);
                     17:               begin
                     18:                 res(0) := 0.0;
                     19:                 res(1) := 1.0;
                     20:                 return res;
                     21:               end;
                     22:          else declare
                     23:                 res : Vector(0..k);
                     24:                 tk1 : constant Vector := Create(k-1);
                     25:                 tk2 : constant Vector := Create(k-2);
                     26:               begin
                     27:                 for i in tk1'range loop
                     28:                   res(i+1) := 2.0*tk1(i);
                     29:                 end loop;
                     30:                 res(0) := 0.0;
                     31:                 for i in tk2'range loop
                     32:                   res(i) := res(i) - tk2(i);
                     33:                 end loop;
                     34:                 return res;
                     35:               end;
                     36:     end if;
                     37:   end Create;
                     38:
                     39:   function Eval ( k : natural; x : double_float ) return double_float is
                     40:
                     41:     res : double_float := COS(double_float(k)*ARCCOS(x));
                     42:
                     43:   begin
                     44:     return res;
                     45:   end Eval;
                     46:
                     47:   function Eval ( p : Vector; x : double_float ) return double_float is
                     48:
                     49:     res : double_float := p(0);
                     50:     pow : double_float := x;
                     51:
                     52:   begin
                     53:     for i in 1..p'last loop
                     54:       res := res + p(i)*pow;
                     55:       pow := pow*x;
                     56:     end loop;
                     57:     return res;
                     58:   end Eval;
                     59:
                     60:   function Diff ( p : Vector ) return Vector is
                     61:
                     62:     res : Vector(0..p'last-1);
                     63:
                     64:   begin
                     65:     for i in res'range loop
                     66:       res(i) := double_float(i+1)*p(i+1);
                     67:     end loop;
                     68:     return res;
                     69:   end Diff;
                     70:
                     71:   function Diff ( p : Vector; k : natural ) return Vector is
                     72:   begin
                     73:     if k = 0
                     74:      then return p;
                     75:      elsif k = 1
                     76:          then return Diff(p);
                     77:          else return Diff(Diff(p),k-1);
                     78:        end if;
                     79:   end Diff;
                     80:
                     81:   function Int ( p : Vector ) return Vector is
                     82:
                     83:     res : Vector(0..p'last+1);
                     84:
                     85:   begin
                     86:     res(0) := 0.0;
                     87:     for i in p'range loop
                     88:       res(i+1) := p(i)/double_float(i+1);
                     89:     end loop;
                     90:     return res;
                     91:   end Int;
                     92:
                     93:   function Int ( p : Vector; k : natural ) return Vector is
                     94:   begin
                     95:     if k = 0
                     96:      then return p;
                     97:      elsif k = 1
                     98:          then return Int(p);
                     99:          else return Int(Int(p),k-1);
                    100:     end if;
                    101:   end Int;
                    102:
                    103: end Chebychev_Polynomials;

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