On 4 January 2024 12:15:07 WET, Emmanuel Charpentier
<emanuel.charpent...@gmail.com> wrote:
>
>
>Indeed :
>(%i29) domain:complex; (%o29) complex (%i30) Sol1C:solve(Sys1, Unks);
>(%o30) [[x = 8,y = -40/3,l = (2*25^(1/3))/(3*9^(1/3))]] (%i31)
>Sol2C:solve(Sys2, Unks); (%o31) [] (%i32) map(lambda([w], map(lambda([v],
>subst(w, v)), map(lambda([u], ratsimp(lhs(u)-rhs(u))), Sys1))), Sol1C);
>(%o32) [[((8*(-1)^(2/3)*5^(5/3))/3^(2/3)-(40*25^(1/3))/9^(1/3))/12,
>((8*(-1)^(1/3)*3^(2/3)*5^(1/3)*25^(1/3))/9^(1/3)+40)
>/(2*(-1)^(1/3)*3^(2/3)*5^(1/3)),0]] (%i33) %, numer; (%o33)
>[[0.08333333333333333*(56.22884435344994
>*(0.8660254037844387*%i-0.4999999999999998) -56.22884435344994),
>0.1405721108836249*(39.99999999999999
>*(0.8660254037844386*%i+0.5000000000000001)
>+40)*(0.5000000000000001-0.8660254037844386*%i), 0]] (%i34) map(lambda([w],
>map(lambda([v], subst(w, v)), map(lambda([u], ratsimp(lhs(u)-rhs(u))),
>Sys2))), Sol2C); (%o34) [] (%i35) %, numer; (%o35) []
>
>But this does not explain whiy Sage is uneble o check (numericalmlmy or
>otherwise) the solutions given by Sympy or Mathematica, which check in
>Sympy (I didn’t yet try to check them in Mathematica, the limitations of
>the current Mathematica interface make this bothersome…).
>
>IMHO, this would deserve a critiocal ticket (possibly a blocker one), but I
>do not know how to report this efficiently. Suggestions welcome…
open an issue with this data there
>
>HTH,
>
>Le jeudi 4 janvier 2024 à 12:04:14 UTC+1, Dima Pasechnik a écrit :
>
>> You can get the same errors from pure Maxima if you set domain to
>> "complex",
>> no?
>>
>> On Thursday, January 4, 2024 at 10:29:56 AM UTC Emmanuel Charpentier wrote:
>>
>>> The problem seems Sage-specific : the same systems solve correctly (up to
>>> numerical noise) in “pure” Maxima :
>>> ;;; Loading #P"/usr/lib/x86_64-linux-gnu/ecl-21.2.1/sb-bsd-sockets.fas"
>>> ;;; Loading #P"/usr/lib/x86_64-linux-gnu/ecl-21.2.1/sockets.fas" Maxima
>>> 5.46.0 https://maxima.sourceforge.io using Lisp ECL 21.2.1 Distributed
>>> under the GNU Public License. See the file COPYING. Dedicated to the memory
>>> of William Schelter. The function bug_report() provides bug reporting
>>> information. (%i1) display2d:false; (%o1) false (%i2) Unks:[x,y,l]; (%o2)
>>> [x,y,l] (%i3) f:10*x^(1/3)*y^(2/3); (%o3) 10*x^(1/3)*y^(2/3) (%i4) g:5*x -
>>> 6*y; (%o4) 5*x-6*y (%i5) h:5*x^2 + 6*y; (%o5) 6*y+5*x^2 (%i6) fx:diff(f,x);
>>> (%o6) (10*y^(2/3))/(3*x^(2/3)) (%i7) fy:diff(f, y); (%o7)
>>> (20*x^(1/3))/(3*y^(1/3)) (%i8) gx:diff(g, x); (%o8) 5 (%i9) gy:diff(g, y);
>>> (%o9) -6 (%i10) hx:diff(h, x); (%o10) 10*x (%i11) hy:diff(h, y); (%o11) 6
>>> (%i12) Sys1:[fx=l*gx,fy=l*gy,g=120]; (%o12) [(10*y^(2/3))/(3*x^(2/3)) =
>>> 5*l,(20*x^(1/3))/(3*y^(1/3)) = -6*l, 5*x-6*y = 120] (%i13)
>>> Sys2:[fx=l*hx,fy=l*hy,h=120]; (%o13) [(10*y^(2/3))/(3*x^(2/3)) =
>>> 10*l*x,(20*x^(1/3))/(3*y^(1/3)) = 6*l, 6*y+5*x^2 = 120] (%i14)
>>> Sol1:solve(Sys1, Unks); (%o14) [[x = 8,y = -40/3,l = (2*5^(2/3))/3^(5/3)]]
>>> (%i15) Sol2:solve(Sys2, Unks); (%o15) [[x = (2*sqrt(6))/sqrt(5),y = 16,l =
>>> 18750^(1/6)/9], [x = -(2*sqrt(6))/sqrt(5),y = 16,l = -18750^(1/6)/9]]
>>> (%i16) map(lambda([w], map(lambda([v], subst(w, v)), map(lambda([u],
>>> ratsimp(lhs(u)-rhs(u))), Sys1))), Sol1); (%o16) [[0,0,0]] (%i17)
>>> map(lambda([w], map(lambda([v], subst(w, v)), map(lambda([u],
>>> ratsimp(lhs(u)-rhs(u))), Sys2))), Sol2); (%o17)
>>> [[(5^(1/3)*(5*2^(11/3)-(2^(8/3)*5^(1/6)*6^(5/6)*18750^(1/6))/3))
>>> /(3*2^(2/3)*6^(1/3)),
>>> -(2^(7/3)*18750^(1/6)-2^(7/3)*5^(5/6)*6^(1/6))/(3*2^(4/3)),0],
>>> [(5^(1/3)*(5*2^(11/3)-(2^(8/3)*5^(1/6)*6^(5/6)*18750^(1/6))/3))
>>> /(3*2^(2/3)*6^(1/3)),
>>> -(2^(7/3)*5^(5/6)*6^(1/6)-2^(7/3)*18750^(1/6))/(3*2^(4/3)),0]] (%i18) %,
>>> numer; (%o18) [[1.404069277432862e-15,0.0,0],[1.404069277432862e-15,0.0,0]]
>>>
>>> HTH,
>>>
>>> Le jeudi 4 janvier 2024 à 10:21:31 UTC+1, Emmanuel Charpentier a écrit :
>>>
>>>> Motivation : see [this post], which shows a case where Sage fails to
>>>> find the roots of a three equations system.
>>>>
>>>> I signalled in this thread that Sympy was able to find these roots. But
>>>> I stumbled on a difficulty checking these solutions.
>>>>
>>>> Set up the systems :
>>>> # Pretext : https://groups.google.com/g/sage-support/c/Nw12vYR0L0U
>>>> Unks=var('x,y,l
>>>> <https://groups.google.com/g/sage-support/c/Nw12vYR0L0UUnks=var('x,y,l>')
>>>> f(x, y) = 10*x^(1/3)*y^(2/3) g(x, y) = 5*x - 6*y h(x, y) = 5*x^2 + 6*y fx
>>>> =
>>>> diff(f,x) fy = diff(f, y) gx = diff(g, x) gy = diff(g, y) hx = diff(h, x)
>>>> hy = diff(h, y) Sys1 = [fx(x, y)==l*gx(x, y),fy(x, y)==l*gy(x, y),g(x,
>>>> y)==120] Sys2 = [fx(x, y)==l*hx(x, y),fy(x, y)==l*hy(x, y),h(x, y)==120]
>>>>
>>>> Sage’s (default) solution of the first system
>>>> DSol1 = solve(Sys1, Unks, solution_dict=True)
>>>>
>>>> As already shown in the original thread, Sage (slowly) fails to solve
>>>> the second system. Sympy can solve it (anfd the first one too…) :
>>>> SSol1 = solve(Sys1, Unks, algorithm="sympy") SSol2 = solve(Sys2, Unks,
>>>> algorithm="sympy")
>>>>
>>>> For what it’s worth, chech the “competition” :
>>>> MSol1 = [{u[1].sage():u[2].sage() for u in s} for s in
>>>> mathematica(Sys1).Solve(Unks)] MSol2 = [{u[1].sage():u[2].sage() for u in
>>>> s} for s in mathematica(Sys2).Solve(Unks)]
>>>>
>>>> Both Sympy and Mathematica find one solution to the first system and two
>>>> for the second. These solutions have different ex^pressins, but that is
>>>> not
>>>> problematic. The fly in the ointment is that Sage has trouble checking
>>>> these solutions. A simple numerical check of these solutions is :
>>>> sage: [[(e.lhs()-e.rhs()).subs(s).n(digits=3) for e in Sys1] for s in
>>>> DSol1] [[-0.000977, 8.44 - 4.87*I, 0.000]] sage:
>>>> [[(e.lhs()-e.rhs()).subs(s).n(digits=3) for e in Sys1] for s in SSol1]
>>>> [[7.03 - 4.06*I, 0.000488*I, 0.000]] sage:
>>>> [[(e.lhs()-e.rhs()).subs(s).n(digits=3) for e in Sys2] for s in SSol2]
>>>> [[0.000977, 0.000, 0.000], [-0.000977 + 0.00195*I, 0.000122 - 0.000244*I,
>>>> 0.000]] sage: [[(e.lhs()-e.rhs()).subs(s).n(digits=3) for e in Sys1] for s
>>>> in MSol1] [[7.03 - 4.06*I, 0.000, 0.000]] sage:
>>>> [[(e.lhs()-e.rhs()).subs(s).n(digits=3) for e in Sys2] for s in MSol2]
>>>> [[-0.00146 - 0.000977*I, 0.000122 + 0.000244*I, 0.000], [0.00195,
>>>> 0.000244,
>>>> 0.000]]
>>>>
>>>> None of these solutions seems to check. Uh oh…
>>>>
>>>> However, using sympy to compute the same numerical checks gives
>>>> different results :
>>>> sage:
>>>> [[(e.lhs()-e.rhs())._sympy_().subs(sympy.sympify(s)).simplify().n(3) for e
>>>> in Sys1] for s in DSol1] [[-7.03 + 4.06*I, 8.43 - 4.87*I, 0]] sage:
>>>> [[(e.lhs()-e.rhs())._sympy_().subs(sympy.sympify(s)).simplify().n(3) for e
>>>> in Sys1] for s in SSol1] [[0, 0, 0]] sage:
>>>> [[(e.lhs()-e.rhs())._sympy_().subs(sympy.sympify(s)).simplify().n(3) for e
>>>> in Sys2] for s in SSol2] [[0, 0, 0], [0, 0, 0]] sage:
>>>> [[(e.lhs()-e.rhs())._sympy_().subs(sympy.sympify(s)).simplify().n(3) for e
>>>> in Sys1] for s in MSol1] [[0, 0, 0]] sage:
>>>> [[(e.lhs()-e.rhs())._sympy_().subs(sympy.sympify(s)).simplify().n(3) for e
>>>> in Sys2] for s in MSol2] [[0, 0, 0], [0, 0, 0]]
>>>>
>>>> Sage’s solution to the first system does not check ; Both Sympy’s and
>>>> Mathematica’s solutions of both systems check.
>>>>
>>>> This tells us that
>>>>
>>>> -
>>>>
>>>> Sage’s solution of the first system is wrong, and that
>>>> -
>>>>
>>>> Sage’s computaion of the numerical checks of knows solutins is *also*
>>>> wrong.
>>>>
>>>> This suggests a bug in Sage’s computations ; this problem *may* be
>>>> bound to the use of fractional powers.
>>>>
>>>> Any hint on the “right” way to report this issue eficiently welcome.
>>>>
>>>>
>>>
>
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sage-support+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-support/5407328D-6FC6-44E8-9AC7-7D31A29F3E03%40gmail.com.