limitations of "solve"?

252 visualizzazioni
Passa al primo messaggio da leggere

Fernando Q. Gouvea

da leggere,
28 nov 2023, 10:36:3028/11/23
a sage-s...@googlegroups.com
Yesterday I was demonstrating to my calculus class Sage's ability to
implement the method of Lagrange multipliers. I used a standard example,
putting the following code into SageMath Cell:

var('x,y,l')
f(x,y)=10*x^(1/3)*y^(2/3)
g(x,y)=5*x-6*y
fx=diff(f,x)
fy=diff(f,y)
gx=diff(g,x)
gy=diff(g,y)
solve((fx(x,y)==l*gx(x,y),fy(x,y)==l*gy(x,y),g(x,y)==120),(x,y,l))

That works beautifully. Then I decided to show off Sage's powers by
making a little change:

var('x,y,l')
f(x,y)=10*x^(1/3)*y^(2/3)
g(x,y)=5*x^2+6*y
fx=diff(f,x)
fy=diff(f,y)
gx=diff(g,x)
gy=diff(g,y)
solve((fx(x,y)==l*gx(x,y),fy(x,y)==l*gy(x,y),g(x,y)==120),(x,y,l))

SageCell now gives me a spinning symbol ("I'm working") for a while,
then seems to exit without any result. On my local installation (Sage
9.2 on Windows) it returns an empty list, [].

What is curious is that the constraint equation 5x^2 + 6y=120 is easily
solved for y...

Questions:

1) Shouldn't SageCell output an empty list here?

2) Is this a known limitation of "solve"?

Fernando

PS: It seems that if I add "algorithm='sympy'" then solutions are found.

--
==================================================================
Fernando Q. Gouvea
Carter Professor of Mathematics
Colby College
Mayflower Hill 5836
Waterville, ME 04901
fqgo...@colby.edu http://www.colby.edu/~fqgouvea



Eric Gourgoulhon

da leggere,
28 nov 2023, 10:45:3328/11/23
a sage-support
Hi,

I've also noticed two days ago that https://sagecell.sagemath.org/ is very slow (actually does not terminate) even on elementary operations.
Maybe there is a problem with the server at the moment...

Eric.

Fernando Q. Gouvea

da leggere,
28 nov 2023, 10:50:4528/11/23
a sage-s...@googlegroups.com
Answering part of my question: it seems that sympy and maxima have
different attitudes towards fractional powers of negative numbers, which
may be the source of the problem.

If I change to g(x,y)=x^2+6*y then "solve" has no problem finding
x=2*sqrt(6), y=16.

Fernando
Let the majority eavesdrop if they like, but their tastes should be
firmly ignored.
-- Dwight Macdonald, in "Masscult & Midcult"

Dima Pasechnik

da leggere,
28 nov 2023, 10:52:0928/11/23
a sage-s...@googlegroups.com
one should not be using sagecell.sagemath.org server for teaching, it's not scaling well (compared to cocalc.com, say) under load.

unleashing undergraduates to compute on it surely gets things very slow there

kcrisman

da leggere,
28 nov 2023, 12:25:0428/11/23
a sage-support

Answering part of my question: it seems that sympy and maxima have
different attitudes towards fractional powers of negative numbers, which
may be the source of the problem.


Yes.  Maxima's attitude is that the square root of negative one is an expression which might have multiple values, rather than just picking one you hope might be consistent over branch points.   (There are very long discussions on this list about this from years ago, which I will spare you by not linking to any of them.)  I would not be surprised if that came up here.

Oscar Benjamin

da leggere,
28 nov 2023, 13:12:4128/11/23
a sage-s...@googlegroups.com
I wouldn't mind seeing those discussions if you have a link to send
(perhaps only to me).

--
Oscar

Eric Gourgoulhon

da leggere,
29 nov 2023, 07:40:4729/11/23
a sage-support
Hi,

Le mardi 28 novembre 2023 à 18:25:04 UTC+1, kcrisman a écrit :
Yes.  Maxima's attitude is that the square root of negative one is an expression which might have multiple values, rather than just picking one you hope might be consistent over branch points.  

To enforce Maxima to work in the real domain, avoiding to play too much with complex square roots, one can add at the beginning of the Sage session:

maxima_calculus.eval("domain: real;")

Then the second example in the initial message of this thread yields

[[x == 2/5*sqrt(6)*sqrt(5), y == 16, l == 1/9*18750^(1/6)], [x == -2/5*sqrt(6)*sqrt(5), y == 16, l == -1/9*18750^(1/6)]]

instead of an empty list.

Eric.

kcrisman

da leggere,
29 nov 2023, 12:52:1329/11/23
a sage-support
I wouldn't mind seeing those discussions if you have a link to send
(perhaps only to me).


