Maple 2025 Questions and Posts

These are Posts and Questions associated with the product, Maple 2025

WHen plotting f(x) and g(x) on same plot, and putting legend at bottom (default), the legends show horizontally. i.e. f(x) then g(x) on same line.

I'd like the legend to be stacked vertically, just like when the legend on the right or left, But keep it at bottom. But want to do all this in code. Not using any UI context tools or mouse.

Here is an example

restart;

f:=x->x^3-x^2+1;
g:=x->6-2*x-x^2;
the_legend:=[typeset("f(x) = ",f(x)),typeset("g(x) = ",g(x))]:
plots[setoptions](font=[TIMES,16], labelfont=[TIMES,18]):
the_title:="Plot of f(x) and g(x)":
plot([f(x),g(x)],x=-5..5,
     'gridlines',
     'color'=['red','blue'],
     'legend'=the_legend,
     'legendstyle'=['location'='bottom'],
     'axes'='normal',
     'title'=the_title,  
     'scaling'='unconstrained');

proc (x) options operator, arrow; x^3-x^2+1 end proc

proc (x) options operator, arrow; 6-2*x-x^2 end proc

#I want the above legend to be stacked vertically like the
#following one, but keep it at bottom

plot([f(x),g(x)],x=-5..5,
     'gridlines',
     'color'=['red','blue'],
     'legend'=the_legend,
     'legendstyle'=['location'='right'],
     'axes'='normal',
     'title'=the_title,  
     'scaling'='unconstrained');

 

 

Download legend_question.mw

This way back machine shows how Maple debugger looked like in the year 2005 (that is 20 years ago) in Maple 10.

And it is pretty much the same debugger today. Here is a screen shot side by side of recent version

20 YEARS and nothing changed.

The debugger in Maple is one, if not the main, selling point for Maple compared to its competitor for many.

Even the article above says this

     "But the big plus about the Maple language is that it has a debugger! "

     "Also, the existence of a reasonable debugger in Maple is a big plus. From
      personal experience, I can tell you that debugging Mathematica Notebooks
     can be both time consuming and frustrating."

Can the debugger be improved, so it is easier to use? 

All what is needed is to change the UI so  one can see more code as they are stepping in, like with Matlab debugger for example.

That is all. Currently it is a pain using the debugger, since one only sees one or 2-3  lines at time as they step in the code instead of seeing complete code with full screen which makes it much easier to see things.

Instead of Maplesoft wasting time on AI and cosmetics, do something practical for developers and improve the debugger.

It should not take a software company 40 years just to improve a UI for a debugger. What is the blocking issue here? 

Just hire one or two programmers and they can do this in 6 months.

Given equation such as 1/A=x/A, at school we are allowed to write this as 1=x by canceling A on both side.

But in Maple, even if I tell it that A is not zero, it still refuses to simplify it and cancel A from both sides.

What could be the reson for this?

eq:= 1/A = x/A;
simplify(eq) assuming A<>0

Using Mathematica it does it:

I am not looking for workaround, I know how to force this if needed, one way could be

numer(normal((lhs-rhs)(eq)))=0

gives 1 - x = 0

My question is why Maple's simplify does not simplify it automatically? Even using simplify with size option did not. Is it just weakness in simplify or is there a subtle mathematical reason behind it which I am missing?

Maple 2025.2

Given first order nonlinear ode which is hard to solve using standard methods, the smart dsolve sometimes uses a method where it linearizes the first order ode to a linear second order ode and solves that.

Then with that solution to the linear second order ode, it is able to find the solution of the first order ode (need to resolve the constants of integration to merge them into one, but this part is easy to do).

My question is, how and what method it uses to "linearizes by differentation"? I could not find this in any textbook I have, and not able to see how it does.

Here is an example where it uses this method to solving this first order ode

restart;

Typesetting:-Unsuppress('all'); #always do this.
Typesetting:-Settings(prime=x,'typesetprime'=true); #this says to use y'(x) instead of dy/dx    
Typesetting:-Suppress(y(x)); # this says to use y' and not y'(x)

ode:=diff(y(x),x) = (-y(x)^2+4*a*x)^2/y(x); 
infolevel[dsolve]:=5;
dsolve(ode,y(x), singsol=all);

Tracing says 

So it says, if I understand, that it differentiated the original given first order ode and then linearized the resulting second order ode to the above, which is    y''=-64 a^2 x^2 y - 16 a x y' which is certainly linear second order ode and now can be solved using kovacic algorithm. Now the solution to the first order ode can be obtained.

