MaplePrimes Questions

I've got a problem where I need to find the shortest route between a list of points. Each point must only be visited once.

To solve the problem I admit that I have used ChatGPT. While the answer was very helpful, the thing is that it apparently doesn't work (yet). The problem is that the function in the package is not existing.

Here's the ChatGPT code.

Any help appreciated.

euclidean_distance := proc (p1, p2) options operator, arrow; sqrt((p1[1]-p2[1])^2+(p1[2]-p2[2])^2) end proc; points := [[0, 0], [1, 2], [3, 1], [5, 4]]; distance_matrix := Matrix([`$`([`$`(euclidean_distance(points[i], points[j]), i = 1 .. 4)], j = 1 .. 4)]); solution := Optimization:-LinearSumAssignment(distance_matrix); optimal_route := [`$`(points[i], `in`(i, solution[1]))]; total_distance := add(`$`(distance_matrix[i, solution[1][i]], `in`(i, solution[1]))); print("Optimal route:", optimal_route); print("Total distance:", total_distance)

"Total distance:", total_distance




I'm running Maple 2020 on a Mac with OS 14.3.1.  Maple is not seeing current files in folders, and when it saves files, it does so with an older date.  In Settings, Maple has permission to access the Desktop, Documents, and Downloads folders, the only options that my Mac provides.

It's a bit frustrating.  Any help would be appreciated.

Are the results consistent either we use simplify(expression) or simplify(expression,size)? It seems (2) and (3) are not consistent.


with(PDEtools); with(LinearAlgebra)

b := -(2*I)*exp(2*t*Im(lambda1))*(exp(I*a*x/conjugate(lambda1))*exp((2*I)*a*x/lambda1)*exp((-I*a*x)*(1/conjugate(lambda1)))*exp(I*conjugate(lambda1)*t)+exp(I*lambda1*t)*exp(I*a*x/lambda1)*exp((-I*a*x)*(1/lambda1))*exp((2*I)*a*x/conjugate(lambda1))*(abs(`ε1`)^2+abs(`ε2`)^2))*conjugate(`ε1`)*Im(lambda1)/(exp((2*I)*a*x/lambda1)*abs(`ε1`)^2*exp(-(2*I)*a*x/conjugate(lambda1))*exp(2*t*Im(lambda1))+exp(-(2*I)*a*x/lambda1)*abs(`ε1`)^2*exp((2*I)*a*x/conjugate(lambda1))*exp(2*t*Im(lambda1))+exp(I*a*x/lambda1)*exp((-I*a*x)*(1/lambda1))*exp(I*a*x/conjugate(lambda1))*exp((-I*a*x)*(1/conjugate(lambda1)))*(abs(`ε2`)^4+2*abs(`ε1`)^2*abs(`ε2`)^2+abs(`ε1`)^4+2*abs(`ε2`)^2*exp(2*t*Im(lambda1))+exp(4*t*Im(lambda1))))



bdif := simplify(diff(b, x)); bdifxzero := simplify(subs({x = 0}, bdif))





bdif1 := simplify(diff(b, x), size); bdif1xzero := simplify(subs({x = 0}, bdif1), size)







I want to use the resuls that I obtained  in MATLAB in my maple Program

something like this 

variables in scope: top scope

  Attr   Name        Size                     Bytes  Class
  ====   ====        ====                     =====  =====
         Rnx         1x3801                   30408  double


is there a way to set conjugate=true  to false as a default for BilinearForm?  This would be used inside a package.


v := <x, y>;
BilinearForm(v, v);
BilinearForm(v, v, conjugate = false);


I am trying to define a function f(x1+tau,x2)= (x1+tau)*a+x2*b. I need this to be able to take derivations w.r.t. the sum (x1+tau) and to only tau as well. Is there a way to do this?

I am presently working on bivariate functions defined this way

C := (u, v) -> (phi@@(-1))(phi(u)+phi(v));

phi is a function of specific expression named the "generator". Both u and v are assumed to be in the closed interval [0,1].

Here is an example:

phi := u -> (u^(-theta)-1)/theta:
C := (u, v) -> (phi@@(-1))(phi(u)+phi(v)):
C(u, v)
                       / (-theta)        (-theta)    \
                      | u         - 1   v         - 1|
           @@(phi, -1)| ------------- + -------------|
                       \    theta           theta    /

This definition of C is correct providing that  theta in [-1, +infinity) \ {0}.
As you can see, the display of C(u, v) contains the inverse function phi@@(-1) which Maple doesn't seem to know what to do with.

What I would like is to get rid of  phi@@(-1) and get 

C(u, v);

The only way I found to get this is to do that:

phi := u -> (u^(-theta)-1)/theta:
(phi@@(-1)) := u -> solve(phi(x)=u, x): # explicit definition of (phi@@(-1))
C := (u, v) -> simplify((phi@@(-1))(phi(u)+phi(v))) assuming theta >= -1, theta <> 0:
C(u, v);
                                         /    1  \
                                         |- -----|
                                         \  theta/
             /      (-theta)    (-theta)\         
             \-1 + u         + v        /         

As you see I have been forced to tell Maple what the inverse function of phi was.
Is there another way do get this result without writting the bold red line?

Maple knows several inverse functions (trigonometric functions for instance), but how does it know that?
As Maple does not seem to use a (f@@(-1)) := u -> solve(f(x)=u, x) like definition, does it uses a correspondence table between functions and their inverse?
If it is so can we augment it?

Thanks in advance.

PS: the ultimate goal is to do something like this Download  for different generators.

