sursumCorda

1279 Reputation

15 Badges

2 years, 353 days

MaplePrimes Activity


These are questions asked by sursumCorda

The solve function is able to solve inequalities and return solutions that satisfy the inequalities. Unfortunately, it appears that for some toy problems, this command does not always perform efficiently
 

restart;

eqns__1 := {x >= 0, y >= 0, z >= 0, x*y*z+x^2+y^2+z^2 <= 2*(x*y+x*z+y*z), 2*(x^2+y^2+z^2) < x^2*y+x*z^2+y^2*z-27}

eqns__2 := {x > 0, y > 0, z > 0, x*y*z+x^2+y^2+z^2 <= 2*(x*y+x*z+y*z), 2*(x^2+y^2+z^2) <= x^2*y+x*z^2+y^2*z-27}

timelimit(0.1e2, :-solve(eqns__1, [x, y, z], AllSolutions))

timelimit(0.1e2, :-solve(eqns__2, [x, y, z], AllSolutions))

Error, (in RegularChains:-TRDcadEvalBox) time expired

 

Error, (in RegularChains:-TRDexquo) time expired

 

timelimit(0.1e2, MTM:-solve(eqns__1[], [x, y, z][]))

timelimit(0.1e2, MTM:-solve(eqns__2[], [x, y, z][]))

Warning, solving 5 equations for 3 variables

 

Error, (in sdmp:-mul) time expired

 

Warning, solving 5 equations for 3 variables

 

Error, (in RegularChains:-TRDcadMultiplyInterval) time expired

 

timelimit(0.1e2, RealDomain:-solve(eqns__1, [x, y, z]))

timelimit(0.1e2, RealDomain:-solve(eqns__2, [x, y, z]))

Error, (in RegularChains:-TRDcadIsIntervalNormal) time expired

 

Error, (in RegularChains:-TRDnext_sub_resultant2) time expired

 

timelimit(0.1e2, PDEtools:-Solve(eqns__1, [x, y, z]))

timelimit(0.1e2, PDEtools:-Solve(eqns__2, [x, y, z]))

Error, (in RegularChains:-TRDsub_resultant_chain_monomial_basis) time expired

 

Error, (in modp1/DistDeg) time expired

 

plots['implicitplot3d']([x*y*z+x^2+y^2+z^2 <= 2*(x*y+x*z+y*z), 2*(x^2+y^2+z^2) < x^2*y+x*z^2+y^2*z-27], x = 0 .. 6, y = 0 .. 6, z = 0 .. 6, lightmodel = "light1", orientation = [125, 105, 180], style = "patchnogrid")

 


 

Download x=y=z=3.mw

So none of them is capable of giving a complete description of the region defined by or  with a time limit of "ten seconds". (I believe that completing the evaluation may take a much long time; actually, if there is no constraint on the real time allowed, the symbolic solver will be stuck.) (Note that here it is not hard to find individual instances of values of variables that satisfy them (for example, via the 3-D region boundary plot above), yet they provide less insight into all solutions that exist.)
But in my view,  are too long for these two special systems.

Can Maple solve them more quickly at present? 

> eqns__1 := {x^2+y^2+z^2+x*y*z <= 2*(y*z+z*x+x*y), 2*(x^2+y^2+z^2) < y^2*z+z^2*x+x^2*y-27, x >= 0, y >= 0, z >= 0};
> eqns__2 := {x^2+y^2+z^2+x*y*z <= 2*(y*z+z*x+x*y), 2*(x^2+y^2+z^2) <= y^2*z+z^2*x+x^2*y-27, x > 0, y > 0, z > 0};

(It seems that a potential difficult part for Maple is likely attributable to proving completeness of the solution ….)

A very easy example: 

solve({a > 0, ln(a) + ln(1 + a) >= 0}, a);
 = 
                        /    2         \ 
                        |---------- < a| 
                       <  (1/2)         >
                        |5      + 1    | 
                        \              / 

The output is . Clearly,  is also a solution to this inequality, so the solutions have been lost. But there is no warning message. Why?

It says that one may specify the number of significant (decimal) digits when performing calculations. However, it appears that setting a higher precision does not yield more satisfactory results. Actually, the recommended solver (in the package) can report that a maximization succeeded, and yet the reported solution can be, in effect, incorrect.

restart;

kernelopts(version);

         Maple 2023.0, X86 64 WINDOWS, Mar 06 2023, Build ID 1689885

 

