MaplePrimes Questions

I am starting a new project and I anticipate creating dozens of files along the way. Each file will need the same collection of definitions, procedures, etc. and I would prefer not to have to copy and pace them as a preamble each time I open anew file. I guess I could write some startup code but would that mean every time I open an unrelated Maple file the Startup code would be laoded? I will be using Maple for other things besides this project. Also, while the stratup code would be hidden most of the time I would perhaps like to be able to see what the n1 procedure is; n1(x) would invoke the procedure-I just want to see waht it does. I usually endup up labeling my files in some lazy way so if I want to go back and find something it takes for ever. Any suggestions for improving that?

Thanks,

There seems to be a bug in the round function when using units.

a := 6.25*Unit('mm')``

6.25*Units:-Unit(mm)

(1)

round(a)

6*Units:-Unit(mm)

(2)

b := 1.25

1.25

(3)

round(b)

1

(4)

c := 1.25*Unit('mm')

1.25*Units:-Unit(mm)

(5)

round(c)

Units:-Unit(mm)

(6)

NULL

Download round.mw

I am finding many problems using overload in OOP.

But for starter, here is a basic one that does not use Object. Will make separate question for other issues once I figure this basic one out.

I have overload with two procs.

First proc takes 2 arguments of type string, and the second proc one argument also of type string.

When calling the overloaded proc with one argument or two arguments, it always calls the first one which takes 2 arguments.

It never calls the second, even though the call is using one argument only. It always matchs the first proc.

It seems Maple just checks if the first argument match and stops.

I also made sure to use $ for end of arguments flag.

Now when changing the order and putting as the first proc the one that take one argument and the second proc which takes two arguments, now it works. Maple calls the correct proc based on the number of arguments.

How could this be possible? Is order of procs in overload important?? How does one then figure the correct order. It should be based on match of signature of proc, not the order. i.e. match made based on number and type of arguments. 

Is there a way to make the first one work as is without having to worry about order? Or Am I making mistake somewhere?

restart;

interface(version);

`Standard Worksheet Interface, Maple 2025.1, Linux, June 12 2025 Build ID 1932578`

restart;

set_name :=overload(
        [     
            proc(first_name::string,last_name::string,$) option overload;
                print("in proc which takes two arguments");
            end,
       
            proc(the_name::string,$) option overload;
                 print("in proc which takes one argument");
            end          
        ]
    ):

set_name("me"); #why this call the first proc and not the second?

"in proc which takes two arguments"

set_name("me","joe");

"in proc which takes two arguments"

restart;

#change order of procs in list
set_name :=overload(
        [            
            proc(the_name::string,$) option overload;
                 print("in proc which takes one argument");
            end,      

            proc(first_name::string,last_name::string,$) option overload;
                print("in proc which takes two arguments");
            end       
        ]
    ):

set_name("me");

"in proc which takes one argument"

set_name("me","joe");

"in proc which takes two arguments"

 

 

Download why_order_makes_differenence_in_overload_nov_1_2025.mw

For instance, I would like to represent “3^(1/3)” and “4^(1/4)” respectively as elements of the field generated by “3^(1/3) + 2^(1/2) + 1^(1/1)”. 
I think the Algebraic package and the evala procedure should already offer a direct command, but I couldn't find it. The following results are computed by SymPy's `to_number_field` function: 

-48/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^5 + 
 213/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^4 - 
 52/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^3 - 
 174/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^2 - 
 232/755*(3^(1/3) + 2^(1/2) + 1^(1/1)) + 
 277/151: # originally computed by SymPy's `to_number_field`
is(3^(1/3) = %);
                              true

48/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^5 - 
 213/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^4 + 
 52/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^3 + 
 174/755*(3^(1/3) + 2^(1/2) + 1^(1/1))^2 + 
 987/755*(3^(1/3) + 2^(1/2) + 1^(1/1)) - 
 428/151: # originally computed by SymPy's `to_number_field`
is(4^(1/4) = %);
                              true

Does there exist a direct command in Maple to find the above representations? 

I have this code. In the latex file, I get The vertical asymptote of the graph is $x = -{\dfrac{1}{4}}$. How can I get $x = -\dfrac{1}{4}$.

restart;
with(StringTools);
do_my_list := proc() 
    local toX, my_format; 
    toX := e -> latex(e, 'output' = 'string'); 
    my_format := proc(e)::string; 
        local s::string; 
        s := toX(e); 
        s := SubstituteAll(s, "*", " "); 
        s := StringTools:-SubstituteAll(s, "\\frac", "\\dfrac"); 
        s := StringTools:-SubstituteAll(s, "\\sqrt", "\\sqrt{\\,}"); 
        return s; 
    end proc; 
    return my_format; 
end proc;

L := [(x^2 + 3*x - 7)/(3*x - 2), (x^2 - 4*x + 1)/(4*x + 1)];
fmt := do_my_list();

RR := cat(
"\n\\documentclass[12pt,a4paper]{article}",
"\n\\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}",
"\n\\usepackage[utf8]{vietnam}",
"\n\\usepackage{amsmath}",
"\n\\usepackage{amsthm}",
"\n\\usepackage{enumitem}",
"\n\\theoremstyle{definition}",
"\n\\newtheorem{ex}{Example}",
"\n\\begin{document}\n\n"
);

