2000 Reputation

14 Badges

4 years, 321 days

MaplePrimes Activity

These are questions asked by mmcdara

I've finally decided to see what I could to do with DocumentTools.
I started with these simple lines from ?DocumentTools:-Do 

Do(int(%expression, x=%from::integer..%to::integer));
Error, (in DocumentTools:-GetProperty) Attempted to retrieve property of unknown component expression.

These next ones return the expected plot but an alert window 

Do(%Plot1=plot(x^2, x=0..1));

However the Click and Drag icon is disabled in the plot toolbar and invisible in the plot menu.

The behaviour of these commands do not depend on whether they are written in a worksheet, a section or a code edit region.

Could you detail me the very first steps do use DocumentTools features?


I want to simulate the behaviour of a mass-spring system under an oscillating acceleration, but I also want that the mass remains between two rigid walls (no bouncing has to be considered).
Here is the notional example I use in the attached file (here x(t) will have to verify x(t) >= 0 and x(t) < 2).

s := t -> 10*cos(t)-x(t):

sys := { 
  diff(v(t), t)=s(t), 
  diff(x(t), t)=v(t), 

When the mass reaches one wall it gets stucked at it until the acceleration allows it to take off from this wall. It can then move to the opposite wall and possibly get stucked at it waiting for appropriate conditions to fly again.
Here are two images to help you understand what happens:

  1. the first one represents the "unbounded" solution of the system above
  2. the second is the "bounded" solution

To obtain the right picture I construct the solution piecewise (the method, based on events and the use of discrete variables, is described in the attached file).
For some reasons I would like to build the global solution "in one shot" and no longer have to assemble it from elementary pieces (the blue, red and gray chunks on the right figure).
I've tried to do this through events but  I have failed so far (an ettempt is presented in the attached file).

Could you show me how to use "events" to handle this problem?

Thanks in advance

I can't understand how to use Optimization in Operator Form when the objective function relies upon the numerical solution of a parameterized ODE.

Here is a very simple example :

  • I have a differential system that can be solved only numerically (so do not focus on the system I give to reply that I could solve it formally, I know that and the example is notional)
  • This system contains free parameters (K and M in my example) and an event whose firing time T I want to capture. 
  • The goal is to find what is the maximum value of T when K and M both belong to bounded ranges.
  • In the example I implicitely assumed that the event is fired for any (K, M) in their admissible ranges: this is a quite restrictive assumption that I will manage later.
sys := { M*diff(x(t), t$2)=t-K*x(t), x(0)=0, D(x)(0)=0};
evs := [[x(t)-5, halt]];

sol := dsolve(sys, numeric, events=evs, parameters=[K, M]):

TV := proc(P)
  return sol(eventfired=[1])[];
end proc:

# verification

# what I'm interested in
ranges := P[1]=0.8..1.2, P[2]=0.8..1.2:
Optimization:-NLPSolve(TV, ranges);
Error, (in Optimization:-NLPSolve) unexpected parameters: P[1] = .8 .. 1.2, P[2] = .8 .. 1.2

# another way
cstr := {0.8 < P[1], 1.2 > P[1], 0.8 < P[2], 1.2 > P[2]}:
Optimization:-Maximize(TV, cstr);
Error, (in Optimization:-NLPSolve) constraints must be specified as a set or list of  procedures

I'm using both Maple 2015 and Maple 2020 and would appreciate an answer which fits these two versions.
Could you help me solve this issue?



I'm french and I'm working on an Imac.

The path for the desktop is  /Users/myname/Desktop.
If cur := "/Users/myname", one can easily verify this:

IsDirectory(cat(cur, "/Desktop"))

In some application I'm developping, I use a  FileDialog Maplet to select a directory where to write a file.
For an unknown reason this maplet doesn't display the desktop with the name Desktop, but with it's french counterpart Bureau.

# Observe thet the desktop (8th line above) is named "Desktop"
# Now run 

 maplet := Maplet(
        'title' = "Output Directory", 
        'directory' = cur,
        'fileselectionmode' = directoriesonly, 
        'onapprove' = Shutdown(['FD1']), 
        'oncancel' = Shutdown()

res := Maplets[Display](maplet):
StringTools:-StringSplit(res[], cur);

                        ["", "/Bureau"]

As a result, saving a file in cur/Bureau generates an error.
Here is a more detailed worksheet:

Of course I have adjusted my code in an ad hoc way by french translating  what the maplet returns, but it is just a band-aid on a larger wound. For instance "Downloads" appears as "Téléchargements", and so on, and many names potentially need to be translated.

I do not understand why FileTools seems to "work in english" while  FileDialog seems to "work in french".
I suspect this is due to the fact that my Imac, although natively "English speaking", uses a French overlay. 
For instance the  Unix command pwd run in a terminal window indicates Users or Desktop, while  < command + i > executed on a given file displays Utilisateurs and Bureau.
Could it be that FileTools relies upon English, while FileDialog  relies upon the regionalized language?

What do you advice me:

  • to intervene at the Apple level by changing the "user" language my Imac uses, 
  • to intervene at the FileDialog  level (if possible),
  • or to keep translating undesired outcomes from FileDialog?

Thanks in advance


It want to generate all the words from a NL-letter alphabet and whose lengths are at most LW.

I could not find any function in the combinat package do to that (at least without combining some of them, I'm using Maple 2015 right now); maybe the Iterator package has some features do to that?

For the moment I use this procedure (which generates a few words of length LW+1 I have to suppress)

G := proc(d)
 local n, wo:
  global W:
  while max(length~(W)) < d do
    wo := copy(W):
    for n from 1 to nops(L) do
      W := {W[], cat~(wo, L[n])[]};
    end do:
  end do:
end proc:

# Words of length not larger than LW which are made of at most NL letters

NL := 3:
L  := StringTools:-Char~([$65..65+NL-1]);
W  := L:
LW := 3:

w3 := W;
                        ["A", "B", "C"]

{"A", "AA", "AAA", "AAB", "AAC", "AB", "ABA", "ABB", "ABC", "AC", 

  "ACA", "ACB", "ACC", "B", "BA", "BAA", "BAB", "BAC", "BB", 

  "BBA", "BBB", "BBC", "BC", "BCA", "BCB", "BCC", "C", "CA", 

  "CAA", "CAB", "CAC", "CB", "CBA", "CBB", "CBC", "CC", "CCA", 

  "CCB", "CCC"}

W  := L:
CodeTools:-Usage( G(12) ):

memory used=0.62GiB, alloc change=422.58MiB, cpu time=13.70s, real time=8.37s, gc time=8.08s

Do you have any idea to improve it from memory used and cpu time points of view)?

Thanks in advance

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