Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Polynomials/standard_complex_substitutors.adb, Revision 1.1
1.1 ! maekawa 1: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
! 2: with Standard_Natural_Vectors;
! 3:
! 4: package body Standard_Complex_Substitutors is
! 5:
! 6: function Substitute ( k : integer; c : Complex_Number; t : Term )
! 7: return Term is
! 8:
! 9: res : Term;
! 10:
! 11: begin
! 12: res.cf := t.cf;
! 13: for l in 1..t.dg(k) loop
! 14: res.cf := res.cf*c;
! 15: end loop;
! 16: res.dg := new Standard_Natural_Vectors.Vector(t.dg'first..t.dg'last-1);
! 17: for l in t.dg'range loop
! 18: if l < k
! 19: then res.dg(l) := t.dg(l);
! 20: elsif l > k
! 21: then res.dg(l-1) := t.dg(l);
! 22: end if;
! 23: end loop;
! 24: return res;
! 25: end Substitute;
! 26:
! 27: function Substitute ( k : integer; c : Complex_Number; p : Poly )
! 28: return Poly is
! 29: res : Poly;
! 30:
! 31: procedure Substitute_Term ( t : in Term; cont : out boolean ) is
! 32:
! 33: st : Term := Substitute(k,c,t);
! 34:
! 35: begin
! 36: Add(res,st);
! 37: Clear(st);
! 38: cont := true;
! 39: end Substitute_Term;
! 40: procedure Substitute_Terms is new Visiting_Iterator (Substitute_Term);
! 41:
! 42: begin
! 43: Substitute_Terms(p);
! 44: return res;
! 45: end Substitute;
! 46:
! 47: function Substitute ( k : integer; c : Complex_Number; p : Poly_Sys )
! 48: return Poly_Sys is
! 49:
! 50: res : Poly_Sys(p'range);
! 51:
! 52: begin
! 53: for l in res'range loop
! 54: res(l) := Substitute(k,c,p(l));
! 55: end loop;
! 56: return res;
! 57: end Substitute;
! 58:
! 59: procedure Substitute ( k : in integer; c : in Complex_Number;
! 60: t : in out Term ) is
! 61:
! 62: tmp : Standard_Natural_Vectors.Vector(t.dg'first..t.dg'last-1);
! 63:
! 64: begin
! 65: for l in 1..t.dg(k) loop
! 66: t.cf := t.cf*c;
! 67: end loop;
! 68: for l in t.dg'range loop
! 69: if l < k
! 70: then tmp(l) := t.dg(l);
! 71: elsif l > k
! 72: then tmp(l-1) := t.dg(l);
! 73: end if;
! 74: end loop;
! 75: Clear(t);
! 76: t.dg := new Standard_Natural_Vectors.Vector'(tmp);
! 77: end Substitute;
! 78:
! 79: procedure Substitute ( k : in integer; c : in Complex_Number;
! 80: p : in out Poly ) is
! 81:
! 82: -- NOTE :
! 83: -- An obvious thing to do would be to visit and change all terms,
! 84: -- and leaving the term order unchanged.
! 85:
! 86: procedure Substitute_Term ( t : in out Term; cont : out boolean ) is
! 87: begin
! 88: Substitute(k,c,t);
! 89: cont := true;
! 90: end Substitute_Term;
! 91: procedure Substitute_Terms is new Changing_Iterator ( Substitute_Term );
! 92:
! 93: begin
! 94: Substitute_Terms(p);
! 95: end Substitute;
! 96:
! 97: procedure Substitute ( k : in integer; c : in Complex_Number;
! 98: p : in out Poly_Sys ) is
! 99: begin
! 100: for l in p'range loop
! 101: Substitute(k,c,p(l));
! 102: end loop;
! 103: end Substitute;
! 104:
! 105: procedure Purify ( p : in out Poly; tol : in double_float ) is
! 106:
! 107: -- DESCRIPTION :
! 108: -- All terms of which the coefficient are in AbsVal smaller
! 109: -- than tol are deleted.
! 110:
! 111: procedure Purify_Term (t : in out Term; continue : out boolean) is
! 112: begin
! 113: if AbsVal(t.cf) < tol
! 114: then t.cf := Create(0.0);
! 115: end if;
! 116: continue := true;
! 117: end Purify_Term;
! 118: procedure Purify_Terms is new Changing_Iterator(Purify_Term);
! 119:
! 120: begin
! 121: Purify_Terms(p);
! 122: if Number_Of_Unknowns(p) = 0
! 123: then Clear(p);
! 124: p := Null_Poly;
! 125: end if;
! 126: end Purify;
! 127:
! 128: function Substitute_Factor ( k : integer; h : Vector ) return Poly is
! 129:
! 130: -- DESCRIPTION :
! 131: -- returns the polynomial which will replace the kth unknown.
! 132:
! 133: res : Poly;
! 134: rt : Term;
! 135:
! 136: begin
! 137: rt.dg := new Standard_Natural_Vectors.Vector'((h'first+1)..(h'last-1) => 0);
! 138: rt.cf := -h(0)/h(k);
! 139: res := Create(rt);
! 140: for i in rt.dg'range loop
! 141: rt.dg(i) := 1;
! 142: if i < k
! 143: then rt.cf := -h(i)/h(k);
! 144: else rt.cf := -h(i+1)/h(k);
! 145: end if;
! 146: if AbsVal(rt.cf) > 10.0**(-10)
! 147: then Add(res,rt);
! 148: end if;
! 149: rt.dg(i) := 0;
! 150: end loop;
! 151: Clear(rt);
! 152: return res;
! 153: end Substitute_Factor;
! 154:
! 155: function Substitute ( k : integer; h : Vector; p : Poly ) return Poly is
! 156:
! 157: res,sub : Poly;
! 158:
! 159: begin
! 160: sub := Substitute_Factor(k,h);
! 161: res := Substitute(k,sub,p);
! 162: Clear(sub);
! 163: return res;
! 164: end Substitute;
! 165:
! 166: function Substitute ( k : integer; s,p : Poly ) return Poly is
! 167:
! 168: res : Poly := Null_Poly;
! 169:
! 170: procedure Substitute_Term ( t : in Term; continue : out boolean ) is
! 171:
! 172: rt : Term;
! 173: fac : Poly;
! 174:
! 175: begin
! 176: rt.cf := t.cf;
! 177: rt.dg := new Standard_Natural_Vectors.Vector(t.dg'first..(t.dg'last-1));
! 178: for i in rt.dg'range loop
! 179: if i < k
! 180: then rt.dg(i) := t.dg(i);
! 181: else rt.dg(i) := t.dg(i+1);
! 182: end if;
! 183: end loop;
! 184: if t.dg(k) = 0
! 185: then Add(res,rt);
! 186: else fac := Create(rt);
! 187: for i in 1..t.dg(k) loop
! 188: Mul(fac,s);
! 189: end loop;
! 190: Purify(fac,10.0**(-10));
! 191: Add(res,fac);
! 192: Clear(fac);
! 193: end if;
! 194: Clear(rt);
! 195: continue := true;
! 196: end Substitute_Term;
! 197: procedure Substitute_Terms is new Visiting_Iterator (Substitute_Term);
! 198:
! 199: begin
! 200: Substitute_Terms(p);
! 201: return res;
! 202: end Substitute;
! 203:
! 204: procedure Substitute ( k : in integer; h : in Vector; p : in out Poly ) is
! 205:
! 206: res : Poly;
! 207:
! 208: begin
! 209: res := Substitute(k,h,p);
! 210: Clear(p); Copy(res,p); Clear(res);
! 211: end Substitute;
! 212:
! 213: procedure Substitute ( k : in integer; s : in Poly; p : in out Poly ) is
! 214:
! 215: res : Poly;
! 216:
! 217: begin
! 218: res := Substitute(k,s,p);
! 219: Clear(p); Copy(res,p); Clear(res);
! 220: end Substitute;
! 221:
! 222: function Substitute ( k : integer; h : Vector; p : Poly_Sys )
! 223: return Poly_Sys is
! 224:
! 225: res : Poly_Sys(p'range);
! 226: s : Poly := Substitute_Factor(k,h);
! 227:
! 228: begin
! 229: res := Substitute(k,s,p);
! 230: Clear(s);
! 231: return res;
! 232: end Substitute;
! 233:
! 234: procedure Substitute ( k : in integer; h : in Vector;
! 235: p : in out Poly_Sys ) is
! 236:
! 237: s : Poly := Substitute_Factor(k,h);
! 238:
! 239: begin
! 240: Substitute(k,s,p);
! 241: Clear(s);
! 242: end Substitute;
! 243:
! 244: function Substitute ( k : integer; s : Poly; p : Poly_Sys ) return Poly_Sys is
! 245:
! 246: res : Poly_Sys(p'range);
! 247:
! 248: begin
! 249: for i in p'range loop
! 250: res(i) := Substitute(k,s,p(i));
! 251: end loop;
! 252: return res;
! 253: end Substitute;
! 254:
! 255: procedure Substitute ( k : in integer; s : in Poly; p : in out Poly_Sys ) is
! 256: begin
! 257: for i in p'range loop
! 258: Substitute(k,s,p(i));
! 259: end loop;
! 260: end Substitute;
! 261:
! 262: end Standard_Complex_Substitutors;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>