for i to nops(L) do
    f := L[i];
    TV := solve(denom(f) = 0, x);
    q := simplify(quo(numer(f), denom(f), x));
    TX := q;
    f_ltx := fmt(f);
    TX_ltx := fmt(TX);
    TV_ltx := fmt(TV);
    RR := cat(
        RR,
        sprintf("\\begin{ex} Let be given a function $\\displaystyle y = %s$. We have:\n", f_ltx),
        "\\begin{enumerate}[label=\\arabic*)]\n",
        sprintf("\\item The vertical asymptote of the graph is $x = %s$.\n", TV_ltx),
        sprintf("\\item The oblique (or slant) asymptote of the graph is $y = %s$.\n", TX_ltx),
        "\\end{enumerate}\n\\end{ex}\n\n"
    );
end do;

RR := cat(RR, "\\end{document}");

fout := fopen("baitap_tiemcan.tex", WRITE);
fprintf(fout, "%s", RR);
fclose(fout);
print("Đã tạo file: baitap_tiemcan.tex");
 

How can I use an if statement inside a do - loop in maple and then plot a figure based on the conditional results? I need help with the correct syntax for combining the do-loop, `if` condition, and plotting command.

Sheet attached below:
Algorithmm.mw

Hi,
I want to have a colorbar aside the curve, but I can't. (My Maple version is 2018).

restart:
with(plots):

# --- constants ---
qc := 0.4:
qh := 0.64:
alpha := 0.8:

# --- parameter ranges ---
deltac_min := 0.01: deltac_max := 0.99:
Tch_min := 0.1:     Tch_max := 1.1:

# --- numerical safety ---
epsDen := 1e-12:
Mcap := 3.0: # cap to avoid infinity

# --- denominator ---
Den := (deltac, Tch) ->
       -2*Tch*deltac*qh - 2*Tch*deltac + 2*Tch*qh
       + 2*deltac*qc + 2*Tch + 2*deltac:

# --- safe functions ---
M1safe := (deltac, Tch) ->
    piecewise(Den(deltac,Tch) > epsDen,
              min(2/sqrt(Den(deltac,Tch)), Mcap),
              Mcap):

M0safe := (deltac, Tch) ->
    piecewise(Den(deltac,Tch) > epsDen,
              min(2*alpha/sqrt(Den(deltac,Tch)), Mcap),
              Mcap):

# --- density plots ---
p1 := densityplot(
       M1safe(deltac,Tch),
       deltac = deltac_min .. deltac_max,
       Tch   = Tch_min .. Tch_max,
       grid  = [200,200],
       style = patchnogrid,
       colorstyle = HUE,
       axes = boxed,
       labels = ["δ_c", "T_ch"],
       title = sprintf("M1(δ_c, T_ch)  (capped at %.2f)", Mcap)
     ):

p2 := densityplot(
       M0safe(deltac,Tch),
       deltac = deltac_min .. deltac_max,
       Tch   = Tch_min .. Tch_max,
       grid  = [200,200],
       style = patchnogrid,
       colorstyle = HUE,
       axes = boxed,
       labels = ["δ_c", "T_ch"],
       title = sprintf("M0(δ_c, T_ch)  (capped at %.2f)", Mcap)
     ):

# --- Contour Den = 0 (to mark physical boundary) ---
cont := contourplot(
          Den(deltac,Tch),
          deltac = deltac_min .. deltac_max,
          Tch   = Tch_min .. Tch_max,
          contours = [0],
          color = black,
          thickness = 2
        ):

# --- Overlay contour ---
p1_final := display(p1, cont):
p2_final := display(p2, cont):

# --- Display side by side ---
display(array([p1_final, p2_final]), scaling = constrained);

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

restart;
with(plots):

# === Constants ===
qc := 0.4:
qh := 0.64:
alpha := 0.8:

# === Denominator ===
Den := (deltac, Tch) ->
     -2*Tch*deltac*qh - 2*Tch*deltac + 2*Tch*qh
     + 2*deltac*qc + 2*Tch + 2*deltac:

# === M1 and M0 ===
M1 := (deltac, Tch) -> piecewise(Den(deltac,Tch)>0, 2/sqrt(Den(deltac,Tch)), undefined):
M0 := (deltac, Tch) -> piecewise(Den(deltac,Tch)>0, 2*alpha/sqrt(Den(deltac,Tch)), undefined):

# === Domain ===
deltac_min := 0.05:  deltac_max := 0.95:
Tch_min := 0.01:     Tch_max := 1.10:   # Physically realistic range

# === 3D Plots ===
p1 := plot3d(M1(deltac,Tch),
             deltac=deltac_min..deltac_max,
             Tch=Tch_min..Tch_max,
             grid=[80,80],
             axes=boxed,
             orientation=[-130,45],
             scaling=constrained,
             style=surfacecontour,
             color=green,
             labels=["δ_c", "T_ch", "M1"],
             labelfont=[TIMES,12],
             title="M1(δ_c, T_ch) for qc=0.4, qh=0.64"):