But when differentiating the first order ode, this is the result

expand(diff(ode,x))

So the question is, did Maple mean it "linearized" the above to y''=-64 a^2 x^2 y - 16 a x y' 

If so, then how? Did it use Taylor series? but if so, where it expanded about? Or did it use some other method?  One thing I noticed is that by multiplying the RHS above by y^2 it becomes

And "removing" the nonlinear terms (say expansion is around y=0, so higher order y terms are very small and can be removed) the RHS above becomes

    y'' y^2 = -16 y' a^2 x^2 + 32 a^2 x y

Which is close to Maple shows, but 32 instead of 64, and what about the y^2 on the left side?  Is this method even valid mathematically to do? Since solution that result will be correct only near y=0?

So far, trying to step in the debugger to find how, I was not able to find where it does that but will keep trying.

Any idea what Maple means by linearization to 2nd order and how it does it?

ps. only case I know about, where nonlinear first order ode can be transformed to linear second order ode is the Riccati ode using transformation y=u'/u. But this  first order ode is not Riccati.

This is a question on semantics I suppose.

Maple dsolve returns a solution with a limit in it, because the limit do not exist or Maple could not find the limit. Which is fine.

Then why does simplify() applied to the solution returns undefined?  Now it appears that Maple solution is y(x)=undefined, which does not make much sense.

Should it not have left the solution with the limit in place as is? i.e. since dsolve could not find limit, how did simplify managed to replace the limit by undefined?

Is this considered an expected behavior by simplify?

Firewall changed its mind again today and will not let me upload worksheet. Here is code

ode:=4*x*diff(y(x),x$2)+2*diff(y(x),x)+y(x)=(6+x)/x^2;
IC:=y(infinity)=0;
sol:=dsolve([ode,IC],y(x)); #OK, maple can't find limit. No problem
simplify(sol)

I have to ask my school teacher on this when school starts. But is it OK to have infinity in the ode solution itself?

Maple 2025.2 gives

ode:=diff(y(x),x$2)-2*diff(y(x),x)+y(x)=4*exp(-x);
IC:=y(infinity)=0;
sol:=dsolve([ode,IC])

And according to odetest, this does not verify the ode nor the IC

odetest(sol,[ode,IC])

Just asking what others think of this solution and if it should be consider a bug or not?

Maple 2025.2 on windows 10

Solving this ode, Maple says 

But notice, the xi and eta tangent vectors order is reversed. Maple says pattern is [0,F*G], but shows [F*G,0].

Also, when later using DEtools:-symgen with HINT option, it does not return the above result. Tried both patterns with 0 on left and 0 on right. In both cases symgen does not return what shows above. 

Why is that? Am I doing something wrong? Notice also it says   "way=HINT"  but I am not using way option. Only HINT option, Why is it saying way=HINT? it seems argument passing I  am using is wrong, but do not see why it could be wrong.  This is what help says

Worksheet below

interface(version);

`Standard Worksheet Interface, Maple 2025.2, Windows 10, November 11 2025 Build ID 1971053`

restart;

ode:=diff(y(x),x)*cos(y(x))-cos(x)*sin(y(x))^2-sin(y(x)) = 0;
infolevel[dsolve]:=5;
infolevel[symgen]:=5;

(diff(y(x), x))*cos(y(x))-cos(x)*sin(y(x))^2-sin(y(x)) = 0

5

5

dsolve(ode);

Methods for first order ODEs:

--- Trying classification methods ---

trying a quadrature

trying 1st order linear

trying Bernoulli

trying separable

trying inverse linear

trying homogeneous types:

trying Chini

differential order: 1; looking for linear symmetries

trying exact

Looking for potential symmetries

trying inverse_Riccati

trying an equivalence to an Abel ODE

differential order: 1; trying a linearization to 2nd order

--- trying a change of variables {x -> y(x), y(x) -> x}

differential order: 1; trying a linearization to 2nd order

trying 1st order ODE linearizable_by_differentiation

--- Trying Lie symmetry methods, 1st order ---

 -> Computing symmetries using: way = 3

 -> Computing symmetries using: way = 4

 -> Computing symmetries using: way = 5

trying symmetry patterns for 1st order ODEs

 -> Computing symmetries using: way = patterns

-> trying a symmetry pattern of the form [F(x)*G(y), 0]

