mmcdara

7022 Reputation

18 Badges

8 years, 229 days

MaplePrimes Activity


These are replies submitted by mmcdara

@minhthien2016 

My reaction to the MMA link you provide:

I'm disappointed by the lack of seriousness of the person who replied you: it simply shows that it has no statistical (nor mechanical) skills, as its answer simply makes no sense (unless it previously drawn the histogram of your raw data and observed that the the hypothesis of a uniform distribution was acceptable).

Don't take the answers you receive at face value: it's your responsibility to analyze them to understand whether or not they're credible.

Please read again my reply, I updated it.

The original @nm's question was "The problem is to find from all permutations of [1,2,3,4] those lists which has 2 in them before 3." and It feels like everybody took the same direction than @nm's, which is "construct the list of all permutations and select those where 2 appears before 3".
But It looks more natural to "construct directly the list of permutations for which 2 appears before 3".  
Behind the question I asked @Carl Love  (since I only have Maple 2015 I can't evaluate the performance of his solution) my real question was "Is this second approach more efficient than the one everyone else has considered?"

Here is a simple code (that could probably be improved) which seems to prove it's the case.
For comparison, I used @Kitonum's method, which @acer found to be the most efficient.
 

restart

C := proc(N, left, right)
  local P, J, L, k, n, j:

  P := combinat:-permute({$1..N} minus {left});
  J := ListTools:-Search~(right, P);

  L := table([]):
  k := 1:
  for n from 1 to (N-1)! do
    for j from 1 to J[n] do
      L[k] := [op(1..j-1, P[n]), left, op(j..-1, P[n])]:
      k    := k+1:
    end do:
  end do:
  L
end proc:

eval(C(4, 2, 3))

table( [( 1 ) = [2, 1, 3, 4], ( 2 ) = [1, 2, 3, 4], ( 3 ) = [2, 1, 4, 3], ( 4 ) = [1, 2, 4, 3], ( 5 ) = [1, 4, 2, 3], ( 6 ) = [2, 3, 1, 4], ( 7 ) = [2, 3, 4, 1], ( 9 ) = [4, 2, 1, 3], ( 8 ) = [2, 4, 1, 3], ( 11 ) = [2, 4, 3, 1], ( 10 ) = [4, 1, 2, 3], ( 12 ) = [4, 2, 3, 1] ] )

(1)

n := 4:
n! / 2;
CodeTools:-Usage(C(n, 2, 3)):

12

 

memory used=15.02KiB, alloc change=0 bytes, cpu time=0ns, real time=0ns, gc time=0ns

 

n := 5:
n! / 2;
CodeTools:-Usage(C(n, 2, 3)):

60

 

memory used=41.78KiB, alloc change=0 bytes, cpu time=0ns, real time=1000.00us, gc time=0ns

 

n := 6:
n! / 2;
CodeTools:-Usage(C(n, 2, 3)):

360

 

memory used=175.72KiB, alloc change=0 bytes, cpu time=1000.00us, real time=2.00ms, gc time=0ns

 

n := 7:
n! / 2;
CodeTools:-Usage(C(n, 2, 3)):

2520

 

memory used=1.07MiB, alloc change=0 bytes, cpu time=8.00ms, real time=8.00ms, gc time=0ns

 

n := 8:
n! / 2;
CodeTools:-Usage(C(n, 2, 3)):

20160

 

memory used=8.76MiB, alloc change=36.00MiB, cpu time=84.00ms, real time=84.00ms, gc time=6.98ms

 

n := 9:
n! / 2;
CodeTools:-Usage(C(n, 2, 3)):

181440

 

memory used=73.08MiB, alloc change=288.00MiB, cpu time=988.00ms, real time=824.00ms, gc time=343.09ms

 

# For comparison on my machine (from acer):
# Kitonum's suggestion

L:=combinat:-permute([1,2,3,4,5,6,7]):
CodeTools:-Usage(select(t->ListTools:-Search(2,t)<ListTools:-Search(3,t), L)):
nops(%);

print():print():
L:=combinat:-permute([1,2,3,4,5,6,7,8]):
CodeTools:-Usage(select(t->ListTools:-Search(2,t)<ListTools:-Search(3,t), L)):
nops(%);


print():print():
L:=combinat:-permute([1,2,3,4,5,6,7,8,9]):
CodeTools:-Usage(select(t->ListTools:-Search(2,t)<ListTools:-Search(3,t), L)):
nops(%);

memory used=1.44MiB, alloc change=0 bytes, cpu time=19.00ms, real time=19.00ms, gc time=0ns

 

2520

 

 

 

memory used=11.54MiB, alloc change=0 bytes, cpu time=138.00ms, real time=138.00ms, gc time=0ns

 

20160

 

 

 

memory used=103.83MiB, alloc change=26.92MiB, cpu time=3.66s, real time=2.03s, gc time=2.25s

 

181440

(2)
 

 

Download suite_2_3.mw

@Carl Love 

As I can't use the Iterator package (still Maple 2015), could you please give me the performances you get when evaluating function f for a few values of N:

f := N -> {seq}(p[], p= Iterator:-TopologicalSorts(N, {2<3}));
CodeTools:-Usage(f(...)):

Thanks in advance

@Aung 

I'm fed up with people asking questions and not bothering to give feedback on the answers they've received.
Considering that what I did no longer interest you I then remove some parts of this reply


Result without explanation



When you will be interested again, if that ever happens, let me know, I will deliver you the code

@nm 

You must create an account first (free and anonymous, your email adress is never asked nor your username).
Once done the description page looks loke this 
Enter your answer and click on the Check button to check it.

Solutions are gathered here.
As Project Euler is more computing oriented than brainstorming this site only contains code in 4 different languages (MMA in particular) but no textual explanation of the way to get these solutions is provided.

This site provides more explanations, but only for the problems the author solved.

From Project Euler home page:

What is Project Euler?

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

@Aung 

Why didn't you tell me if my first reply helped you in solving your initial problem?

More of this, I don't understand your first reply (nor the second for that matter)

sir...i still make a mistake....i think..model...
here is my integration....
i try normally it gives zero...but i try watching from maple Help 
it can't solve...please check this and then i can recaculate the model 

What does "i try normally it gives zero." mean?
"it can't solve" what?

@Aung 
 

restart:

with(IntegrationTools):

eq1 := n -> Int(sum(A[i]*lambda[i]*exp(-lambda[i]*(t - tau)), i = 1 .. n)*tau, tau = 0 .. t);

proc (n) options operator, arrow; Int((sum(A[i]*lambda[i]*exp(-lambda[i]*(t-tau)), i = 1 .. n))*tau, tau = 0 .. t) end proc

(1)

# example (Expand "works with" Int, not with int.

N := 3:

eq2 := IntegrationTools:-Expand(eq1(N), continuous);

A[1]*lambda[1]*(Int(tau*exp(lambda[1]*tau), tau = 0 .. t))/exp(lambda[1]*t)+A[2]*lambda[2]*(Int(tau*exp(lambda[2]*tau), tau = 0 .. t))/exp(lambda[2]*t)+A[3]*lambda[3]*(Int(tau*exp(lambda[3]*tau), tau = 0 .. t))/exp(lambda[3]*t)

(2)

simplify(eq2);

A[1]*lambda[1]*exp(-lambda[1]*t)*(Int(tau*exp(lambda[1]*tau), tau = 0 .. t))+A[2]*lambda[2]*exp(-lambda[2]*t)*(Int(tau*exp(lambda[2]*tau), tau = 0 .. t))+A[3]*lambda[3]*exp(-lambda[3]*t)*(Int(tau*exp(lambda[3]*tau), tau = 0 .. t))

(3)

value((3));

A[1]*exp(-lambda[1]*t)*(exp(lambda[1]*t)*t*lambda[1]-exp(lambda[1]*t)+1)/lambda[1]+A[2]*exp(-lambda[2]*t)*(exp(lambda[2]*t)*t*lambda[2]-exp(lambda[2]*t)+1)/lambda[2]+A[3]*exp(-lambda[3]*t)*(exp(lambda[3]*t)*t*lambda[3]-exp(lambda[3]*t)+1)/lambda[3]

(4)

# To combine the terms the way you want you can do something like this (or something else)

se, re := selectremove(has, expand((4)), exp):
st, rt := selectremove(has, expand(re), t):

eq2 := collect(st, t) + map(normal, (collect(eval(rt+se, exp = (u -> 1/exp(-u))), [seq(A[n], n=1..N)])))

(A[1]+A[2]+A[3])*t+(-1+exp(-lambda[1]*t))*A[1]/lambda[1]+(-1+exp(-lambda[2]*t))*A[2]/lambda[2]+(-1+exp(-lambda[3]*t))*A[3]/lambda[3]

(5)

eq2_bis := collect(eq2, [seq(A[n], n=1..N)])

(t+(-1+exp(-lambda[1]*t))/lambda[1])*A[1]+(t+(-1+exp(-lambda[2]*t))/lambda[2])*A[2]+(t+(-1+exp(-lambda[3]*t))/lambda[3])*A[3]

(6)

eq2_ter := map(normal, eq2_bis)

(lambda[1]*t+exp(-lambda[1]*t)-1)*A[1]/lambda[1]+(lambda[2]*t+exp(-lambda[2]*t)-1)*A[2]/lambda[2]+(lambda[3]*t+exp(-lambda[3]*t)-1)*A[3]/lambda[3]

(7)

 


 

Download suggestion.mw

 


Without constraints, mainly on the lambdas which should be negative (viscoelastic model) you have no chance to get a result
Look at this
 

restart

with(Statistics):with(plots):with(Optimization):with(LinearAlgebra):

E[1] := 126*10^9:E[2] := 11*10^9:G[12] := 6.6*10^9:G_0__12 := 10.1*10^9:nu[12] := .28:E_0__2 := 15.5*10^9:

true_strain := [0, .406915, .710106, .989362, 1.28457, 1.53989, 1.86702, 2.21011, 2.625, 2.99202]:

true_strain := true_strain[2..-1]:
true_stress := true_stress[2..-1]:


N := nops(true_strain);

sigma_t := strain -> E[instantaneous]*(1-lambda[90*deg]*strain*(add(P[i], i=1..N)-(add(P[i]*exp(lambda[i]*strain/epsilon_dot), i=1..N)))/epsilon_dot)*strain:

9

(1)

Digits := 15:
obj := add(
         (
           sigma_t(true_strain[i])
           -
           true_stress[i]
         )^2
         , i=1..N
       ):

opt := NLPSolve(obj, {seq(lambda[j] >= -1, j=1..N), seq(lambda[j] <= 0, j=1..N)} );

[6683400368455538., [E[instantaneous] = HFloat(8.444510441702259e7), P[1] = HFloat(1.0), P[2] = HFloat(1.0), P[3] = HFloat(1.0), P[4] = HFloat(1.0), P[5] = HFloat(1.0), P[6] = HFloat(1.0), P[7] = HFloat(1.0), P[8] = HFloat(1.0), P[9] = HFloat(1.0), lambda[1] = HFloat(-1.8789657429094086e-300), lambda[2] = HFloat(1.8789657651601472e-300), lambda[3] = HFloat(-1.8789657874108858e-300), lambda[4] = HFloat(1.8789658096616243e-300), lambda[5] = HFloat(-1.878965831912363e-300), lambda[6] = HFloat(1.8789658541631015e-300), lambda[7] = HFloat(-1.87896587641384e-300), lambda[8] = HFloat(1.8789658986645787e-300), lambda[9] = HFloat(-1.8789659209153173e-300), lambda[90*deg] = HFloat(0.9997201132757775)]]

(2)

display(
  ScatterPlot(true_strain, true_stress, symbol=circle, color=blue),
  pointplot([[0.001$2]], symbol=circle, color=blue),
  plot(eval(sigma_t(Sigma), opt[2]), Sigma=0.001..max(true_strain), color=red)
)

 

display(
  ScatterPlot(true_strain, true_stress, symbol=circle, color=blue),
  pointplot([[0.001$2]], symbol=circle, color=blue),
  plot(eval(sigma_t(Sigma), opt[2]), Sigma=0.001..max(true_strain), color=red),
  axis[2]=[mode=log]
)

 

opt := NLPSolve(
         obj,
         {
           seq(P[j] >= 10, j=1..N),
           seq(lambda[j] >= -1, j=1..N),
           seq(lambda[j] <= 0, j=1..N)
         }
       );

display(
  ScatterPlot(true_strain, true_stress, symbol=circle, color=blue),
  pointplot([[0.001$2]], symbol=circle, color=blue),
  plot(eval(sigma_t(Sigma), opt[2]), Sigma=0.001..max(true_strain), color=red)
)

[1241236907553440.50, [E[instantaneous] = HFloat(9.759820692425984e7), P[1] = HFloat(10.0), P[2] = HFloat(10.0), P[3] = HFloat(10.0), P[4] = HFloat(10.0), P[5] = HFloat(10.0), P[6] = HFloat(10.0), P[7] = HFloat(10.0), P[8] = HFloat(10.0), P[9] = HFloat(10.0), lambda[1] = HFloat(-5.61032344030491e-13), lambda[2] = HFloat(-5.61032344030491e-13), lambda[3] = HFloat(-5.61032344030491e-13), lambda[4] = HFloat(-5.61032344030491e-13), lambda[5] = HFloat(-5.61032344030491e-13), lambda[6] = HFloat(-5.61032344030491e-13), lambda[7] = HFloat(-5.61032344030491e-13), lambda[8] = HFloat(-5.61032344030491e-13), lambda[9] = HFloat(-5.61032344030491e-13), lambda[90*deg] = HFloat(0.9994098437679935)]]

 

 

 


 

Download 90As4_mmcdara.mw

So define your own physical constraints and proceed as I did.
Come back to me/us if you still have problems.

@salim-barzani 

Q : "but why you go to end and not finish the work i wish i can do like you and i wish always finish the work"

A : I ended my work for four reasons:

  1. The expressions of eq0, .., eq10 I got are not the same of those you write: Where do yours come from?
  2. In what I did equations eq0, .., eq9 ( you discard eq10) depend upon 14 parameters
    {k, lambda, mu, w, B[1], B[2], a[1], a[2], a[3], a[4], a[5], alpha[0], alpha[1], beta[1]}
    So there is likely an infinity of 14-uples that verify these 10 equations.
  3. On your side you want to solve your 10 equation system {eq0, .., eq9} with respect to 7 unknowns:
    {w, a[1], a[2], a[3], alpha[0], alpha[1], beta[1]}
    So it is very likely that you have no solutions at all.
  4. Whatever the true expressions of these 10 equations are, they are highly non linear, which means that even if the number of unknowns was "correct", solve will never give you the formal expressions of these unknown (they would be so complex anyway that you would probably not even be able to display them).

So I didn't see the need to go any further until you had checked my expressions of the equations, correctly defined the system to be solved (why do you throw out eq10?) and its unknowns, and understood that its formal resolution is a dead end.

@vv 

The biggest circle which tangents the outer shape at a single point has these characteristics

P3 = NULL
P2 = [1.268415320, 1.896811508]
P1 = [0.6984958110, 0.5060156134]
P0 = [1.134857966, 1.138248648]
r  = 0.7692659625

@vv 

I vote up.

I hadn't been able to pose the problem correctly so that NLPSolve could deal with it (I didn't think to use 8 parameters).

Bravo again

A question: assuming you do "blind" research in the sense you do not know how many contact points there are between the circle and the outer shape (so there are 6 or 8 parameters): how to modify your modelling to handle this?

@C_R 

Limiting the search to  the first quadrant and without using the x2=x1 (or x2=-x1) assumption I got

 [r = .7698626516, [x__ellipse = .699728, y__ellipse = .5051636992]]
 [r = .7698626516, [x__ellipse = .699729, y__ellipse = .5051630067]]

The last one giving a circle center with co-ordinates

[1.138056073, 1.138059427]

Of course these results can be enhanced by adapting the convergence criterion

 

The optimization algorithm I wrote needs to be enhanced before being delivered.
A first approximation (I did not pushed the iterations far enough) of the maximum radius is 0.7698669432 (contact point with the ellipse [obvious symmetries aside]: x = .6997, y = .5051830906).

Tomorrow will be a rainy day here so I will have some time to refine the algorithm and send you a first draft.


Night

First 6 7 8 9 10 11 12 Last Page 8 of 145