p2 := plot3d(M0(deltac,Tch),
             deltac=deltac_min..deltac_max,
             Tch=Tch_min..Tch_max,
             grid=[80,80],
             axes=boxed,
             orientation=[-130,45],
             scaling=constrained,
             style=surfacecontour,
             color=blue,
             labels=["δ_c", "T_ch", "M0"],
             labelfont=[TIMES,12],
             title="M0(δ_c, T_ch) for α=0.8, qc=0.4, qh=0.64"):

# === Display vertically (M1 above M0) ===
display(Array(1..2, [p1, p2]), insequence=true, scaling=constrained);
display(Array([[p1], [p2]]));

I am using S := sort([sqrt(x2), sqrt(y2), sqrt(z2)]);

restart;
n := 0:
L := []:

for a from 3 to 100 do
    for b from 3 to a do
        c2 := a^2 - a*b + b^2;
        c := isqrt(c2);
        if c^2 = c2 then
            if c < a + b and a < b + c and b < c + a then
                if igcd(a, b, c) = 1 then
                    x2 := (-a^2 + b^2 + c^2)/2;
                    y2 := (a^2 - b^2 + c^2)/2;
                    z2 := (a^2 + b^2 - c^2)/2;
                    if 0 < x2 and 0 < y2 and 0 < z2 then
                        S := sort([sqrt(x2), sqrt(y2), sqrt(z2)]);
                        x := S[1]; 
                        y := S[2]; 
                        z := S[3];
                        n := n + 1;
                        L := [op(L), [x, y, z, sqrt(x^2 + y^2), sqrt(y^2 + z^2), sqrt(x^2 + z^2)]];
                    end if;
                end if;
            end if;
        end if;
    end do;
end do;

n;
L;
 

But I get the result. How can I get the correct result of sort? 

After Maple 2025 start-up (with disabled start-up page) and closing the blank worksheet (note the dark grey workspace) there is still one mserver running (highlighted in yellow).

I have not seen a difference when I kill this process and open a new worksheet which starts a new mserver.exe task (and run Maple code).

The task seems to be inactive (no processor load and memory allocation visible).

Is it a task only used by the interface task (javaw.exe)?
What might be the purpose of this mserver.exe? 

 

Update: The task is inactive in a sense that it does not show immetiate activity when annother mserver.exe task runs (i.e. exceuting a worksheet). However, after a day memory allocation shows changes. When exactly these changes happend is unclear.

Has anyone had any success in turning off the scrollable matrix feature on Mac? I found the post

 https://www.mapleprimes.com/questions/238061-How-To-Disable-The-New-Scrollable-Matrices

and tried to follow the steps outlined by Acer, but I cannot get it to work. Specifically, I greated a preference file at the location:

 //Users/$USER/Library/Preferences/Maple/<version>/Maple preferences which has the statement 

ScrollableMathTableOutput=false

Any success stories, or tips, will be greatly appreciated. 

Thanks. 

I want to ask a question, but I cannot submit it using the link below. I tried several times, but it didn’t work. I wrote it like this, but I didn’t get the desired answer.

http://www.mapleprimes.com/questions/231499-Changing-The-Variables-

NULL

restart:
with(PDEtools):
tr1:={x=xi- lambda*t - delta,u(x,t)=Theta(xi) };


PDE := diff(u(x,t),t) + diff(u(x,t),x) + alpha*u(x,t)^2*diff(u(x,t),x)
      + beta*diff(u(x,t), t, x$2);

ode := dchange(tr1,PDE,[xi,Theta(xi)]);

{x = -lambda*t-delta+xi, u(x, t) = Theta(xi)}

 

diff(u(x, t), t)+diff(u(x, t), x)+alpha*u(x, t)^2*(diff(u(x, t), x))+beta*(diff(diff(diff(u(x, t), t), x), x))

 

diff(Theta(xi), xi)+alpha*Theta(xi)^2*(diff(Theta(xi), xi))

(1)

NULL NULL

Download 963.mw

Hi,

I want to solve the equation shown in the image, along with its given conditions, using Maple and obtain the same results as in the image, but it does not work. Could you please help me?

NULL

restart:
interface(showassumed = 0):


df := diff(w(xi), xi) = rho + eta*w(xi)^2:

 

# Condition (1): rho * eta>0,
assume(rho * eta>0);

w1 := dsolve([df, w(0)=0]);

w(xi) = tan(xi*(rho*eta)^(1/2))*(rho*eta)^(1/2)/eta

(1)
 

 

Download 852.mw

Although several similar problems were asked many years ago (see, e.g., the section “Formal linear algebra” here), there appears to be no new progress so far. It is said that such functionalities exists in the Physics package, but I cannot find any corresponding examples. 
In short, can Maple at present calculate these examples in terms of symbolic array constructs completely automatically?

residue(z^3*cos(1/(z - 2)), z = 2);

                  3       1
         residue(z  cos(-----), z = 2)
                        z - 2

l notice the help document  asks me to increse the n,but the n of essential singularity is infinity

4 5 6 7 8 9 10 Last Page 6 of 2443