A relatively recent one (mentioning Eric's workaround) is https://groups.google.com/g/sage-devel/c/h50LZVLVQI4/m/AieyOKHVAQAJ  

(Note that there were at times separate problems with the "abs_integrate" and "to_poly_solve" Maxima packages, though these sometimes overlapped.  And sometimes we may have used them not as intended.)

Oscar Benjamin

da leggere,
3 dic 2023, 07:31:1003/12/23
a sage-s...@googlegroups.com
When using Maxima (5.45.1) directly I get this result with default settings:

(%i1) f: 10*x^(1/3)*y^(2/3)$

(%i2) g: 5*x^2 + 6*y$

(%i3) solve([diff(f,x)=l*diff(g,x), diff(f,y)=l*diff(g,y), g=120], [x,y,l]);
1/6
2 sqrt(6) 18750
(%o3) [[x = ---------, y = 16, l = --------],
sqrt(5) 9
1/6
2 sqrt(6) 18750
[x = - ---------, y = 16, l = - --------]]
sqrt(5) 9

Does Sage modify some Maxima settings related to this or does it call
something other than solve?

--
Oscar

Dima Pasechnik

da leggere,
3 dic 2023, 08:37:4203/12/23
a sage-s...@googlegroups.com
Yes, Sage modifies the defaults of Maxima, in particular we set domain to complex.

Fernando Gouvea

da leggere,
3 dic 2023, 09:03:4603/12/23
a sage-s...@googlegroups.com

Is there a way to change the default when calling "solve"?

Fernando

-- 
=============================================================
Fernando Q. Gouvea         http://www.colby.edu/~fqgouvea
Carter Professor of Mathematics
Dept. of Mathematics
Colby College              
5836 Mayflower Hill        
Waterville, ME 04901       

Mother Nature -- unlike Ivy League admissions committees --
doesn't like suck-ups.
  -- David Brooks, The New York Times, 4/24/2005

Oscar Benjamin

da leggere,
3 dic 2023, 09:26:2003/12/23
a sage-s...@googlegroups.com
Oh, I see:

(%i23) domain: complex
;
(%o23) complex
(%i24) f: 10*x^(1/3)*y^(2/3)$

(%i25) g: 5*x^2 + 6*y$

(%i26) solve([diff(f,x)=l*diff(g,x), diff(f,y)=l*diff(g,y), g=120], [x,y,l]);
(%o26) []

On Sun, 3 Dec 2023 at 14:20, Oscar Benjamin <oscar.j....@gmail.com> wrote:
>
> What does "set domain to complex" mean in terms of Maxima's settings?
>
> Maxima's solve seems to compute complex solutions by default:
>
> (%i21) solve(x^2 + 1);
> (%o21) [x = - %i, x = %i]
> > --
> > 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...@googlegroups.com.
> > To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/6F4839F2-38B6-40F2-B080-EFCC1C0C3B65%40gmail.com.

Oscar Benjamin

da leggere,
3 dic 2023, 09:26:2003/12/23
a sage-s...@googlegroups.com
What does "set domain to complex" mean in terms of Maxima's settings?

Maxima's solve seems to compute complex solutions by default:

(%i21) solve(x^2 + 1);
(%o21) [x = - %i, x = %i]

On Sun, 3 Dec 2023 at 13:37, Dima Pasechnik <dim...@gmail.com> wrote:
>

Nils Bruin

da leggere,
1 gen 2024, 16:54:581 gen
a sage-support
The documented effect is usually of most impact:


there may be other undocumented effects, but the one above tends to explain a lot already.

Oscar Benjamin

da leggere,
1 gen 2024, 17:15:481 gen
a sage-s...@googlegroups.com
I did go on to discuss this on the Maxima mailing list:
https://sourceforge.net/p/maxima/mailman/maxima-discuss/thread/CADB8Zm56axVDFXRLbJnxm7xnnbQiixBzg4VX1T91ucj%2B-tuGvA%40mail.gmail.com/#msg58347791

Apparently domain:complex as used by Sage is not a very well tested
configuration of Maxima.

There are most likely other effects besides the documented one about
sqrt(x^2) not simplifying to abs(x):

$ git grep domain src/simp.lisp
src/simp.lisp:(defmvar $limitdomain '$complex)
src/simp.lisp: (cond ((or (and $logexpand (eq $domain '$real))
src/simp.lisp: (cond ((or $numer_pbranch (eq $domain '$complex))
src/simp.lisp: (or (and (eq $domain '$real) (not
(apparently-complex-to-judge-by-$csign-p (cadr gr))))
src/simp.lisp: (and (eq $domain '$complex)
(apparently-real-to-judge-by-$csign-p (cadr gr)))))
src/simp.lisp: (or (and (eq $domain '$real) (not
(apparently-complex-to-judge-by-$csign-p (cadr gr))))
src/simp.lisp: (and (eq $domain '$complex)
(apparently-real-to-judge-by-$csign-p (cadr gr)))))
src/simp.lisp: (and (eq $domain '$real) $radexpand))
src/simp.lisp: ((or (eq $domain '$complex) (not $radexpand)) (go up)))
src/simp.lisp: (and (eq $domain '$complex)
src/simp.lisp: (and (eq $domain '$real)
src/simp.lisp: (eq $domain '$real))
src/simp.lisp: (eq $domain '$real)
src/simp.lisp: ((and (eq $domain '$real)
src/simp.lisp: (eq $domain '$real)
src/simp.lisp: (and (eq $domain '$real) (ratnump e) (oddp (caddr e)))))
src/simp.lisp: ((eq $domain '$real)

--
Oscar
> To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/454c0dbc-ead3-45c4-9557-fdb2391a9ce9n%40googlegroups.com.

Emmanuel Charpentier

da leggere,
2 gen 2024, 06:30:142 gen
a sage-support

FWIW, a working workaround this interesting Maxima quirk (bug ?) is to use sympy, as demonstrated here.

HTH,

Le mardi 28 novembre 2023 à 16:36:30 UTC+1, Fernando Q. Gouvea a écrit :
Il messaggio è stato eliminato

Emmanuel Charpentier

da leggere,
4 gen 2024, 04:45:594 gen
a sage-support

These systems and Sage’s “solutions” exhibit some serious problems. See there

Rispondi a tutti
Rispondi all'autore
Inoltra
0 nuovi messaggi