-> trying a symmetry pattern of the form [0, F(x)*G(y)]

-> The symmetry found is [0 exp(-x)*(2*sin(y)^2+cos(y)^2-1)/cos(y)]

<- symmetry pattern of the form [0, F(x)*G(y)] successful

[exp(-x)*(2*sin(y)^2+cos(y)^2-1)/cos(y), 0]

 <- successful computation of symmetries.

y(x) = arctan(-2*exp(x)/(exp(x)*cos(x)+exp(x)*sin(x)+2*c__1), ((2*cos(x)*sin(x)*(exp(x))^2+4*c__1*sin(x)*exp(x)+4*cos(x)*c__1*exp(x)+4*c__1^2+(exp(x))^2)*(2*cos(x)*sin(x)*(exp(x))^2+4*c__1*sin(x)*exp(x)+4*cos(x)*c__1*exp(x)-3*(exp(x))^2+4*c__1^2))^(1/2)/(2*cos(x)*sin(x)*(exp(x))^2+4*c__1*sin(x)*exp(x)+4*cos(x)*c__1*exp(x)+4*c__1^2+(exp(x))^2)), y(x) = arctan(-2*exp(x)/(exp(x)*cos(x)+exp(x)*sin(x)+2*c__1), -((2*cos(x)*sin(x)*(exp(x))^2+4*c__1*sin(x)*exp(x)+4*cos(x)*c__1*exp(x)+4*c__1^2+(exp(x))^2)*(2*cos(x)*sin(x)*(exp(x))^2+4*c__1*sin(x)*exp(x)+4*cos(x)*c__1*exp(x)-3*(exp(x))^2+4*c__1^2))^(1/2)/(2*cos(x)*sin(x)*(exp(x))^2+4*c__1*sin(x)*exp(x)+4*cos(x)*c__1*exp(x)+4*c__1^2+(exp(x))^2))

infolevel[dsolve]:=0;

0

DEtools:-symgen(ode,y(x),HINT = [ 0,F(x)*G(y)]); #why this does not return the symmetries found by dsolve above?

 -> Computing symmetries using: way = HINT

DEtools:-symgen(ode,y(x),HINT = [ F(x)*G(y),0]); #why this does not return the symmetries found by dsolve above?

 -> Computing symmetries using: way = HINT

DEtools:-symgen(ode)

 -> Computing symmetries using: way = 2

 -> Computing symmetries using: way = 3

 -> Computing symmetries using: way = 4

 -> Computing symmetries using: way = abaco1

[0, exp(-x)*(-1+cos(2*y))/cos(y)]

 <- successful computation of symmetries.

[_xi = 0, _eta = exp(-x)*(-1+cos(2*y))/cos(y)]

 

 

Download symgen_confusion_jan_9_2026.mw

Has anybody seen the unit palette beeing empty? 

This is new to me. I normally use the unit entry in the favourites but this time wanted to try Maple presets.

I have written about unit problems before. I thought an update would solve the problems, but no.

I have a very simple example here where the unit can't be changed:

In the first example I am using capital M for mass; now I can change unit on density.

I know this is a "silly" question but just recently my Tool Ribbon disapears or "retracts" into thin air and I have to first click on it to get it to "deploy" downward and then when I click on it to "Insert, View, Edit..." it then retracts and is gone once I do the click.  I am forced to do 2 clicks when before I had only to do one click.  This is not efficient.  I like the Ribbon concept for Maple 2025 but this is an irritating annoyance.  If some one knowlegeable could please take a few seconds to reply to this, I would greatly appreciate it.  BTW, this just started.  In an other machine I have where Maple 2025 is located, it doesn't do this.   I am sure it is a simple setting somewhere.  I just can't find that setting.  Thank you in advance 

Hello Ladies and Genlemen,

What is the command to display a list of *all* the packages in Maple ?

How do you insert an output for exemple (2.1.1) in a worksheet?

CTRL+K is inactive for me...it just adds a CRLF.

Thank you very much and kind regards,

Jean-Michel

Do not know if this known or reported or not. Just in case. Here is an example where odetest gives internal error when adding integer to assuming. 

Maple 2025.2. Firewall will not let me upload now. Here is code

sol:=y(x) = -4/9*I*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)*x^2+4/9*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)*x^2+4/9*I*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)+1/9*x^4-4/9*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)-16/9*I*(x+1)^(1/2)*(x-1)^(1/2)-2/9*x^2+1/9;
ode:=(-x^2+1)*diff(y(x),x)+x*y(x) = x*(-x^2+1)*y(x)^(1/2);
IC:=y(0) = 1;

