Maple 2023 Questions and Posts

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

Hi all,

I'm new to this software, I've started using it to build myself a spacemouse, and figuring out the "inverse kinematics" involved in its working. I've done a little research on how Maple works, I'm fortunate enough to have a student license, but maybe this problem is above my capacity.

Essentially, I want to control a 6-DOF platform by measuring six distances (with magnetic sensors, but that's not relevant, I believe), from three points forming an equiliateral triangle on the top platform, to six points on the bottom platform. So far I've been able to calculate the effect that each of the degrees of freedom has on the platform and on each of this distances that I want to measure.

But that's where the problem lies. Now I have a system of six equations with six variables and a few parameters, a system that's heavily nonlinear, involving a lot of trig functions and multiplications between them. I've tried to "brute force" a symbolic solution by simply typing in: solve(equations, variables) (note that both equations and variables were properly defined) but Maple just ran for a couple of hours without providing an answer. I don't know if this particular application reaches this software's limits, or if it's me who is doing something wrong.
I'll try to provide the maple Worksheet, I'm still not familiar with this site's formatting, sorry in advance:

L := Matrix(3, 3, [[cos(theta)*cos(psi), cos(theta)*sin(psi), -sin(theta)], [sin(phi)*sin(theta)*cos(psi) - cos(phi)*sin(psi), sin(phi)*sin(theta)*sin(psi) + cos(phi)*cos(psi), sin(phi)*cos(theta)], [cos(phi)*sin(theta)*cos(psi) + sin(psi)*sin(phi), cos(phi)*sin(theta)*sin(psi) - sin(phi)*cos(psi), cos(phi)*cos(theta)]]);
T := Matrix(3, 3, [[1, psi, -theta], [phi*theta - psi, phi*psi*theta + 1, phi], [phi*psi + theta, psi*theta - phi, 1]]);
p[ni] := Typesetting[delayDotProduct](R, Vector[column](3, [cos(theta[n]), -sin(theta[n]), 0]), true)

p__n := (T . (p[ni])) + Vector[column](3, [u, v, w])

m[m] := R*Vector[column](3, [cos(phi__m), -sin(phi__m), h/R])

`Δp` := p__n - m[m]


s[n] := sqrt(`Δp` . `Δp`)

theta[1] := -Pi/12;
theta[2] := Pi/12;
theta[3] := (2*Pi)/3 - Pi/12;
theta[4] := Pi/12 + (2*Pi)/3;
theta[5] := (4*Pi)/3 - Pi/12;
theta[6] := (4*Pi)/3 + Pi/12;

phi[1] := 0;
phi[2] := (2*Pi)/3;
phi[3] := (4*Pi)/3;

s[1] := eval(s[n], {phi__m = phi[1], theta[n] = theta[1]})

s[2] := eval(s[n], {phi__m = phi[1], theta[n] = theta[2]})

s[3] := eval(s[n], {phi__m = phi[2], theta[n] = theta[3]})

s[4] := eval(s[n], {phi__m = phi[2], theta[n] = theta[4]})

s[5] := eval(s[n], {phi__m = phi[3], theta[n] = theta[5]})

s[6] := eval(s[n], {phi__m = phi[3], theta[n] = theta[6]})


equations := [-d[1]^2 + s[1]^2 = 0, -d[2]^2 + s[2]^2 = 0, -d[3]^2 + s[3]^2 = 0, -d[4]^2 + s[4]^2 = 0, -d[5]^2 + s[5]^2 = 0, -d[6]^2 + s[6]^2 = 0]

variables := [u, v, w, psi, theta, phi]

solve(equations, variables)


So far this is what I've got, thanks in advance for the help.

EDIT: In the beginning of the worksheet two rotation matrices are declared, L and T. T is a "linearized" version of L, assuming small angles, and I'm using it to simplify the expressions. Still there is no luck.

Hello. I am trying to create a procedure that calculates the properties of a triangle (such as the sides, angles, area, and centroid) and then plots it. However, when I try to run my code, I keep getting the error:

Runtime error: Error, (in triangle) illegal use of a formal parameter

Here is the code I am using:

triangle := proc({a::numeric := 0, b::numeric := 0, c::numeric := 0, AngleA::numeric := 0, AngleB::numeric := 0, AngleC::numeric := 0})
    local A, B, C, T, Tr, DegreeA, DegreeB, DegreeC, TA, TB, TC, Area, Centroid, AreaLabel, deg, rad;
    uses geometry, plots;

    # Function to convert degrees to radians
    rad := proc(deg) evalf(deg * Pi / 180) end proc;

    # Function to convert radians to degrees
    deg := proc(rad) evalf(rad * 180 / Pi) end proc;

    # Temporary variables for calculations
    local a_calc, b_calc, c_calc, AngleA_calc, AngleB_calc, AngleC_calc;

    a_calc := a;
    b_calc := b;
    c_calc := c;
    AngleA_calc := AngleA;
    AngleB_calc := AngleB;
    AngleC_calc := AngleC;

    # Calculate missing sides or angles
    if a_calc = 0 then
        if AngleA_calc <> 0 and AngleB_calc <> 0 then
            a_calc := b_calc * sin(rad(AngleA_calc)) / sin(rad(AngleB_calc));
        elif AngleA_calc <> 0 and AngleC_calc <> 0 then
            a_calc := c_calc * sin(rad(AngleA_calc)) / sin(rad(AngleC_calc));
        end if;
    elif b_calc = 0 then
        if AngleB_calc <> 0 and AngleA_calc <> 0 then
            b_calc := a_calc * sin(rad(AngleB_calc)) / sin(rad(AngleA_calc));
        elif AngleB_calc <> 0 and AngleC_calc <> 0 then
            b_calc := c_calc * sin(rad(AngleB_calc)) / sin(rad(AngleC_calc));
        end if;
    elif c_calc = 0 then
        if AngleC_calc <> 0 and AngleA_calc <> 0 then
            c_calc := a_calc * sin(rad(AngleC_calc)) / sin(rad(AngleA_calc));
        elif AngleC_calc <> 0 and AngleB_calc <> 0 then
            c_calc := b_calc * sin(rad(AngleC_calc)) / sin(rad(AngleB_calc));
        end if;
    end if;

    if AngleA_calc = 0 then
        AngleA_calc := deg(arccos((b_calc^2 + c_calc^2 - a_calc^2) / (2 * b_calc * c_calc)));
    end if;
    if AngleB_calc = 0 then
        AngleB_calc := deg(arccos((a_calc^2 + c_calc^2 - b_calc^2) / (2 * a_calc * c_calc)));
    end if;
    if AngleC_calc = 0 then
        AngleC_calc := 180 - AngleA_calc - AngleB_calc;
    end if;

    # Convert angles to radians for calculation
    AngleA := rad(AngleA_calc);
    AngleB := rad(AngleB_calc);
    AngleC := rad(AngleC_calc);

    # Define points A, B, and C
    geometry:-point(A, 0, 0);
    geometry:-point(B, c_calc, 0);
    geometry:-point(C, b_calc * cos(AngleA), b_calc * sin(AngleA));

    # Calculate the area using Heron's formula
    s := (a_calc + b_calc + c_calc) / 2;
    Area := sqrt(s * (s - a_calc) * (s - b_calc) * (s - c_calc));
    Area := evalf(Area, 4);

    # Calculate the centroid of the triangle
    Centroid := [(0 + c_calc + b_calc * cos(AngleA)) / 3, (0 + 0 + b_calc * sin(AngleA)) / 3];

    # Text plot for side labels
    T := plots:-textplot([[1/2 * c_calc, 0, cat("c = ", c_calc), align = below], 
                          [1/2 * c_calc + 1/2 * b_calc * cos(AngleA) + 1/30 * a_calc, 1/2 * b_calc * sin(AngleA), cat("a = ", a_calc), align = right], 
                          [1/2 * b_calc * cos(AngleA) - 1/30 * a_calc, 1/2 * b_calc * sin(AngleA), cat("b = ", b_calc), align = left]]);

    # Text plot for angle labels with valid alignment options
    TA := plots:-textplot([0, 0, cat(evalf(deg(AngleA)), "°"), align = right]);
    TB := plots:-textplot([c_calc, 0, cat(evalf(deg(AngleB)), "°"), align = left]);
    TC := plots:-textplot([b_calc * cos(AngleA), b_calc * sin(AngleA), cat(evalf(deg(AngleC)), "°"), align = above]);

    # Text plot for the area of the triangle
    AreaLabel := plots:-textplot([Centroid[1], Centroid[2], cat("Area= ", Area), align = above]);

    # Display the triangle with labels
    plots:-display([geometry:-draw([geometry:-triangle(Tr, [A, B, C])], 
                      font = [times, roman, 18], labels = [x, y], axes = none, printtext = true), T, TA, TB, TC, AreaLabel]);
end proc:

What am I doing wrong, and how can I fix this error? Thanks! 

When executing the attached work sheet, the output

changes to

Why is that (local seetings maybe?) and how to reproduce the former, more compact output?

Copy-pasted from the wonderful:

Advanced Engineering Mathematics

Dr. Robert J. Lopez

Emeritus Professor of Mathematics

Maple Fellow

© Maplesoft, a division of Waterloo Maple Inc., 2023

This is obtained in Maple by writing the differential equation


q := diff(x(t),t) = k*(40 - 16/18*x(t))*(8 - 2/18*x(t));

diff(x(t), t) = k*(40-(8/9)*x(t))*(8-(1/9)*x(t))



and solving via the syntax


X := simplify(rhs(dsolve({q,x(0)=0},x(t))));




The differential equation is actually separable, and can be solved with the techniques of elementary calculus discussed in Section 3.1.


If an observation provides the data that at time t = 1 there were 6 grams of water, then the constant of proportionality k can be computed.  In Maple, the data point gives the equation


eq := eval(X, t=1) = 6;

(-360+360*exp((8/3)*k))/(8*exp((8/3)*k)-5) = 6



whose solution is


K := solve(eq,k);






do you have an idea how could be filtered several values from dataframe? 
I have a dataframe called "TestData". I need to select rows from data frame which are equal to the list called "SelectionList". 

Thank you for a comment. 

Data:=<"LC1", "LC2", "LC3", "LC4", "LC5", "LC6", "LC7", "LC8", "LC9", "LC10", "LC11", "LC12", "LC13", "LC14", "LC15", "LC16", "LC17", "LC18", "LC19", "LC20">;


SelectionList:={"LC3", "LC4", "LC5", "LC6", "LC7", "LC8", "LC9"};

As Maple is not equipped to handle numerical solutions of elliptic PDEs, can anyone help top solve PDEs by finite differences or any other numerical solver?

I have two surfaces crossing the z=0 plane for some ranges of x and y values.

For the first surface, x=Gamma is bounded between 0 and 10 and y=rho between -1 and +1. For the second surface, x=Gamma_1 is bounded between 0 and 10 and y=Gamma_2 between 0 and 10 as well. I want to clearly identify (parametric):

  1. For which Gamma and rho ranges of values the first surface is positive (and for which negative)
  2. For which Gamma_1 and Gamma_2 ranges of values the second surface is positive (and for which negative)

Worksheet: (highlighted in yellow my two failed attempts)

how to solve this using integration by parts?





int(1-(sum(p[i]*(1-exp(-(t-xi)/tau[i])), i = 1 .. n)), xi = 0 .. t)


i have weibull plot...and i want to get size and shpae can i get ...parameters .i don't know how to perform linear regression to get these parameters in maple..please help

I am using fsolve() to solve a highly nonlinear system of 6 equations in 6 variables: lambda_d1, lambda_i1, lambda_d2, lambda_i2, lambda_d3, lambda_i3.

fsolve() doesn't "solve"! I usually help fsolve() with some initial conditions and with the expected signs of the solution but in this case it's not enough. I noticed that if I comment out the expected signs line (that is, if I don't impose my 6 lambdas to be strictly positive), the fsolve() works.
How do I help fsolve() to pin down only positive solutions at each iteration? I have no reasons to believe that there aren't any positive solutions for all 6 lambdas...


thank you.

what is the mathematics behind isolve? How can one selct special solutions?

Dear Colleague. 

I am trying to improve the results of abs(res[i] - exy) in the following codes.

Digits := 30:

# Define the function
f := proc(n)
    -0.5*y[n] + 0.5*sin(x[n] - Pi)
end proc:

# Define equations
e1 := y[n+2] = 2*h*delta[n] + y[n] - h^2*(-2*sin(u)*f(n)*u^2 - 2*sin(u)*f(n+2)*u^2 + 2*sin(2*u)*f(n+1)*u^2 + 2*cos(u)*f(n)*u - 2*cos(u)*f(n+2)*u + 2*cos(2*u)*f(n+1)*u - 2*cos(2*u)*f(n)*u - 2*sin(u)*f(n) + 2*sin(u)*f(n+2) + sin(2*u)*f(n) - sin(2*u)*f(n+2) - 2*f(n+1)*u + 2*f(n+2)*u)/((2*sin(u) - sin(2*u))*u^2):
e2 := y[n+1] = h*delta[n] + y[n] - (1/2)*h^2*(-sin(u)*f(n)*u^2 - sin(u)*f(n+2)*u^2 + sin(2*u)*f(n+1)*u^2 + 2*cos(u)*f(n)*u - 2*cos(u)*f(n+2)*u + 2*cos(2*u)*f(n+1)*u - 2*cos(2*u)*f(n)*u + 4*sin(u)*f(n+1) - 4*sin(u)*f(n) - 2*sin(2*u)*f(n+1) + 2*sin(2*u)*f(n) - 2*f(n+1)*u + 2*f(n+2)*u)/((2*sin(u) - sin(2*u))*u^2):
e3 := h*delta[n+2] = h*delta[n] + h^2*(2*sin(u)*f(n)*u + 2*sin(u)*f(n+2)*u - 2*sin(2*u)*f(n+1)*u - 2*cos(2*u)*f(n+1) + cos(2*u)*f(n) + cos(2*u)*f(n+2) + 2*f(n+1) - f(n) - f(n+2))/(u*(2*sin(u) - sin(2*u))):

epsilon := 10^(-10):
inx := 0:
ind := 1:
iny := 0:
h := 0.01:
n := 0:
omega := 1:
u := omega * h:
tol := 1e-4:
N := solve(h * p = 8 * Pi, p):

err := Vector(round(N)):
exy_lst := Vector(round(N)):

c := 1:
for j from 0 to 2 do
    t[j] := inx + j * h:
end do:

vars := y[n+1], y[n+2], delta[n+2]:

step := [seq(eval(x, x = c * h), c = 1 .. N)]:
printf("%6s%15s%15s%16s%15s%15s%15s\n", "h", "Num.y", "Num.z", "Ex.y", "Ex.z", "Error y", "Error z");

st := time():
for k from 1 to N / 2 do
    par1 := x[0] = t[0], x[1] = t[1], x[2] = t[2]:
    par2 := y[n] = iny, delta[n] = ind:    
    res := eval(<vars>, fsolve(eval({e1, e2, e3}, [par1, par2]), {vars}));

    for i from 1 to 2 do
        exy := eval(sin(c * h)):
        exz := eval(cos(c * h)):
        printf("%6.5f%17.9f%15.9f%15.9f%15.9f%13.5g%15.5g\n", h * c, res[i], res[i+1], exy, exz, abs(res[i] - exy), abs(res[i+1] - exz));
        err[c] := abs(evalf(res[i] - exy));
        if Norm(err) <= tol then 
            h := 0.1 * h * (c + 1) * (tol/Norm(err))^(0.2);
        end if;
        exy_lst[c] := exy;
        numerical_y1[c] := res[i];
        c := c + 1;
    end do;
    iny := res[2];
    ind := res[3];
    inx := t[2];
    for j from 0 to 2 do
        t[j] := inx + j * h;
    end do;
end do:
v := time() - st;
v / 4;
printf("Maximum error is %.13g\n", max(err));
NFE = evalf((N / 4 * 3) + 1);

# Get array of numerical and exact solutions for y1
numerical_array_y1 := [seq(numerical_y1[i], i = 1 .. N)]:
exact_array_y1 := [seq(exy_lst[i], i = 1 .. N)]:

# Get array of time steps
time_t := [seq(step[i], i = 1 .. N)]:

# Display graphs for y1
numerical_plot_y1 := plot(time_t, numerical_array_y1, style = point, symbol = asterisk, color = blue, symbolsize = 20, legend = ["TFIBF"]);
exact_plot_y1 := plot(time_t, exact_array_y1, style = point, symbol = box, color = red, symbolsize = 20, legend = ["EXACT"]);

display({numerical_plot_y1, exact_plot_y1});
Error_plot_y1 := plot(time_t, err, style = line, symbol = box, tickmarks = [piticks, decimalticks], color = navy, labels = [`h=Pi/8`, typeset(`Absolute Errors`)]);

I am suspecting that I didnt update the new h properly (I may be wrong, though). Please kindly help modify the code to allow the values of abs(res[i] - exy) to about 10^(-11). Thank you and best regards.

See attached worksheet in Maple 2023.

This example is taken from the Maple help page. I want to 'zoom in' on a plot3d object. The only way I have found was from responses [1] on the maple primes forum. It uses InlinePlot and the scale option to perform the 'zoom in'. Since InlinePlot generates the plot in terms of XML there is no graphic out, only a text based output. In order to reconstitute the InlinePlot as a plot object I can view visually I need to use some additional commands from the DocumentTool package. This is all great but the output, which in our case is P3, is not a plot object and therefore cannot be exported as a png. Is there a way to convert the InlinePlot with the scaling applied back to a typical plot object so I can export it as a .png, using Export("output_plot.png",P3,base=worksheetdir)?


Can I export a Table as an image like .png, where Table is defined (with DocumentTools)? See Maple worksheet for example.

Why would anyone want to do this? It all started because I wanted to include a color bar(with a specific color range) in my 3dplot. There is no native way to do this with plot3d so I searched Maple Primes for alternative strategies. One strategy is to generate the 3d plot and the color bar(with plot3d) seperately, then combine the plots in a table so they sit side by side, using with(DocumentTools). I have been almost successful with this strategy. There remain two outstanding problems. 1. I can't re-size the table cells since there are no such options with(DocumentTools). The color bar should have a smaller cell because the figure itself is tall and thin. 2. I need to export this combined object as an image(.png) but its a table with plot objects inside, and not itself a plot object and therefore one can't simply export it as a .png like one would a typical plot object. Is there a way to export this table as a png? I am beginning to think that my idea of combining  plots with document tools and attempting the export the resulting table is not feasible. How does a normal person add a custom-color-range color bar to their plot? I'm not trying to move the earth here but it certainly feels like it.

Hello Maple community

I am trying to solve a system of equations, which is a little complicated.

eq1 := w = sqrt(a^2 - (a - y)^2);
eq2 := v + cot(t + arcsin(w/a)) = 0;
eq3 := u = (sqrt(c^2 - (c - z)^2) - v*x - w)/x^2;
eq4 := x = y + z + e;
eq5 := v + cot(T + arcsin((u*x^2 + v*x + w)/c)) + 2*u*x = 0;
eq6 := f = Pi/30*(6*u^2*x^5 + 15*u*v*x^4 + (20*u*w + 10*v^2)*x^3 + 30*v*w*x^2 + 30*x*w^2) - Pi/3*(-z^3 + 3*z^2*c - y^3 + 3*y^2*a);
sols := solve({eq1, eq2, eq3, eq4, eq5, eq6}, {u, v, w, x, y, z});

I tried solving it, but it is running for more than two hours now. I know that the system is very complicated, and Maple will take long to solve this. But my question is

1. Is it reasonable to take this long for this system of equations?

2. Can I speed it up in any way by using additional cores of my system or something? Can someone please tell me how I can achieve this?

Looking forward to any inputs the Community may have.

How do I programmatically control the zoom of a 3d plot ?
SEE THE ATTACHED MAPLESHEET. In the attached code, the 'zoom out' on the blue cylinder is not conserved when I saved the maplesheet but it doesn't change the essential question which is how does one control the zoom programmatically. If you yourself adjust the zoom of the blue cylinder and the run tabulate(), you will see how it resets the plots settings to some default set of values.






Plot two cylinders with plottools and plot3d. Zoom out on the blue cylinder a little.

c1 := display(cylinder([1, 1, 1], 1, 3), orientation = [45, 70], scaling = constrained, color = red, size = [300, 300])


c2 := display(cylinder([1, 1, 1], 1, 3), orientation = [45, 70], scaling = constrained, color = blue, size = [300, 300])


Use tablate to embed the 3d plots in a visual array, for reasons not discussed here.


DocumentTools:-Tabulate([c1, c2], exterior = none, interior = none)



Notice how the use of tabulate( ), changes the zoom of the individual plots to some default. There are two questions: 1. How do I programmatically control the zoom of a 3d plot with display( )? I don't want to have to click buttons with the mouse to arrive at my ideal zoom level. 2. How do I programmatically control the zoom of a 3d plot when using Tabulate( ) which envokes the default plot settings?  

Below is a screenshot of the zoom buttons I want to control programmatically.


1. Plot two cylinders with plottools and plot3d. Zoom out on the blue cylinder a little.
2. Use tablate to embed the 3d plots in a visual array, for reasons not discussed here.

3. Notice how the use of tabulate( ), changes the zoom of the individual plots to some default. There are two questions: 1. How do I programmatically control the zoom of a 3d plot with display( )? I don't want to have to click buttons with the mouse to arrive at my ideal zoom level. 2. How do I programmatically control the zoom of a 3d plot when using Tabulate( ) which envokes the default plot settings

Below is a screenshot of the zoom buttons I want to control programmatically.

1 2 3 4 5 6 7 Last Page 1 of 28