For the moment I have defined my own table generator <--> inverse function  as I did above with the bold red line: this works but it is not very elegant.

I have a problem and I haven't been able to solve it yet. I want to solve an ordinary diffrential equation similar to
and plot phi versus xi for a the following conditions:
1) V(phi)=dphi/dxi=0 at (phi=0,phi_m) and
2) dV(phi)/dphi=0 at phi=phi_m and 
3) d^2V(phi)/dphi^2=0 at both phi=0 and phi=phi_m.
How can I do this by Maple?(see the attached file)

Has anyone else noticed that Mapleprimes response/loading/refreshing time has become relatively much slower in the past few weeks?

In MapleFlow lowerscript L is not easily available.  It should be accessible with the CRTL+space after typing L.

Or in a list of common symbols (that pallete is not available in Maple Flow)

I had to to use maple to discover how to enter it.

`&ell; produced the correct result and then deleting the quote I could achieve the desired result.

I tried

interface(warnlevel=0); infolevel[all]:=0;prinlevel:=0;kernelopts('printlevel'=0);

to suppress the warnings I get from this code

  if((re>0) and (im>0) and (im<1-re))then
  end if;
end proc;

The reason for the warnings is clear. The input lines are too long to be plotted. However, the resulting plot is exactly what I intended. Programatically truncating the lines would make the warning disappear, but it would make the code much more complicated.

What else can be done to suppress this kind of warning.

For Mathematica  math software app,there is a plugin to use in chatGPT pro ( paid subscription ) and maybe this can be done for Maple too ? 

Haven't used the plugin for Mathematica yet, am curious about it.
Let me have the AI look at the Riemann Hypothesis :)  
Have a few books on it, but can't get through that math with all those special functions.

Why does the execution of procedure J2 in the attached file fire an error?
it looked to me as if I had built it the same way as J1.


# Basically I want do do something like that,

J1 := proc()
  local z:
  z := proc(u) fsolve(sqrt(x)=u, x) end proc:
  evalf(Int(''z''(u), u=0..1))
end proc:




# but when z is more complex finction of two arguments.
# Unfortunately a direct transposition of what worked above no longer works.

J2 := proc()
  local z:
   z := proc(q1, q2)
         fsolve(1/2+(1/2)*erf((1/2)*x*sqrt(2)) = q1, x)
         fsolve(1/2+(1/2)*erf((1/2)*x*sqrt(2)) = q2, x)
       fsolve(1/2+(1/2)*erf((1/2)*x*sqrt(2)) = sqrt(q1), x)^2
       fsolve(1/2+(1/2)*erf((1/2)*x*sqrt(2)) = sqrt(q2), x)^2
  end proc:
  evalf(Int(''z''(q1, q2), q1=0..1, q2=0..1))
end proc:


Error, (in evalf/int) q1 is in the equation, and is not solved for





Can you help me fix this issue?

Thanks in advance


How can I get y=x in output (4) when  g is equal to f?


f := x -> F(x)

proc (x) options operator, arrow; F(x) end proc





# Let us assume that y is defined this way

y := ((f@@(-1))@g)(x);



# When g is identical to f I would like to get y=x

'y' = eval(y, g=f);
'y' = eval(y, g = (x -> f(x)))

y = (f@@(-1))(F(x))


y = (f@@(-1))(F(x))




Thanks in advance

This is something I use a fair bit. I have procedures with alternative spelling options for the colours Red Green and Blue.
Have shown a single example copied from  an overloaded procedure. It there a nicer way of handling this than what I am doing?
There is a section in help under "Procedure Parameter Declarations" on "Indexed Keyword Parameters"  but I don't see how to use it here. These procedures are used inside a package.



GeomClr:="Blue";  # can be "Blue", "blue", "B", "b"  or;
                  #        "Green", "green", "G", "g"  or;
                  #        "Red2, "red", "R", "r";

Prntmsg:="y" ; #  or anything that is not"y"






spread:=proc(p0::{satisfies(s -> type(s, [algebraic $ 2])),'Vector[row]'(2, algebraic)},
              p1::{satisfies(s -> type(s, [algebraic $ 2])),'Vector[row]'(2, algebraic)},
              clr::`string`:= GeomClr,
           option overload;
           uses LinearAlgebra;
           if clr="b" or clr="B" or clr="blue" or clr="Blue" then
              if prnt="y" then
                print("Spread 2 [x,y] Points/Vectors wrt origin Blue");
              end if;
               return 1 - BilinearForm(p0, p1, conjugate = false)^2/(BilinearForm(p0, p0, conjugate = false)*BilinearForm(p1, p1, conjugate = false));
           elif clr="g" or clr="G" or clr="green" or clr="Green" then
              if prnt="y" then
               print( "Spread 2 [x,y] Points/Vectors wrt origin Green");
              end if;
               return -1/4*(p0[1]*p1[2] - p0[2]*p1[1])^2/(p0[1]*p0[2]*p1[1]*p1[2]);
           elif clr="r" or clr="R" or clr="red" or clr="Red" then
              if prnt="y" then
               print( "Spread 2 [x,y] Points/Vectors wrt origin Red");
               end if;
               return -(p0[1]*p1[2] - p0[2]*p1[1])^2/((p0[1]^2 - p0[2]^2)*(p1[1]^2 - p1[2]^2));
          end if;
          end proc:


"Spread 2 [x,y] Points/Vectors wrt origin Blue"





"Spread 2 [x,y] Points/Vectors wrt origin Green"





"Spread 2 [x,y] Points/Vectors wrt origin Red"













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