odetest(sol,[ode,IC]) assuming integer,positive;

Screen shot

I wanted to trick odetest and see what it does. I gave it solution to ode with IC. The solution was in form of implicit solution.

odetest verified it.

Then I solved for y(x) from the implicit solution and passed each now explicit solution to odetest, now it does not verify either one. (two explicit solutions resulted)

I would have thought that odetest to not verify the implicit solution as well. Is this a bug or an expected behavior when using implicit?

Does this mean, to be safe, one should try to solve for y(x) explicitly before using odetest? But sometimes this can be expensive or not possible nor practical to do as implicit solution can be complicated to solve for y(x).

Maple 2025.2 on windows 10.

Firewall now suddently will not let me upload a worksheet again for some reason. Firewall did not have a problem yesterday, but today it complained.

So here code and screen shot

restart;
ode:=2*y(x) + 2*x*y(x)^2 + (2*x + 2*x^2*y(x))*diff(y(x), x) = 0;
IC:=y(0) = 1;
maple_sol:=dsolve([ode,IC]);
#                         maple_sol := ()

my_sol_1:=x*y(x)*(2+y(x)*x)=0;
odetest(my_sol_1,[ode,IC])

#                             [0, 0]

PDEtools:-Solve(my_sol_1,y(x));
map(X->odetest(X,[ode,IC]),[%])

#   [[0, 1], [0, undefined]]

Hi Maplesoft Support / Community,

I've encountered a critical and bizarre bug involving Bits:-And correctness on large integers (~30 digits) derived from repeated integerdivq2exp operations.

  • Maple 2023 (Linux x86_64)
  • Maple 2025 (Linux x86_64)
  • Maple 2025 (Windows x86_64)

The correctness of Bits:-And depends on the order of execution

(See attached common.mpl, bug_test2.mpl, bug_test3.mpl logic).

Case "Fail" (bug_test2.mpl):

  1. Run operation (loops `integerdivq2exp`).
  2. Print result num1 (semicolon).
  3. Define num1_clean (hardcoded same value).
  4. Bits:-And(num1) -> INCORRECT.
  5. Bits:-And(num1_clean) -> INCORRECT.

Case "Pass" (bug_test3.mpl):

  1. Define num1_clean.
  2. Run operation (loops integerdivq2exp).
  3. Bits:-And(num1) -> CORRECT.
  4. Bits:-And(num1_clean) -> CORRECT.

The same behaviour can be observed in Worksheet mode using read.  (See worksheet_driver.mw)

But the result cannot be reproduced if not using read. (See worksheet_version.mw and worksheet_version2.mw)

Code below:

N := 2100:
n := 1000:
num := rand(0 .. 2^N)():
operation := proc(num, n)
    local q, k;
    q := num;
    for k from 1 to 2 do
        q := integerdivq2exp(q, n); 
    end do;
    q;
end proc:
read "common.mpl";

num1 := operation(num, n);
num1_clean := 1083029963437854242395921050992;

num1_clean_And_result := Bits:-And(num1_clean, integermul2exp(1, n) - 1);
num1_And_result := Bits:-And(num1, integermul2exp(1, n) - 1);

##################################

expected_result := irem(num1_clean, integermul2exp(1, n));

if num1 <> num1_clean then
    error "num1 does not match num1_clean";
end if;
print("num1 matches num1_clean");

if num1_And_result <> num1_clean_And_result then
    error "num1_And_result does not match num1_clean_And_result";
end if;
print("num1_And_result matches num1_clean_And_result");

if num1_And_result <> expected_result then
    error "num1_And_result does not match expected_result";
end if;
print("num1_And_result matches expected_result");
read "common.mpl";

num1_clean := 1083029963437854242395921050992:
num1 := operation(num, n):

num1_clean_And_result := Bits:-And(num1_clean, integermul2exp(1, n) - 1):
num1_And_result := Bits:-And(num1, integermul2exp(1, n) - 1);

##################################

expected_result := irem(num1_clean, integermul2exp(1, n));

if num1 <> num1_clean then
    error "num1 does not match num1_clean";
end if;
print("num1 matches num1_clean");

if num1_And_result <> num1_clean_And_result then
    error "num1_And_result does not match num1_clean_And_result";
