Maple 2020 Questions and Posts

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

Hello there, 

Would you please tell me how to make the expression 'eq9_13_m3' into 'desired' by substituting part of 'eq9_13_m3' with 'aux2' expression?



eq9_13_m3 := 2*R__R*s*omega__s*L__sigma_S/(s^2*L__sigma_S^2*omega__s^2 + R__R^2);



aux2 := s_hat = R__R/(L__sigma_S*omega__s*s);

s_hat = R__R/(omega__s*L__sigma_S*s)


desired := 2*(s/s_hat) / (1+(s/s_hat)^2);




Merry Christmas!








I'm trying to get it to find that c(k)=x^2 starting with x^k*2, but it divides by x^2 instead of x^k.  What am I doing wrong?

This is an issue I had for long time. Though to ask about it.

Any one who used Database[SQLite] in Maple probably know this.  I'd like to do kernelopts('assertlevel'=2): but this does not work when using Database[SQLite] as it raises assertion failed, due to the way data is read from database and converted to Maple variable.

It happens at the statement 

         variable_to_read := Database[SQLite]:-FetchAll(stmt); 

For an example, the table I have in sql, has many fields. some are strings and some are integers. Lets say I want to read field called run_it corresponding to rowid I enter. So I do this in Maple

local run_it::integer;
counter :=1;

stmt := Database[SQLite]:-Prepare(conn, cat("SELECT run_it FROM PROBLEMS WHERE rowid=",convert(counter,string),";"));    

run_it := Database[SQLite]:-FetchAll(stmt); 

The assetion error happens at the second call above. 

Error, (in dsolver_test:-MAIN_STEP) assertion failed in assignment, expected integer, got Matrix(1, 1, {(1, 1) = 1}, order = C_order, attributes = [source_rtable = (Array(1..1, {(1) = 1}, order = C_order))]) 

Once I remove kernelopts('assertlevel'=2): everything works fine with no problems at all. So I been running my program for more than a year now without the assert set.

Since I have hundreds of  such calls, and I do not think try/catch will work here, any one knows of a way to handle this, so I can turn on assertlevel to help catch any other problems some where else in the program, and still use SQLite ?

I could make an example if needed. I would need to create new database file and so on. This will take time.

Maple 2020.2

ps. Database[SQLite] works very well and very fast. I am surprised how fast it reads the data. few thousands records, each is 25 fields, and it does it in few seconds. Good implementation.


I found that by removing all the type specification on my Maple variables, that I read the SQL data into using FetchAll(stmt);  it now works!

So I am able to now use kernelopts('assertlevel'=2):

So intead of doing  

local local run_it::integer;  and then call SQL, I just now do  local run_it; with no type.  I had to remove the type on many such variables I had.  Now no assertion error any more during the SQL calls.

This works for me for now. I should have done this long time ago, I just did not think about it before. I would have liked to keep the type here.

Edit: I see answer below that allows me to do this by changing assert level just for the call to SQL which is good solution.





In Maple 2020.2, and after I changed to interface(warnlevel=4); then once in a while, I now see this message 

                                  Warning, persistent store makes readlib obsolete

