From 2125aab8a0aaa2300f1aa7bb06a36eb511b21f42 Mon Sep 17 00:00:00 2001 From: Alexandre Guillemot <alexandre.guillemot@inria.fr> Date: Thu, 27 Mar 2025 15:14:14 +0100 Subject: [PATCH] add wilkinson data test --- .../linear/wilkinson-developped-10/all/1.json | 51 ++++++++++++ .../linear/wilkinson-developped-15/all/1.json | 66 +++++++++++++++ .../linear/wilkinson-developped-20/all/1.json | 81 +++++++++++++++++++ .../linear/wilkinson-factorized-20/all/1.json | 81 +++++++++++++++++++ gen.sage | 47 ++++++++--- packages/adaptive | 2 +- 6 files changed, 318 insertions(+), 10 deletions(-) create mode 100644 data/linear/wilkinson-developped-10/all/1.json create mode 100644 data/linear/wilkinson-developped-15/all/1.json create mode 100644 data/linear/wilkinson-developped-20/all/1.json create mode 100644 data/linear/wilkinson-factorized-20/all/1.json diff --git a/data/linear/wilkinson-developped-10/all/1.json b/data/linear/wilkinson-developped-10/all/1.json new file mode 100644 index 00000000..0e9eb2b8 --- /dev/null +++ b/data/linear/wilkinson-developped-10/all/1.json @@ -0,0 +1,51 @@ +{ + "system": [ + "(-0.220594373609885 + 0.0974041709475909*I)*t*x_0^10 + (-55.0000000000000)*t*x_0^9 + (1.22059437360989 - 0.0974041709475909*I)*x_0^10 + 1320.00000000000*t*x_0^8 + (-18150.0000000000)*t*x_0^7 + 157773.000000000*t*x_0^6 + (-902055.000000000)*t*x_0^5 + 3.41693000000000e6*t*x_0^4 + (-8.40950000000000e6)*t*x_0^3 + 1.27535760000000e7*t*x_0^2 + (-1.06286400000000e7)*t*x_0 + (3.62880122059437e6 - 0.0974041709475909*I)*t - 1.22059437360989 + 0.0974041709475909*I" + ], + "variables": [ + "x_0" + ], + "parameters": [ + "t" + ], + "path": [ + [ + "0.0" + ], + [ + "1.0" + ] + ], + "fiber": [ + [ + "1.00000000000000" + ], + [ + "0.809016994374947 + 0.587785252292473*I" + ], + [ + "0.309016994374947 + 0.951056516295154*I" + ], + [ + "-0.309016994374948 + 0.951056516295154*I" + ], + [ + "-0.809016994374947 + 0.587785252292473*I" + ], + [ + "-1.00000000000000 + 1.22464679914735e-16*I" + ], + [ + "-0.809016994374947 - 0.587785252292473*I" + ], + [ + "-0.309016994374948 - 0.951056516295154*I" + ], + [ + "0.309016994374947 - 0.951056516295154*I" + ], + [ + "0.809016994374947 - 0.587785252292473*I" + ] + ] +} \ No newline at end of file diff --git a/data/linear/wilkinson-developped-15/all/1.json b/data/linear/wilkinson-developped-15/all/1.json new file mode 100644 index 00000000..62525785 --- /dev/null +++ b/data/linear/wilkinson-developped-15/all/1.json @@ -0,0 +1,66 @@ +{ + "system": [ + "(2.08733995867334 - 1.52666130087475*I)*t*x_0^15 + (-120.000000000000)*t*x_0^14 + (-1.08733995867334 + 1.52666130087475*I)*x_0^15 + 6580.00000000000*t*x_0^13 + (-218400.000000000)*t*x_0^12 + 4.89962200000000e6*t*x_0^11 + (-7.85584800000000e7)*t*x_0^10 + 9.28095740000000e8*t*x_0^9 + (-8.20762800000000e9)*t*x_0^8 + 5.46311295530000e10*t*x_0^7 + (-2.72803210680000e11)*t*x_0^6 + 1.00967210708000e12*t*x_0^5 + (-2.70681334560000e12)*t*x_0^4 + 5.05699570382400e12*t*x_0^3 + (-6.16581761472000e12)*t*x_0^2 + 4.33916300160000e12*t*x_0 + (-1.30767436800109e12 + 1.52666130087475*I)*t + 1.08733995867334 - 1.52666130087475*I" + ], + "variables": [ + "x_0" + ], + "parameters": [ + "t" + ], + "path": [ + [ + "0.0" + ], + [ + "1.0" + ] + ], + "fiber": [ + [ + "1.00000000000000" + ], + [ + "0.913545457642601 + 0.406736643075800*I" + ], + [ + "0.669130606358858 + 0.743144825477394*I" + ], + [ + "0.309016994374947 + 0.951056516295154*I" + ], + [ + "-0.104528463267653 + 0.994521895368273*I" + ], + [ + "-0.500000000000000 + 0.866025403784439*I" + ], + [ + "-0.809016994374947 + 0.587785252292473*I" + ], + [ + "-0.978147600733806 + 0.207911690817759*I" + ], + [ + "-0.978147600733806 - 0.207911690817759*I" + ], + [ + "-0.809016994374948 - 0.587785252292473*I" + ], + [ + "-0.500000000000000 - 0.866025403784438*I" + ], + [ + "-0.104528463267654 - 0.994521895368273*I" + ], + [ + "0.309016994374947 - 0.951056516295154*I" + ], + [ + "0.669130606358858 - 0.743144825477394*I" + ], + [ + "0.913545457642601 - 0.406736643075800*I" + ] + ] +} \ No newline at end of file diff --git a/data/linear/wilkinson-developped-20/all/1.json b/data/linear/wilkinson-developped-20/all/1.json new file mode 100644 index 00000000..a06dcd9f --- /dev/null +++ b/data/linear/wilkinson-developped-20/all/1.json @@ -0,0 +1,81 @@ +{ + "system": [ + "(0.465757572254130 - 1.24321351880327*I)*t*x_0^20 + (-210.000000000000)*t*x_0^19 + (0.534242427745870 + 1.24321351880327*I)*x_0^20 + 20615.0000000000*t*x_0^18 + (-1.25685000000000e6)*t*x_0^17 + 5.33279460000000e7*t*x_0^16 + (-1.67228082000000e9)*t*x_0^15 + 4.01717716300000e10*t*x_0^14 + (-7.56111184500000e11)*t*x_0^13 + 1.13102769953810e13*t*x_0^12 + (-1.35585182899530e14)*t*x_0^11 + 1.30753501054040e15*t*x_0^10 + (-1.01422998655114e16)*t*x_0^9 + 6.30308120992949e16*t*x_0^8 + (-3.11333643161391e17)*t*x_0^7 + 1.20664780378037e18*t*x_0^6 + (-3.59997951794761e18)*t*x_0^5 + 8.03781182264505e18*t*x_0^4 + (-1.28709312451510e19)*t*x_0^3 + 1.38037597536407e19*t*x_0^2 + (-8.75294803676160e18)*t*x_0 + (2.43290200817664e18 + 1.24321351880327*I)*t - 0.534242427745870 - 1.24321351880327*I" + ], + "variables": [ + "x_0" + ], + "parameters": [ + "t" + ], + "path": [ + [ + "0.0" + ], + [ + "1.0" + ] + ], + "fiber": [ + [ + "1.00000000000000" + ], + [ + "0.951056516295154 + 0.309016994374947*I" + ], + [ + "0.809016994374947 + 0.587785252292473*I" + ], + [ + "0.587785252292473 + 0.809016994374947*I" + ], + [ + "0.309016994374947 + 0.951056516295154*I" + ], + [ + "6.12323399573677e-17 + 1.00000000000000*I" + ], + [ + "-0.309016994374948 + 0.951056516295154*I" + ], + [ + "-0.587785252292473 + 0.809016994374947*I" + ], + [ + "-0.809016994374947 + 0.587785252292473*I" + ], + [ + "-0.951056516295154 + 0.309016994374948*I" + ], + [ + "-1.00000000000000 + 1.22464679914735e-16*I" + ], + [ + "-0.951056516295154 - 0.309016994374948*I" + ], + [ + "-0.809016994374947 - 0.587785252292473*I" + ], + [ + "-0.587785252292473 - 0.809016994374947*I" + ], + [ + "-0.309016994374948 - 0.951056516295154*I" + ], + [ + "-1.83697019872103e-16 - 1.00000000000000*I" + ], + [ + "0.309016994374947 - 0.951056516295154*I" + ], + [ + "0.587785252292474 - 0.809016994374947*I" + ], + [ + "0.809016994374947 - 0.587785252292473*I" + ], + [ + "0.951056516295154 - 0.309016994374948*I" + ] + ] +} \ No newline at end of file diff --git a/data/linear/wilkinson-factorized-20/all/1.json b/data/linear/wilkinson-factorized-20/all/1.json new file mode 100644 index 00000000..3ec9b81a --- /dev/null +++ b/data/linear/wilkinson-factorized-20/all/1.json @@ -0,0 +1,81 @@ +{ + "system": [ + "t*((x_0 - 1.00000000000000)*(x_0 - 2.00000000000000)*(x_0 - 3.00000000000000)*(x_0 - 4.00000000000000)*(x_0 - 5.00000000000000)*(x_0 - 6.00000000000000)*(x_0 - 7.00000000000000)*(x_0 - 8.00000000000000)*(x_0 - 9.00000000000000)*(x_0 - 10.0000000000000)*(x_0 - 11.0000000000000)*(x_0 - 12.0000000000000)*(x_0 - 13.0000000000000)*(x_0 - 14.0000000000000)*(x_0 - 15.0000000000000)*(x_0 - 16.0000000000000)*(x_0 - 17.0000000000000)*(x_0 - 18.0000000000000)*(x_0 - 19.0000000000000)*(x_0 - 20.0000000000000)) + (1 - t)*((-0.7992214701998634 + I*-0.9529307062916382)*(x_0^20 - 1))" + ], + "variables": [ + "x_0" + ], + "parameters": [ + "t" + ], + "path": [ + [ + "0.0" + ], + [ + "1.0" + ] + ], + "fiber": [ + [ + "1.00000000000000" + ], + [ + "0.951056516295154 + 0.309016994374947*I" + ], + [ + "0.809016994374947 + 0.587785252292473*I" + ], + [ + "0.587785252292473 + 0.809016994374947*I" + ], + [ + "0.309016994374947 + 0.951056516295154*I" + ], + [ + "6.12323399573677e-17 + 1.00000000000000*I" + ], + [ + "-0.309016994374948 + 0.951056516295154*I" + ], + [ + "-0.587785252292473 + 0.809016994374947*I" + ], + [ + "-0.809016994374947 + 0.587785252292473*I" + ], + [ + "-0.951056516295154 + 0.309016994374948*I" + ], + [ + "-1.00000000000000 + 1.22464679914735e-16*I" + ], + [ + "-0.951056516295154 - 0.309016994374948*I" + ], + [ + "-0.809016994374947 - 0.587785252292473*I" + ], + [ + "-0.587785252292473 - 0.809016994374947*I" + ], + [ + "-0.309016994374948 - 0.951056516295154*I" + ], + [ + "-1.83697019872103e-16 - 1.00000000000000*I" + ], + [ + "0.309016994374947 - 0.951056516295154*I" + ], + [ + "0.587785252292474 - 0.809016994374947*I" + ], + [ + "0.809016994374947 - 0.587785252292473*I" + ], + [ + "0.951056516295154 - 0.309016994374948*I" + ] + ] +} \ No newline at end of file diff --git a/gen.sage b/gen.sage index 57abb5ad..4f29afda 100644 --- a/gen.sage +++ b/gen.sage @@ -4,6 +4,7 @@ from pathlib import Path from sage.all import * import random as rdm + class Name: name = None @@ -135,7 +136,6 @@ class SumPowLinCtx(Name, System): CC, names=[f"x_{i}" for i in range(self.n_ctx.value)]) self.system = [f"{str(choice([-1, 1]))} + " + " + ".join(["(" + str(sum([normalvariate(-1, 1)*v for v in self.ring.gens()]) ) + f")^{self.d_ctx.value}" for _ in range(self.l_ctx.value)]) for _ in range(self.n_ctx.value)] - print(self.system) if self.structure_ctx.structure == "developped": self.system = list(map(self.ring, self.system)) self.name = Path("sumpowlin" + f"-{self.structure_ctx.name}"*( @@ -164,10 +164,12 @@ class ResultantsCtx(Name, System): assert "y" not in variables n = self.n_ctx.value d = self.d_ctx.value - + Cpy = PolynomialRing(CC, names=["y"] + variables) - f = Cpy.random_element(degree=self.d_ctx.value, terms=binomial(n + 1 + d, d)) - g = Cpy.random_element(degree=self.d_ctx.value, terms=binomial(n + 1 + d, d)) + f = Cpy.random_element(degree=self.d_ctx.value, + terms=binomial(n + 1 + d, d)) + g = Cpy.random_element(degree=self.d_ctx.value, + terms=binomial(n + 1 + d, d)) h = g.resultant(f, Cpy.gens()[0]) h = h/h.coefficients()[0] self.system[0] = self.ring(h) @@ -176,6 +178,26 @@ class ResultantsCtx(Name, System): "resultants" + f"-{self.n_ctx.name}-{self.d_ctx.name}") +class Wilkinson(Name, System): + d_ctx: None + structure_ctx = None + + def __init__(self, d=None, structure=None): + self.d_ctx = IntegerCtx(d, default=5, message="Degree ?") + self.structure_ctx = StructureCtx(structure) + self.ring = PolynomialRing(CC, names="x_0") + self.system = [ + "*".join([f"({self.ring.gens()[0] - (i + 1)})" for i in range(self.d_ctx.value)])] + + if self.structure_ctx.structure == "developped": + self.system = list(map(self.ring, self.system)) + + self.name = Path("wilkinson" + f"-{self.structure_ctx.name}"*( + structure is None) + f"-{self.d_ctx.name}") + + def get_degrees(self): + return [self.d_ctx.value] + class GradientCtx(Name, System): nvars_ctx: None d_ctx: None @@ -195,7 +217,8 @@ class GradientCtx(Name, System): def get_degrees(self): return [self.d_ctx.value - 1 for _ in range(self.nvars_ctx.value)] - + + class SPLGradient(Name, System): n_ctx: None d_ctx: None @@ -208,17 +231,21 @@ class SPLGradient(Name, System): self.l_ctx = IntegerCtx(l, default=3, message="Length ?") self.ring = PolynomialRing( CC, names=[f"x_{i}" for i in range(self.n_ctx.value)]) - + n, d, l = self.n_ctx.value, self.d_ctx.value, self.l_ctx.value c = [CC.random_element() for _ in range(l)] a = [[CC.random_element() for _ in range(n)] for _ in range(l)] - λ = [" + ".join([f"({aij})*{xj}" for aij, xj in zip(ai, self.ring.gens())]) for ai in a] - self.system = [" + ".join([f"{d} * ({a[i][k]}) * ({c[i]} + {λ[i]})^{d - 1}" for i in range(l)]) for k in range(n)] - self.name = Path("spl-gradient" + f"-{self.n_ctx.name}-{self.d_ctx.name}-{self.l_ctx.name}") + λ = [" + ".join([f"({aij})*{xj}" for aij, + xj in zip(ai, self.ring.gens())]) for ai in a] + self.system = [ + " + ".join([f"{d} * ({a[i][k]}) * ({c[i]} + {λ[i]})^{d - 1}" for i in range(l)]) for k in range(n)] + self.name = Path( + "spl-gradient" + f"-{self.n_ctx.name}-{self.d_ctx.name}-{self.l_ctx.name}") def get_degrees(self): return [self.d_ctx.value - 1 for _ in range(self.n_ctx.value)] + class KatsuraCtx(Name, System): n_ctx: None @@ -323,6 +350,8 @@ class TargetCtx(Name): self.target = KatsuraCtx() elif self.target_type == "spl-gradient": self.target = SPLGradient() + elif self.target_type == "wilkinson": + self.target = Wilkinson() else: self.target = DenseCtx() diff --git a/packages/adaptive b/packages/adaptive index 9dcdf1ef..1668336b 160000 --- a/packages/adaptive +++ b/packages/adaptive @@ -1 +1 @@ -Subproject commit 9dcdf1ef5d5cd65c869697149d81a2f79d2156ec +Subproject commit 1668336b404fa6c9edad88aa246fc4f7b8475f71 -- GitLab