end if;
print("num1_And_result matches num1_clean_And_result");

if num1_And_result <> expected_result then
    error "num1_And_result does not match expected_result";
end if;
print("num1_And_result matches expected_result");

I noticed today only 2 cases where calling simplify, with no options, made things worst.

Just trying to understand why.

Here is one example. Solved an ode. when calling odetest on this solution, it gives zero. But if the solution is simplified first, then odetest no longer gives zero. And it is actually hard to find a trick to make it become zero so far.

But the question is: Is this to be expected sometimes? I use simplify sporadically, but like to get smaller  expression at one point. But now I am not sure if I should even do that.

Could this be a problem in simplify itself somehow?

Here is an example.

interface(version);

`Standard Worksheet Interface, Maple 2025.2, Windows 10, November 11 2025 Build ID 1971053`

restart;

ode:=diff(y(x), x) = y(x)*(-1 - x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2 - x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*ln(x) + x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*y(x) + 2*x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*y(x)*ln(x) + x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*y(x)*ln(x)^2)/((ln(x) + 1)*x);

diff(y(x), x) = y(x)*(-1-x^(2/(ln(x)+1))*exp(2*ln(x)^2/(ln(x)+1))*x^2-x^(2/(ln(x)+1))*exp(2*ln(x)^2/(ln(x)+1))*x^2*ln(x)+x^(2/(ln(x)+1))*exp(2*ln(x)^2/(ln(x)+1))*x^2*y(x)+2*x^(2/(ln(x)+1))*exp(2*ln(x)^2/(ln(x)+1))*x^2*y(x)*ln(x)+x^(2/(ln(x)+1))*exp(2*ln(x)^2/(ln(x)+1))*x^2*y(x)*ln(x)^2)/((ln(x)+1)*x)

sol_1:=dsolve(ode);

y(x) = exp(-(1/4)*x^4)/(x^(-2*ln(x)/(ln(x)+1))*exp(-(1/4)*(x^4*ln(x)+x^4+4*ln(ln(x)+1)*ln(x)-8*ln(x)^2+4*ln(ln(x)+1))/(ln(x)+1))*ln(x)^2+2*x^(-2*ln(x)/(ln(x)+1))*exp(-(1/4)*(x^4*ln(x)+x^4+4*ln(ln(x)+1)*ln(x)-8*ln(x)^2+4*ln(ln(x)+1))/(ln(x)+1))*ln(x)+x^(-2*ln(x)/(ln(x)+1))*exp(-(1/4)*(x^4*ln(x)+x^4+4*ln(ln(x)+1)*ln(x)-8*ln(x)^2+4*ln(ln(x)+1))/(ln(x)+1))+ln(x)*c__1+c__1)

odetest(sol_1,ode)

0

sol_2:=simplify(sol_1);

y(x) = 1/((ln(x)+1)*(exp((1/4)*x^4)*c__1+1))

odetest(sol_2,ode);

c__1*x^(ln(x)/(ln(x)+1)+3/(ln(x)+1))*exp(2*ln(x)^2/(ln(x)+1)+(1/4)*x^4)/((ln(x)+1)*(exp((1/4)*x^4)*c__1+1)^2)-c__1*x^3*exp((1/4)*x^4)/((ln(x)+1)*(exp((1/4)*x^4)*c__1+1)^2)

 

 

Download why_simplify_changes_things_at_dec_27_2025.mw

Notice how much simpler the solution becomes after calling simplify. I'd like to use that. But for some reason, odetest now fails to verify the simpler version. Which tells me simplify did something which made the solution not valid.

Here is second example, where calling simplify in betwen did not give zero as expected.

restart:

f := sqrt(1 + sin(x)^2);
F := int(f, x):
df := diff(F, x):
simplify(df - f);

(1+sin(x)^2)^(1/2)

0

restart;

f := sqrt(1 + sin(x)^2);
F := int(f, x):
F := simplify(F):
df := diff(F, x):
simplify(df - f);

(1+sin(x)^2)^(1/2)

-csgn(1, cos(x))*sin(x)*EllipticE(sin(x), I)

 

 

Download why_simplify_changes_things_at_dec_27_2025_V2.mw

Just trying to understand why this happens and if this is something that could happen sometimes? May be one should avoid calling simplify in middle of computation and let the user decide if they want to simplify the final result or not?

3 4 5 6 7 8 9 Last Page 5 of 19