Le mardi 30 novembre 2021 à 18:18:35 UTC+1, cyrille piatecki a écrit :

> Thanks Emmanuel for your so precious answer. But obviously the doc must be 
> upgraded. From
>
> "maxima", "fricas", "sympy", "giac"
>
> only "sympy" has a reference.
>

(Almost) right : the documentation I pointed to doesn’t list anything but 
maxima. The up to date documentation 
<https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/relation.html>
 
is similar, but gives example of algorithm="sympy" uses…

Would you care to file a ticket against that ? A further problem being that 
the documentatin mentions the use of algorithm for single-equation solving, 
whereas your current example shows success for (an) equation *system*. This 
should be clarified…
​
 

> I wonder If one could add a parameter asking, in all cases, only for Real 
> solutions.
>

Beware : There Might Be Tygers ! (Hint : I left you an exercise... ;-)
 

>
> ----- Mail d’origine -----
> De: Emmanuel Charpentier <emanuel.c...@gmail.com>
> À: sage-support <sage-s...@googlegroups.com>
> Envoyé: Tue, 30 Nov 2021 14:54:31 +0100 (CET)
> Objet: Re: [sage-support] Re: Constrained optimization with strange result.
>
> Le lundi 29 novembre 2021 à 16:33:41 UTC+1, cyrille piatecki a écrit :
>
>
>
> Thanks Emmanuel for your precious answer. But It generates some few new 
>> questions :
>> - is there a place in the documentation where I can find the information 
>> on `solve()` and mainly its options ?
>>
>
>
> The documentation 
> <https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/relation.html>,
>  
> of course…
>
>
>
>
>> - if I understand clearly z_{6497} is an integer but how to fix it to 
>> zero --- when the number change at each iteration
>>
>
>
> That’s why I used a methods sequence to designate it, rather than using 
> its name…
>
>
>
>
>> - sympy seems to be the good approach
>>
>
>
> Beware : see below…
>
>
>
> but it is not self evident that to call y one must typpeset sol2[0][x]
>>
>
>
> It is, because algorithm="sympy" will cause the results to be expressed 
> as dictionaries and D[x] is the canonical way to get the value of the 
> entry of dictionary D indexed by x. Basic Python…
>
>
>
>
>> - the giac way is certainly the better but it keeps no track of the 
>> variable's order.
>>
>
>
> Again, ask for a solution dictionary. As for algorithm="giac", I have 
> seen it go pear-shaped a couple times…
>
> Now for the various expression of solutions : consider :
>
> print(table([[u,solve(FOC,[x,y,l], solution_dict=True, algorithm=u)] for u in 
> ["maxima", "fricas", "sympy", "giac"]]))
>   maxima   [{l: 1/p_y, x: (p_x/p_y)^(1/a)*e^(2*I*pi*z3541/a), y: 
> -(p_x*(p_x/p_y)^(1/a)*e^(2*I*pi*z3541/a) - R)/p_y}]
>   fricas   [{l: 1/p_y, x: (p_x/p_y)^(1/a)*e^(2*I*pi*z3892/a), y: 
> -(p_x*(p_x/p_y)^(1/a)*e^(2*I*pi*z3892/a) - R)/p_y}]
>   sympy    [{x: (p_x/p_y)^(1/a), l: 1/p_y, y: -(p_x*(p_x/p_y)^(1/a) - R)/p_y}]
>   giac     [{x: (p_x/p_y)^(1/a), y: -(p_x*(p_x/p_y)^(1/a) - R)/p_y, l: 1/p_y}]
>
> Both maxima and fricas try to explicitly express the set of solutions of 
> the equation z^a==p_x/p_y, which is a set of a complexes if a is a 
> positive integer. (I leave to you (as en exercise ;-) to determine what it 
> means (if any…) if a is rational, algebraic or transcendental, real or 
> complex…).
>
> OTOH, both sympy and giac use the notation (p_x/p_y)^(1/a) to *implicitly* 
> denote *the very same set of solutions to the very same equation. One could 
> say that tey are glossing over whatever maxima and fricas insist on. 
> Choose your poison…
>
> HTH,
> ​
>
>  
>
>>
>> I have tried my solution assuming l>0 on the 3 conditions but it changes 
>> nothing.
>>
>>
>>
>> ----- Mail d’origine -----
>> De: Emmanuel Charpentier <emanuel.c...@gmail.com>
>> À: sage-support <sage-s...@googlegroups.com>
>> Envoyé: Mon, 29 Nov 2021 11:03:37 +0100 (CET)
>> Objet: [sage-support] Re: Constrained optimization with strange result.
>>
>> Variables of the form z_xxxx are *integer* variables created by Maxima, 
>> which attempts to give you *also* the complex roots, if any, thus 
>> ignoring the assumptions on x, y and l. Note that :
>>
>> sage: solve(FOC[0], x)
>> ---------------------------------------------------------------------------
>>
>> [ Snip… ]
>>
>> TypeError: Computation failed since Maxima requested additional constraints; 
>> using the 'assume' command before evaluation *may* help (example of legal 
>> syntax is 'assume(l>0)', see `assume?` for more details)
>> Is l positive, negative or zero?
>> sage: with assuming(l>0): print(solve(FOC[0], x))
>> [
>> x == (l*p_x)^(1/a)
>> ]
>> sage: with assuming(l<0): print(solve(FOC[0], x))
>> [
>> x^a == l*p_x
>> ]
>> sage: with assuming(l<0): print(solve(FOC[0], x, to_poly_solve=True))
>> [x == (l*p_x)^(1/a)*e^(2*I*pi*z4353/a)]
>>
>> Interestingly:
>>
>> sage: solve([FOC[0]==0,FOC[1]==0,FOC[2]==0],x,y,l)
>> [[l == (1/p_y), x == (p_x/p_y)^(1/a)*e^(2*I*pi*z3540/a), y == 
>> -(p_x*(p_x/p_y)^(1/a)*e^(2*I*pi*z3540/a) - R)/p_y]]
>> sage: solve([FOC[0]==0,FOC[1]==0,FOC[2]==0],x,y,l, algorithm="sympy")
>> [{x: (p_x/p_y)^(1/a), l: 1/p_y, y: -(p_x*(p_x/p_y)^(1/a) - R)/p_y}]
>> sage: solve([FOC[0]==0,FOC[1]==0,FOC[2]==0],x,y,l, algorithm="fricas")
>> [[l == (1/p_y), x == (p_x/p_y)^(1/a)*e^(2*I*pi*z3891/a), y == 
>> -(p_x*(p_x/p_y)^(1/a)*e^(2*I*pi*z3891/a) - R)/p_y]]
>> sage: giac.solve(giac(FOC),giac([x,y,l])).sage()
>> [[(p_x/p_y)^(1/a), -(p_x*(p_x/p_y)^(1/a) - R)/p_y, 1/p_y]]
>>
>> HTH,
>> ​
>> Le dimanche 28 novembre 2021 à 22:13:12 UTC+1, cyrille piatecki a écrit :
>>
>>> On my computer the solution of
>>>
>>> var('a x y p_x p_y D Rev R l')
>>> assume(a,'real')
>>> assume(x,'real')
>>> assume(y,'real')
>>> assume(p_x,'real')
>>> assume(p_y,'real')
>>> assume(D,'real')
>>> assume(Rev,'real')
>>> assume(R,'real')
>>> assume(l,'real')
>>> assume(a<1)
>>> assume(a>0)
>>> assume(p_x>0)
>>> assume(p_y>0)
>>> assume(R>0)
>>> U =(1/(a+1))*x^(a+1)+y
>>> show(LatexExpr(r'\text{La fonction d}^\prime\text{utilité est }U(x,y) = 
>>> '),U)
>>> D= x*p_x + y*p_y
>>> show(LatexExpr(r'\text{La Dépense } D = '),D)
>>> Rev= R
>>> show(LatexExpr(r'\text{Le Revenu } Rev = '),R)
>>> L=U+l*(Rev-D)
>>> show(LatexExpr(r'\text{Le lagrangien est } \mathcal{L}(x, y, λ) = '),L)
>>> FOC = [diff(L,x),diff(L,y),diff(L,l)]
>>> show(LatexExpr(r'\text{Les condition du premier ordre sont } 
>>> \left\{\begin{array}{c}\mathcal{L}_x= 0\\\mathcal{L}_y= 0\\\mathcal{L}_λ= 
>>> 0\end{array}\right. '))
>>> show(LatexExpr(r'\text{soit }'))
>>> show(LatexExpr(r'\mathcal{L}_x= 0 \Longleftrightarrow '),FOC[0]==0)    
>>> show(LatexExpr(r'\mathcal{L}_y= 0 \Longleftrightarrow '),FOC[1]==0)
>>> show(LatexExpr(r'\mathcal{L}_λ= 0 \Longleftrightarrow '),FOC[2]==0)
>>> sol=solve([FOC[0]==0,FOC[1]==0,FOC[2]==0],x,y,l)
>>> show(sol)
>>>
>>> Is nearly correct, but an extra complex exponential term multiplies $x$ 
>>> and then modifies $y$. Even as an element I do not understand its form :
>>>
>>> $e^{(2iπz_{5797}a)}$
>>>
>>> Could some one explain why ?
>>>
>>>
>>
>>
>> -- 
>>
>> 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/e745f8a7-df76-4def-b3b9-09ac7684e9a3n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sage-support/e745f8a7-df76-4def-b3b9-09ac7684e9a3n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>>
>
>
> -- 
>
> 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/04561da4-79da-43de-b55c-7b1f65a48984n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sage-support/04561da4-79da-43de-b55c-7b1f65a48984n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
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/c6a0ee49-e13d-4aa2-a8d7-55a99d8f6ad4n%40googlegroups.com.

Reply via email to