sand15

1137 Reputation

15 Badges

10 years, 331 days

MaplePrimes Activity


These are replies submitted by sand15

@Kitonum 

 

Consider the following problem:

gate := 1 - ( Heaviside(t - (8*n - epsilon)) - Heaviside(t - (8*n + epsilon)) ):
SYS := {diff(x(t), t) = y(t)*gate, diff(y(t), t) = -x(t)*gate, x(0)=0, y(0)=1}:

Would you say this system has no solution?
Easy to check that Maple returns one, at least one n and epsilon has recieved numerical values; for instance
dsolve(subs({n=1, epsilon=0.1}, SYS), {x(t), y(t)})

Now it is also obvious that the rhs of SYS tend to the rhs of SYS2 when epsilon --> 0.
And thus, at least for epsilon <> 0, the limit of the solution of SYS tend to the one of SYS2.


The solution x(t)  is "globally" a sine function, excepted in the range [8*n=epsilon, 8*n+epsilon] where it is flat with a constant value equal to x(8*n-epsilon).
More precisely x(t) is made of:

  1. a sine function sin(t)  from t=0 to t=8*n-epsilon (assuming n > 0),
  2. a plateau x(t)= x(8*n-epsilon) from t=8*n=epsilon to t= 8*n+epsilon,
  3. and finally a translated sine function sin(t+2*epsilon) beyond t=8*n+epsilon,

As epsilon  --> 0  this plateau shrinks at t=8*n and, when epsilon=0, the solution (the one of SYS2) is a continuous sine curve (a cosine cuve for y(t))

The numerical solution can easily be obtained with 
sol := dsolve(SYS, numeric, parameters=[n, epsilon])

 

 

Another point of view:

  1. Solve SYS from 0 to T=8*n-epsilon
    let's note sol1 the corresponding solution and XT and YT the values of the solution at timùe T for x(t) and y(t) respectivey
  2. Solve {diff(x(t), t) = y(t)*gate, diff(y(t), t) = -x(t)*gate, x(T)=XT, y(T)=YT} up to t=8*n+epsilon
    Obviously this second solution is x(t)=XT, y(t)=YT
    Let's note TT =8*n+epsilon
  3. Solve {diff(x(t), t) = y(t)*gate, diff(y(t), t) = -x(t)*gate, x(TT)=XT, y(TT)=YT}
  4. Connect these 3 solutions

@Mariusz Iwaniuk 

Is this one correct ?
(I think one should plot func and not ifunc)

Volterra2.mw

 

It's me again...

I used CurveFitting:-Spline with degrees 1 and 3, and CurveFitting:-PolynomialInterpolation with different values for the option 'form'.
In all the cases i get no error but the method seems to diverge.
More precisely, in my first answer I had plotted only  [sinh(x), ifunc(1)(x)]  and  [sinh(x), ifunc(2)(x)]  and it looked well ( ifunc(2)(x) was closer too sinh(x) than  ifunc(1)(x) was).
I pushed a little bit forward by plotting  [sinh(x), ifunc(4)(x)]  ... and  ifunc(1)(x)  looks like some kind of parabola A*x^2 with A < 0 !!!

Maybe I did inadvertently some mistake when I modified your code ????

@maple2015 

With the correct values of X and Y fsolve('DetKFF(z)', z=0.1) should return 0.362284....

 

@digerdiga 

As vv said "You are not allowed to expand like this.".

More generaly, a sequence S of terms can be convergent even the sequences build from parts of the terms are not.

Take this far-fetched exemple :
S[n]=n-n  for n >=0 ...  obviously S "converges" to 0
Write S as U+V with
U[n]=n and V[n]=-n 
Then U and V both diverge and S=U+V seems to be undefinite (+infinity)+(-infinity)
 

@vv

 