fun := ((2*(x+y+z))*(sqrt(y*z*(z+x)*(x+y))/(z+2*x+y)+sqrt(z*x*(x+y)*(y+z))/(x+2*y+z)+sqrt(x*y*(y+z)*(z+x))/(y+2*z+x))-9*x*y*z/(x+y+z)-2*(x*y+x*z+y*z))/(sqrt(x*y*z/(x+y+z))*(x+y+z-sqrt(27*x*y*z/(x+y+z))))

Digits := 5

Optimization['Maximize'](fun, assume = nonnegative, initialpoint = ({seq})(w = (rand())(), `in`(w, [x, y, z])))

Warning, no iterations performed as initial point satisfies first-order conditions

 

[2.56454435679811255, [x = HFloat(8.44225460865e11), y = HFloat(1.5121750086e11), z = HFloat(3.58747328735e11)]]

(1)

Digits := 10

Optimization['Maximize'](fun, assume = nonnegative, initialpoint = ({seq})(w = (rand())(), `in`(w, [x, y, z])))

Warning, no iterations performed as initial point satisfies first-order conditions

 

[2.54449612902387834, [x = HFloat(9.50923834782e11), y = HFloat(8.94868300574e11), z = HFloat(2.30179425858e11)]]

(2)

Digits := 15

Optimization['Maximize'](fun, assume = nonnegative, initialpoint = ({seq})(w = (rand())(), `in`(w, [x, y, z])))

Warning, no iterations performed as initial point satisfies first-order conditions

 

[2.53798179305501392, [x = HFloat(9.91986977089e11), y = HFloat(5.97663762096e11), z = HFloat(4.31192847449e11)]]

(3)

Digits := 20

Optimization['Maximize'](fun, assume = nonnegative, initialpoint = ({seq})(w = (rand())(), `in`(w, [x, y, z])))

[2.5281266501331255053, [x = 583804136381.99996354, y = 332585592469.99985371, z = 642614553072.00010884]]

(4)

Digits := 25

Optimization['Maximize'](fun, assume = nonnegative, initialpoint = ({seq})(w = (rand())(), `in`(w, [x, y, z])))

Error, (in Optimization:-NLPSolve) complex value encountered

 

Digits := 30

Optimization['Maximize'](fun, assume = nonnegative, initialpoint = ({seq})(w = (rand())(), `in`(w, [x, y, z])))

Warning, undefined value encountered

 

[Float(infinity), [x = 996095848033.138573379019582678, y = 0., z = 473765214257.250967995851222582]]

(5)


 

Download NMaxValue.mw

It is said that the approximate supremum of  is 3e0 (under the assumptions). 

fun:=`assuming`((2*(x+y+z)*(sqrt(y*z*(z+x)*(x+y))/(z+2*x+y\
)+sqrt(z*x*(x+y)*(y+z))/(x+2*y+z)+sqrt(x*y*(y+z)*(z+x))/(y\
+2*z+x))-(9*x*y*z/(x+y+z)+2*(y*z+z*x+x*y)))/(sqrt(x*y*z/(x+y+z))*(x+y+z-sqrt(27*x*y*z/(x+y+z)))),[(x,y,z)>~0]):

I am not sure if the toolbox performs better. But is there a way to obtain significantly accurate output natively?

In the end of numerics - Mathematica Stack Exchange,  claimed that "I don't know if it also has generalized precision tracking". (Another answer additionally claimed that Mma chooses "significance arithmetic" to track the precision.) So, the question is simple: Does Maple always (automatically) keep track of the accuracy of inexact numbers through a computation?

Maple has a myriad of kernel functions for doing different kinds of symbolic replacements to whole expressions: subs, eval, algsubs, applyrule, `simplify/siderels`, `simpl/eval`,  Physics:-Substitute, MTM:-subs, MmaTranslator:-Mma:-ReplaceRepeated, PDEtools:-dsubs, liesymm:-wsubs, student:-powsubs, etc. But if I need to apply transformation rules over and over again until the result no longer changes within  iterations in a singular clean built-in command (so, without explicit while / until / MmaTranslator:-Mma:-FixedPoint) elegantly, only four can be called: eval['recurse']algsubs, applyrule, MmaTranslator['Mma']['ReplaceRepeated']. The difference between applyrule and algsubs has been elucidated in this help page:

applyrule … does not do mathematical transformations as algsubs does.

However, I cannot find any explanation for the potential distinctions between eval['recurse'] and MmaTranslator['Mma']['ReplaceRepeated'] in their documentation. Does anyone know?

Besides, is it possible to use an "operator" form (like ) instead of a "functional" form (like ) to perform (single or repeated) substitutions in Maple?

First 12 13 14 15 16 17 18 Last Page 14 of 23