followed by name of the file and the line number. It always happen at calls to timelimit(the_time_limit,:-dsolve(....

It seems harmless so far, as I have not seen any side effect.


I googled and the above, and see few places where it shows up, but no clear explanation what it is and what it means. But the messages I saw at google are a little different. They look like this

               WARNING: persistent store makes one-argument readlib obsolete

While the one I get is a little different as you can see. (no one-argument in it)

I am using my own package in .mla file during running the code if this makes any difference.

Is there any place where it explains what this means and why it happens sometimes? Sorry, can't make MWE, since it seems to happen at random. But I noticed it always happens at call to dsolve when I saw it.

Maple 2020.2

Physics 884

Windows 10

I'm trying to make a table of values as a data table.  The problem is that it's making more rows than loops, I'm not able to make an empty DataFrame, and that I have to add an extra row to align the values, so I need to remove a row, and change the indexes.  Any help with making data tables work properly, would be greatly appreciated.


newt := x -> evalf(x - f(x)/D(f)(x));

f:= x -> x^6-2; # function to analyze

rt[0] := 1.5; #x0 value

n_error[0]:=1.5-newt(1.5): #error of first estimate

DF := DataFrame( <x|n_error>):# create a dataframe to store estimates, and error rates
for count from 0 to 10 do; nerror[count]:=abs(x[count]-x[count-1]);    rt[count]:=x[count-1];
x[count + 1] := newt(x[count]); DF:=Append(DF,DataSeries(<rt[count]|nerror[count]>),mode=row);    
end do:

NewtonData:=DataFrame(Remove( DF, 2, mode=row)):


I am trying to run a Groebner Basis computation below in a for loop a few times to get an average running time.

start := time[real]():
gb := Groebner[Basis](polynomials, tdeg(op(vars)), characteristic=2^29-3):
finish := time[real]() - start:

Because Maple apparently caches the result, i was wondering if there is a way to undo this caching? Or better yet, is there a built-in tool taht would do this time measurement multiple times?

This seems like a serious limitation of Maple module, unless I am missing something.

I am trying to refactor one of my module, putting some code in separate .mpl file, say B.mpl,  and then do, from the main module

   $include  "B.mpl"; 

 But Maple complain now that, since B.mpl has export in it, that I can't do that. 

But the code inside B.mpl works fine if I copy it back and paste it inside the module, in the same location where the $include  "B.mpl";  is

Here is an example. (Since I can't use $include  "B.mpl";  in worksheet, Maple does not like it, I replaced it in this example by read "B.mpl";

(btw, both the syntax  module A()   and A:=module() seem to be equivalent), the problem shows up with either form)

I also tried with ";" and witout ";" at the end of the $include , it still gives same error.



currentdir("....."); #set directory to where the folder is

module A()

read "B.mpl";

 export foo:=proc()
 end proc;
end module;

Where the file B.mpl is

export boo:=proc()
return 0;
end proc; 

How is one supposed to refactor long file to separate files if can't leave export on those proc's?  

If I put everything in one .mpl file, it works

module A()

#read "B.mpl";  

export boo:=proc()  #this proc was in B.mpl
return 0;
end proc; 

 export foo:=proc()
 end proc;
end module;

I did more testing, and found that this seems to be an issue in Maple 2020.2. Because I just tried the same thing in Maple 2019 and it worked there ! i.e. no error.

Any one knows what is going on? 

Maple 2020.2, Physics 884.   Windows 10.

Here is screen shot. Same code. Works OK in Maple 2019.2 but gives error in 2020.2





How do I integrate with Units[Standard]?

For example:




I__RMS__T := int((18*Unit('A')+9*t*Unit('s')*Unit('A')/(.9*Unit('s')))^2, t = 0.1e-1*Unit('s') .. 10*Unit('s'))

Error, (in Units:-Standard:-+) the units `1` and `s` have incompatible dimensions


I__RMS__T := int((18*Unit('A')+9*t*Unit('A')/(.9*Unit('s')))^2, t = 0.1e-1*Unit('s') .. 10*Unit('s'))

Error, (in Units:-Standard:-+) the units `A` and `A/s` have incompatible dimensions




It doesn't seem like I can around this. Is there a way to ignore the units error and just calculate the value?


What type of mathematics can perform the type of transformation seen in the uploaded worksheet?

Could it be done with the Maple plottools transform command?

Could it be a projective transformation using homogeneous coordinates?

Could it be a complex conformal transformation?

Dear all,

In some step of my program, Maple cannot understand that the two following vectors are equal:

V1 := Vector[column](8, [1, 2, 2, 1, 3, A, B, 1/(A + B)^2]);

V2 := Vector[column](8, [1, 2, 2, 1, 3, A, B, 1/(A^2 + 2*A*B + B^2)]);

I tried to use the following two commands:

LinearAlgebra:-Equal(V1[6 .. 8], V2[6 .. 8]);

verify(V1, V2, 'Vector(expand)');

but Maple still returns 'false' instead of 'true'

Could somebody help me please ?
Best regards,

I'd like to define a proc, which takes first argument to be either an ode (i.e. type `=`) or set of ode's, or list of ode's.

However, I do not know how to tell Maple that the list or set, if that is the type, to be a list of `=` and no other type.

Here is what I tried to make it more clear

If I do this



foo:=proc(ode::{`=`, set,list},func::`function`,$)
end proc:

Then Maple will check that the first argument is ANY one of `=`, set or list. 

But does not check if the list or set contains only equations of type `=`.  So I am able to call the above like this

foo(ode1,y(x));  #this is OK
foo([ode1,a],y(x))  #this is wrong

Which is wrong, since `a` is not of type `=`.

Next I tried this (I also wanted to check that if first argument is list or set, that it is not empty, so added extra check)


                   And(set,satisfies(x-> (numelems(x)<>0 and type(x,`=`))  )),
                   And(list,satisfies(x-> (numelems(x)<>0 and type(x,`=`))  ))

end proc;

But the above gives an error



I also tried

                   And(set,satisfies(x-> type(x,`=`)  )),
                   And(list,satisfies(x-> type(x,`=`) ))


end proc;

Also gives erorr when called 


Ofcourse, I can just leave the check as in first case above, and in the proc itself, do the check myself manually by going over each entry in the list or set to make sure each entry is of type `=`. 

But I wanted Maple to do this work for me, if possible.

What is the correct syntax for doing so?

Maple 2020.2


I am trying to plot generator reactive output (Q) over a range of generator power output (P) with field current (Ifldc) and terminal voltage (Et) constant using “solve”. The system of equations includes an interpolating fiction Ifld(el).

I’m looking for some help as to how to configure a solution. Attached are a few of my failed attempts.

The upload of my file deleats the "solve" fo my first try it is:





MvaGen := 1354; PfGen := .935; KvGen := 24


           Xd__u := 1.89 - Synchronous reactance of d-axis, Unsatuarted

              Xq__u := 1.80 - Synchronous reactance of q-axis, Unsatuarted

              X__l := .26   - leakage reactance d or q-axis``


            Ifld__base := 3114


Open Ckt Sat Curve DS807-1a

     First col=Ifld amps   

     Second col= el voltage behind leakage reactance


OC_SatDat := Matrix(16, 2, {(1, 1) = 0, (1, 2) = 0., (2, 1) = 655.6456, (2, 2) = .3422578, (3, 1) = 1009.961, (3, 2) = .5331404, (4, 1) = 1253.12, (4, 2) = .6492209, (5, 1) = 1562.724, (5, 2) = .8014143, (6, 1) = 1893.545, (6, 2) = .9329786, (7, 1) = 2201.68, (7, 2) = 1.033593, (8, 1) = 2487.276, (8, 2) = 1.108416, (9, 1) = 2793.943, (9, 2) = 1.157452, (10, 1) = 3122.338, (10, 2) = 1.203911, (11, 1) = 3690.959, (11, 2) = 1.263294, (12, 1) = 4259.141, (12, 2) = 1.307202, (13, 1) = 4827.028, (13, 2) = 1.340795, (14, 1) = 5351.085, (14, 2) = 1.366646, (15, 1) = 5787.775, (15, 2) = 1.387329, (16, 1) = 6224.391, (16, 2) = 1.405433})

  ido := It*sin(theta+delta)

Plot OC saturation with field current in pu





      OC_Sat_Ifld_pu := Column(OC_SatDat, [1])/Ifld__base

         OC_Sat := Concatenate(2, Column(OC_SatDat, [2]), OC_Sat_Ifld_pu) 


iterpolate values of field current vs el from OC sat curve


                                    pts_el := Column(OC_Sat, [1]); pts_Ifldpu := Column(OC_Sat, [2])



                         Ifield as a function of el  ->  Ifld := LinearInterpolation(pts_el, pts_Ifldpu)



Solve for Q with


P = .935; Iflc := 1.88; Et := 1.0





 Eq1 := Ir = P/Et; Eq2 := Ix = Q/Et    Eq3 := It*sqrt(Ir^2+Ix^2)     Eq4:=theta = arctan(Q, P)


    Eq5 := el = abs(Et+X__l*(Ix+I*Ir))      Eq6 := `&Psi;AG__d` = Xad__u*Ifld(el)   Eq7:=K__ds = el/`&Psi;AG__d`


NULL Eq8 := Xd__s = K__ds*Xad__u+X__l   Eq9 := `&Psi;AG__q` = Xaq__u*Ifld(el)    Eq10 := K__qs = el/`&Psi;AG__q`


   Eq11 := Xq__s = X__l+K__qs(el)*Xaq__u      Eq12 := Eq = Et+Xq__s(el)*(Q/Et+I*P/Et)



Eq13 := delta = argument(Eq)        Eq14 := eqo = Et*cos(delta)    Eq15 := ido = It*sin(theta+delta)


Eq16 := EI = Xd__s*Iflec; Eq17 := EI = Ido*Xd__s+eqo


syst := {E15, Eq1, Eq10, Eq11, Eq12, Eq13, Eq14, Eq16, Eq17, Eq2, Eq3, Eq4, Eq5, Eq6, Eq7, Eq8, Eq9}




solve(sys, {Eq, Ir, It, Ix, K__ds, K__qs, Q, Xd__s, Xq__s, el, eqo, ido, theta, `&Psi;AG__d`, `&Psi;AG__q`})

Warning, solving for expressions other than names or functions is not recommended.






`` Ix := proc (Q) options operator, arrow; Q/Et end proc   It := proc (Q) options operator, arrow; sqrt(Ir^2+Ix^2) end proc     theta := proc (Q) options operator, arrow; arctan(Q, P) end proc


 el := proc (Q) options operator, arrow; abs(Et+X__l*(Ix(Q)+I*Ir)) end proc      `&Psi;AG__d` := proc (Q) options operator, arrow; Xad__u*Ifld(el(Q)) end proc   K__ds := proc (Q) options operator, arrow; el(Q)/`&Psi;AG__d`(el(Q)) end proc``

NULL Xd__s := proc (Q) options operator, arrow; X__l+K__ds(el(Q))*Xad__u end proc   `&Psi;AG__q` := proc (Q) options operator, arrow; Xaq__u*Ifld(el(Q)) end proc    K__qs := proc (Q) options operator, arrow; el(Q)/`&Psi;AG__q`(el(Q)) end proc

Xq__s := proc (Q) options operator, arrow; X__l+K__qs(Q)*Xaq__u end proc      Eq := proc (Q) options operator, arrow; Et+Xq__s(Q)*(Q/Et+I*P/Et) end proc


delta := proc (Q) options operator, arrow; argument(Eq(Q)) end proc        eqo := proc (Q) options operator, arrow; Et*cos(delta(Q)) end proc    ido := proc (Q) options operator, arrow; It*sin(theta(Q)+delta(Q)) end proc``


EI := proc (Q) options operator, arrow; Xd__s(Q)*Iflec end proc    EI := proc (Q) options operator, arrow; eqo(Q)+Xd__s(Q)*Ido(Q) end proc



solve(EI(Q) = eqo(Q)+Xd__s(Q)*Ido(Q), {Eq, Ir, It, Ix, K__ds, K__qs, Q, Xd__s, Xq__s, el, eqo, ido, theta, `&Psi;AG__d`, `&Psi;AG__q`})

{Eq = Eq, Ir = Ir, It = It, Ix = Ix, K__ds = K__ds, K__qs = K__qs, Q = Q, Xd__s = Xd__s, Xq__s = Xq__s, el = el, eqo = eqo, ido = ido, theta = theta, `&Psi;AG__d` = `&Psi;AG__d`, `&Psi;AG__q` = `&Psi;AG__q`}





     "Eq20:=Ir=P/(Et):     Eq21:=Ix=Q->Q/(Et):"

Error, invalid operator parameter name

"Eq20:=Ir=P/Et: Eq21:=Ix=Q->Q/Et:"









What is your choice for creating a good table?

For example;



How to create a table as follows? (Appearance similar to the following is not required. I am open to all options)

Hi, I am doing a project about three body problem. I am solving a DE system with 12 DEs and plotting it with phase portrait. It is all good if I am only using vars in scene. like this:

pp1 := phaseportrait([eq1(t), eq2(t), eq3(t), eq4(t), eq5(t), eq6(t), eq7(t), eq8(t), eq9(t), eq10(t), eq11(t), eq12(t)], [x1(t), y1(t), vx1(t), vy1(t), x2(t), y2(t), vx2(t), vy2(t), x3(t), y3(t), vx3(t), vy3(t)], t = 0 .. 8.75*10^7, [[x1(0) = X1, y1(0) = Y1, vx1(0) = VX1, vy1(0) = VY1, x2(0) = X2, y2(0) = Y2, vx2(0) = VX2, vy2(0) = VY2, x3(0) = X3, y3(0) = Y3, vx3(0) = VX3, vy3(0) = VY3]], scene = [x1(t), y1(t)], stepsize = 1000, x1 = 0 .. 10^6, y1 = 0 .. 6*10^6, color = [red], scaling = constrained):

But I cannot plot any combinations of my variables. I have orthogonalized all the velocity, and I can plot [t,vx(t)] or [t, vy(t)]. But I cannot plot [t, (vx(t)^2+vy(t)^2)^1/2]:

vel1 := phaseportrait([eq1(t), eq2(t), eq3(t), eq4(t), eq5(t), eq6(t), eq7(t), eq8(t), eq9(t), eq10(t), eq11(t), eq12(t)], [x1(t), y1(t), vx1(t), vy1(t), x2(t), y2(t), vx2(t), vy2(t), x3(t), y3(t), vx3(t), vy3(t)], t = 0 .. 3.5*10^7, [[x1(0) = X1, y1(0) = Y1, vx1(0) = VX1, vy1(0) = VY1, x2(0) = X2, y2(0) = Y2, vx2(0) = VX2, vy2(0) = VY2, x3(0) = X3, y3(0) = Y3, vx3(0) = VX3, vy3(0) = VY3]], scene = [t, (vx3(t)^2 + vy3(t)^2)^(1/2)], stepsize = 1000, linecolor = [purple], scaling = constrained);
Error, (in DEtools/phaseportrait) Invalid scene; must be list of vars: scene = [t, (vx3(t)^2+vy3(t)^2)^(1/2)]

Is there a way to let me plot the v(t) ?

why setting interface(warnlevel=0); makes dsolve change the form of the final solution to an ODE?

Is this to be expected? Help on warnlevel 0 says to just suppress all warnings

In this example, both solutions are equivalent. One is just simpler than the other.

But now I am worried if this setting could affect dsolve in other ways not yet anticipated.



`Standard Worksheet Interface, Maple 2020.2, Windows 10, November 11 2020 Build ID 1502365`


`The "Physics Updates" version in the MapleCloud is 884 and is the same as the version installed in this computer, created 2020, November 25, 16:49 hours Pacific Time.`



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

y(x) = -3+(1/3)*(-9*x^2+324)^(1/2), y(x) = 1+(1/3)*(-9*x^2+36)^(1/2)


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

y(x) = -3+(-x^2+36)^(1/2), y(x) = 1+(-x^2+4)^(1/2)



btw, the same thing happens with warnlevel 2. i.e. answers look different.

But with warnlevel 3 and 4, now dsolve gives the same answer. 

SInce it seems default is warnlevel 3, it seems internally, dsolve takes different path depending on warnlevel setting? 


Here is a movie. I am using windows 10.


Edit: Here is another video. Tried now with fresh start of Maple. i.e. closed Maple and started it again.  Using worksheet. No other worksheet was open. This is what I found. Initially it gives the longer solution. After couple of tries, it then changed to the simpler one


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