4004 Reputation

17 Badges

6 years, 175 days

MaplePrimes Activity

These are replies submitted by mmcdara


I'm sorry :

two options :

  1. You have read the description of the physical problem I gave to JhonS
    1. I misspoke and you misunderstood the problem: it's normal that you provide me a solution which does not correspond to the one I'm expected for.
      If it is so, my apologies for my poor explanations
    2. My explanations are correct but did not understand the problem and you keep going on your first idea  that I shouldn't have put the problem the way I did.
      In this case, with all due respect, I don't see any good reason to keep talking about it
  2. You did not
    In this case I don't care about the solution you give in : it is not the solution of the problem I'm concerned with.

Thank you, however, for the yime you have devoted to me


Please look to my answer to JohnS, maybe it will enlighten you.

I just have two events.
The first one one [[x(t)=0, v(t)<0], [x(t)=0, v(t)=0]] plays the same role than the event described in the help pages for the bouncing ball test case. Excepted I do not reverse the velocity here, but just force it to be 0 (think not to a boucing ball but o an egg crashing on the floor).

The events are correctly specified: see help pages, example 1 :
dsn := dsolve({diff(y(t),t,t)+y(t)=0,y(0)=0,D(y)(0)=1}, numeric, events=[[[y(t),diff(y(t),t)>0],halt], [[y(t),diff(y(t),t)<0],halt]]);

You write "If I replace your 'events' option with the simpler events=[[x(t)=0, v(t)=0], [x(t)-CMAX, halt]] ..."  ... I will not solve correctly the problem (my reply to JohnS).
Why ? Because the event [x(t)=0, v(t)=0] : 

  1. will preclude any initial movement of the mass as it is trivially verified by the initial condition
  2. ... and even if you use some trick to "pass" this pathological case, the equation dv(t)/dt = f will make the velocity v(t) to evolve and then x(t) to become negative


You can also look also to this more complete mw file

The acceleration is a see-saw function.
The first pattern ranges from 0 to 4 with maximum amplitude 1.
The second pattern ranges from 4 to 8 with maximum amplitude 2

Given c and k, depending on the value of CMAX  :

  1. x(t) = CMAX before t=2: the solution stops because of the event [x(t)-CMAX, halt]
  2. x(t=2) < CMAX : the mass moves backward up to its wall position x=0 and stays still until the acceleration acc(t) (t>4) is large enough for the piston to move forward again
    Then : 
    1. either it reaches CMAX before the acceleration reverses and forces it to return to its wall position
    2. either it reaches CMAX and the solution stops because of the event [x(t)-CMAX, halt]




Good remarks.

  1. In the expression of f, there are only two effects : the acceleration, as you obeserved, and a linear spring of length L0 and mounting length Lm < L0. Given the stiffness k the spring develops a resustive force k(Lm-L0) I just wrote c
    So c is not some dampind coefficient.
    Note that in the problem of interest I also have a damping term
  2. Why do you expect the condition x = v = 0 to occur ?These equations model the behaviour of a mass (here with value 1) contained in a box submitted toa given acceleration..
    At time 0 the mass is pushed against the bottom of the box by the spring (force of modulus c).
    If the acceleration is high enough to balance this force the mass begins to move to the opposite side of the box.
    This happens at some time Tdec__1 (at this time x(t) is obviously null)
    Two events can happen :
    1. the displacement of the mass equals CMAX and the system locks itself
    2. the acceleration diminishes and the spring forces the mass to return to its initial rest position x(t)=0
       in this case the system is no longer governed by an ODE and its state is trivialy x(t)=v(t)=0.
      This static equilibrium lasts until the acceleration increases again to balance the prestressing c.

So it is necessary to use events to monitor the differents situations the mass can face.


I just thought it could have been a rather common situation, not case specific, and that the code/data was not necessary.

I'm sorry

thanks for the advice.
(I will give you the answer here in a few days : the system team is responsible of this kind of operation)


... hum ... without imposing, would you have any suggestion about quesstion 2 ? 
I have observed that the garbage collector function (gc) only "cleans" unneccessary informations but doesn't free the memory.
Can I do this with some Maple command or should I look to system/ssystem commands ?

@Carl Love 
You're right, the problem essentially appears when P is very small (maybe also when N is very large ?)

Thank you for your contribution


Thank you for the "method=custom" tip.


@Carl Love  @Kitonum 

Very simple indeed.

Great thanks to both of you !


I am sure too.
If there was any offence taken, it certainly was not intended.

The Fourier transform of a function f imposes f to have some properties to exist.

f must be in the space S of tempered functions, made of indefinetly derivable functions decreasing more rapidly than any power of (1/x) when |x| tends to infinity.
Suppose it is the case for y(t).
Then limit(y(t), t=_infinity) should be 0 and diff(y(t), t$n) should be 0 too for any positive integer n.
The asymptotic equation y(t) verifies then should be m*sin(omega*t+..) = 0.
This being not true, the Fourier transform of y(t) does not exist.

As a general rule, the Fourier transform is used for solving ordinary differential equations only if these ODEs are linear ; yours being obviously highly non linear, hopping to solve it through a Fourier transofmation is a waste of time

Last point, the term arccos(y(t)) is defined only if abs(y(t)) <= 1 and it is not even sure that a solution exist for all t values !
(look Preben Alsholm in a previous answer)

@John Fredsted 

Heaviside distribution is defined by H(x) = piecewise(x < 0, 0, x > 1, 1, 1/2).
Then the correct result of your first  <HD, f> is f(0)/2

For <HD, f> = <H, Df> = int(....) = 1/2 f(0) too

which can be obtained from the fact that D is the derivative (in the distributional sense) of H ; then DH = HD = 1/2(H^2)' = 1/2(H)' = D and so <HD, f> = <DH, f> = (1/2 D, f> = f(0)/2

Of course f must be an C-infinite function with bounded support


but as the piece of code I gave,  it is just a roundabout way to solve the "Quantile issue".
It is still unfortunate that Quantile returns a wrong answer

This is a pretty explanation of how Maple operates.

But the CDF of a random variable X is, by definition, a non decreasing function of x in the range x = ]-infinity, +infinity[.
For a continuous random variable  it is even a strictly increasing function from the support of X to [0, 1]. So each p in [0, 1] has a unique inverse in the in the support of X ("support" is important xhen the CDF exhibits a plateau : in such cas the inverse image of p can be a  an interval).

The CDF here is a strictly increasing function from -5 to 5, as CDF(X, x) shows.
Rigorously Quantile(X, x) should return a single value, not 5 values !
If it does so, this is because Quantile(...) does not work on the true CDF, but on the expression it has over the support of X.
Doing this, Quantile ignores what the CDF is outside this support, and naively extends the CDF outside of [-5, 5]

I think this is a rough error in the implementation of the Quantile function.

The piece of code below avoids the problem in the present case.

convert(CDF(X,x), Heaviside):
evalf( eval(%,p=0.2) );



I focused on the alias part of your answer, thus forgetting the LargeExpression package you refered to.

I hope my omission is excused

Thank you for indicating me this package

@acer This post by John May is endeed very interesting.

Thanks for the link

First 85 86 87 88 89 90 Page 87 of 90