My mistakes:

  •  You also have a syntax error in f()  [a ":" after proc()  not accepted in 1d].
    Appologies, I rewrote the content of a pdf file; in the code the ":" are not present after proc()
    (furthermore it generates an error if there is a delcration statement after the "proc" line, for instance local ....)
     
  • I effectively made a mistake by tipping args(k) instead of instead of arg[k] (furthermore I knew the sorrect syntax
    Strangely it seems to be correctly interpreted by Maple 2015: printing the quantity named "objet" returns the correct name
     
  • Last but not least: One more time I have forgotten that names constructed with "||" are global !!

 

Then the answer is: either I use the awfull sequence
    if n=1 then print(Object1)
  elif n=2 then print(Object1)
  …
  end if

or either I construt a list ObjectList:=[Object1, ...ObjectN] and a list ListA := [A] and I do this

 Choice := proc(a::list)
  local n, object:
  n := ListTools:-Search(true, a):
  object := ObjectList[n]
  print(object):
end proc:


Thank's for your answer, even if it is not always pleasant to be remembered we are an airhead !

@tomleslie 

"  The advantage(?) of doing it this  ...": right, it seems a better (the only one?) way to manage "pseudo axis"
 

By the way: I did a mistake in my original post.
I wrote

  • the empirical marginal distribution of X (Histogram), put below the line "y = min({y[n], n=1..N} )" and rotated by 180 degrees

In fact I should have written:

  • the empirical marginal distribution of X (Histogram), put below the line "y = min({y[n], n=1..N} )" and SYMMETRIZED around the x axis

A simple task to do with plottools:-transform
reflection := plottools:-transform((x,y) -> [x, -y])

From now on the two histograms are placed correctly by using only plottools:-transform ... you deinitely gave me a good advice.
 

@ThU

It's good enough for me.

By the way, where did you find this stylesheet = [vertexcolor = "White",vertexborder=false]) info ?

Thanks again

@ThU 

 

Correction: CTRL+J doesn't work.


Thank you anyway
 

@ThU 
"Do you mean the vertical bar at the location of the cursor? " : Yes,

The problem is now solved (see my previous "auto-answer"), but I'm keeping by my side your "control-J" trick ... for the last time.
Thanks for the answer

 

 

  1. I opened the worksheet "W"  with an older Maple version (Maple 2015): it contained the vertical location bar
  2. I saved it with another name
  3. And finally opened this new fir with Maple 2018 ... and this bar was miraculously restored !!!

I let the people in charge of this site to decide for themselves  if this question/auto-answer must be retained or removed

@Carl Love 

I give up : I DON'T KNOW HOW TO DO AN OBJECTIVE COMPARISON

I used your last version of NimMatrix with parameters 5, 5  (NimMatrix(5,5))

Procedure 1 :
 T := NULL;
for r from 1 to 100 do
   T := T, CodeTools[Usage](Code(...), output=cputime)  # from your answer to the "other" thread
end do:
add(T)/100

Procedure 2 : (from acer's suggestion)
 CodeTools[Usage](Code(...), output=cputime, iterations=10


Results
  indicator                Proc 1                   Proc2            

 cpu time/run             16.9 s                     32.75 s             

memory size            0.95 GiB                  0.95 GiB

I repeated this twice and obtained the same ratio of 2 between the cpu times.
For proc1 the 10 times range between 15.49 s and 18.08 s

For "My best code" chich uses no sophisticated material nor the option remember, the cpu times are the same (up to unavoidable fluctuations) with proc1 and proc2.

Then : what is the cpu time (16 s or 32 s) I have to take to do an OBJECTIVE comparison ???

 

@acer 

 

Thank you acer.
I've read the help pages but I missed apparently this "iterations" option
 

@Carl Love 

Procedure used to evaluate the cpu time (see my brevious reply)

T := NULL;
for r from 1 to 100 do
   T := T, CodeTools[Usage](Code(...), output=cputime)  # from your answer to the "other" thread
end do:
add(T)/100

CONDITIONS : BASE = 5, K = 3 (==> NimMatrix(5, 3))

The results (Maple 2018 / Windows 7) are
"NimMatrix lastversion"    14.35 ms / run
"NimMatrix first version"   23.56 ms / run
"My best code"                         46.90 ms / run

@Carl Love 

It works well in Maple 2018.
I did probably some mistake when I used this with the older Maple's versions
(I guess you're going to think I'm familiar with that...)

First 22 23 24 25 26 27 28 Last Page 24 of 32