mmcdara

7002 Reputation

18 Badges

8 years, 224 days

MaplePrimes Activity


These are answers submitted by mmcdara



The proof of the first formula is very simple but I rewrite F into F2 forreasons that will appear clearly during the the proof of your second formula.

Formula 1:

F := unapply(rsolve({F(1) = 1, F(2) = 1, F(n + 1) = F(n) + F(n - 1)}, F(n)), n):

rel2use := Phi = op([1, -1, 1], F(n)):
rel2use := { rel2use, C = op(1, F(n)) / rhs(rel2use)^n }

               /    1  (1/2)        1  (1/2)   1\ 
              { C = - 5     , Phi = - 5      + - }
               \    5               2          2/ 

# FORMULA 1

F2 := n -> C * (Phi^n -(1-Phi)^n):

ToProve_1 := F2(n + 1)^2 - F2(n)*F2(n+2) = (-1)^n:

expand~(ToProve_1):
simplify(eval(%, rel2use))
                             n       n
                         (-1)  = (-1) 


Formula 2:

# Preliminary:

G2 := n -> arccot(``(F2)(n));
              G2 := n -> arccot((F2)(n))

ToProve_2 := G2(2*n) - (G2(2*n + 1) + G2(2*n + 2)) = 0;
    arccot((F2)(2 n)) - arccot((F2)(2 n + 1)) - arccot((F2)(2 n + 2)) = 0

# From recurrence formula, replacing n+1 ny 2*n+2 and F by F2:

recur := ``(F2)(2*n+2) = ``(F2)(2*n+1) + ``(F2)(2*n);
           (F2)(2 n + 2) = (F2)(2 n + 1) + (F2)(2 n)

# One gets:

subs(recur, ToProve_2);
 arccot((F2)(2 n)) - arccot((F2)(2 n + 1)) - arccot((F2)(2 n + 1) + (F2)(2 n)) = 0

# Which has symbolic form:
# (U > 0, V > 0, U < V)

SymbolicForm := arccot(U) - arccot(V) - arccot(U+V)
             arccot(U) - arccot(V) - arccot(U + V)


# Proof

G2 := n -> arccot(F2(n)):

recur := F2(2*n+2) = F2(2*n+1) + F2(2*n):

ToProve_2 := simplify(G2(2*n) - (G2(2*n + 1) + G2(2*n + 2)) = 0):

SymbolicForm := -(1/2)*Pi + arctan(U) - arctan(V) - arctan(U+V)
           1                                           
         - - Pi + arctan(U) - arctan(V) - arctan(U + V)
           2                                           

# Thus 

SymbolicForm := -(1/2)*Pi + arctan((U-V)/(1+U*V)) - arctan(U+V):

# and next

SymbolicForm := simplify( -(1/2)*Pi + arctan(((U-V)/(1+U*V) - (U+V)) / (1+(U-V)/(1+U*V)*(U+V))) )
                              /  / 2          \ \
                 1            |V \U  + U V + 2/ |
               - - Pi - arctan|-----------------|
                 2            | 2          2    |
                              \U  + U V - V  + 1/

FocusOn := denom( op(1, indets(SymbolicForm, function)[]) )
                        2          2    
                       U  + U V - V  + 1

FocusOn := eval(FocusOn, {U=F2(2*n), V=F2(2*n+1)}):
FocusOn := eval(FocusOn, rel2use):
FocusOn := simplify(FocusOn) assuming n::integer;
                         (4 n)                     (4 n + 1)
      1  /  1  (1/2)   1\        1 /  1  (1/2)   1\         
    - -- |- - 5      + -|      + - |- - 5      + -|         
      10 \  2          2/        5 \  2          2/         

                            (4 n)       
         1  /  1  (1/2)   1\       (1/2)
       + -- |- - 5      + -|      5     
         10 \  2          2/            

FocusOn := ``(Y^(4*n)) * expand(eval(FocusOn, (-(1/2)*sqrt(5)+1/2)=Y) / Y^(4*n))
               / (4 n)\ /  1    1     1   (1/2)\
               \Y     / |- -- + - Y + -- 5     |
                        \  10   5     10       /

eval(FocusOn, Y=-(1/2)*sqrt(5)+1/2);
                               0
# Then 

'SymbolicForm' = op(1, SymbolicForm) + arctan(something/``(0))
                            1            /something\
           SymbolicForm = - - Pi + arctan|---------|
                            2            \   (0)   /

something := numer( op(1, indets(SymbolicForm, function)[]) )
                          / 2          \
                        V \U  + U V + 2/

# Obviously 'something' is strictly positive, thus 
#
# arctan(something/``(0)) = Pi/2;
#
# and thus

'ToProve_2' = ``(-Pi/2) + ``(Pi/2)

                           /  1   \    / 1   \     
               ToProve_2 = |- - Pi| + |  - Pi|
                           \  2   /    \ 2   /     

 

Download Fibonacci.mw


PS I believe the second proof could be easier to catch if one uses the trigonometric representation of the golden number.

@jalal 

" all calculators are programmed to divide by n... it's a broad debate"
Not all the calculators are programmed to divide by n (look to Excel(*) which proposes to divide by n or by n-1).
And it is not a broad debate: the situation where you have to divide by n is extremely clear, as is the situation where you have to divide by n-1.
The only situation when you have to divide by n is when your sample represents the whole population. If it is not the case dividing by n lead to a biased estimator of the variance, while dividing by n-1 lead to an unbiased estimator.

The reason I used n-1 (without asking you which one of these two situations you were in) is a direct consequence of the way you construct data and Weights:

  • As you randomly chose the elements of data from the range 4..20 this implicitely means that you draw a sample from a population whose indicuals are 4, 5, ..., 20. So data does not represents the whole population.
  • The same reasoning applies to Weights which are randomly chosen.

Had you said "I have population made of W[1] individuals X[1], ..., W[N] individuals X[N]" , the situation would have been different and the division by n perfectly justified.

 

 

Excel(*) : Excerpt from  Variance Excel:

               Excerpt from Population variance Excel

 

REMARK: Alternative ways to generate data are

N := 10:

data := sort(combinat:-randperm([$4..20])[1..N]);
data := sort(Statistics:-Shuffle([$2..20])[1..N]);


CodeTools:-Usage( sort(Statistics:-Shuffle([$2..20])[1..N]), iterations=10^5):
memory used=4.73KiB, alloc change=0 bytes, cpu time=46.96us, real time=47.03us, gc time=2.25us

CodeTools:-Usage( sort(combinat:-randperm([$4..20])[1..N]), iterations=10^5):
memory used=2.48KiB, alloc change=0 bytes, cpu time=15.79us, real time=15.80us, gc time=1.14us

 

@jalal 

...that you have weighted data and that you want to draw a boxplot of these data?

if it is so the trick is to build an unweighted sample from the data and their weights and draw the corresponding boxplot.
This is likely a hammer to kill a fly, but the method which consists in coding your own bowplot is far more complex (see Add-on 2 in attached file number two)


If the weights are strictly positive integers (which is the simpler case) use this:
 

restart

with(Statistics):

N       := 10:
data    := Sample(Normal(0, 1), N):

# non-weighted data

evalf[5](FivePointSummary(data));

Vector[column]([[minimum = -1.6349], [lowerhinge = -.61709], [median = 0.72465e-1], [upperhinge = 1.0065], [maximum = 1.7288]])

(1)

# weighted data
weights := [ seq(rand(1..10)(), n=1..N) ];

sample := `<,>`( seq(data[n]$weights[n], n=1..N) );
evalf[5](FivePointSummary(sample));

weights := [10, 2, 8, 10, 9, 1, 6, 7, 7, 3]

 

sample := Vector(4, {(1) = ` 1 .. 63 `*Vector[column], (2) = `Data Type: `*float[8], (3) = `Storage: `*rectangular, (4) = `Order: `*Fortran_order})

 

Vector(5, {(1) = minimum = -1.6349, (2) = lowerhinge = -.84476, (3) = median = -0.25428e-1, (4) = upperhinge = .21447, (5) = maximum = 1.7288})

(2)

BoxPlot([data, sample], axis[1]=[tickmarks=[1="unweighted", 2="weighted"]])

 

 


Download Boxplot_of_weighted_data.mw



If weights are strictly positive real numbers (a little bit more complex case) use this file
(look more specifically  the Maple issue of Add-on 3).

 

restart

with(Statistics):

Seed := 171803456472246;
randomize(Seed);

171803456472246

 

171803456472246

(1)

N       := 10:
data    := sort(Sample(Normal(0, 1), N)):
weights := [ seq(rand(0. .. 10. )(), n=1..N) ]:

# non-weighted data

evalf[5](FivePointSummary(data));
print():

interface(rtablesize=N+1):
VW := evalf[5](`<,>`(`<|>`("Values", "True weights"), `<|>`(data^+, < weights >)));

Vector[column]([[minimum = -2.3010], [lowerhinge = -.69574], [median = -.31568], [upperhinge = .55150], [maximum = 1.0886]])

 

NULL

 

VW := Matrix(11, 2, {(1, 1) = "Values", (1, 2) = "True weights", (2, 1) = -2.3010, (2, 2) = 4.3973, (3, 1) = -1.2398, (3, 2) = 9.3274, (4, 1) = -.69574, (4, 2) = 8.4820, (5, 1) = -.69352, (5, 2) = 1.0207, (6, 1) = -.52879, (6, 2) = 1.2482, (7, 1) = -.10258, (7, 2) = 2.8382, (8, 1) = .18670, (8, 2) = .62319, (9, 1) = .55150, (9, 2) = 5.5256, (10, 1) = .93235, (10, 2) = 5.5349, (11, 1) = 1.0886, (11, 2) = 8.4650})

(2)


FROM WEIGHTED TO UNWEIGHTED DATA

prob := weights /~ add(weights):
PT   := RandomVariable(ProbabilityTable(prob)):

UseHardwareFloats := false:

# The larger "LargeNumber", the closer the weights in sample to the real weights "weights"

LargeNumber := 10^5:
DataNumbers := round~(Sample(PT, LargeNumber)):

sample := Vector(LargeNumber, i -> data[DataNumbers[i]]):


evalf[5](FivePointSummary(sample));
print():

TS := Tally(sample):
ST := sort(evalf[4](lhs~(TS)) =~ rhs~(TS), key = (x -> lhs(x))):

# What are the weights we generate?

SW := evalf[5]( rhs~(ST) /~ (LargeNumber/add(weights)) ):

`<|>`(VW, Vector(["Weights in sample", SW[]]))
 

Vector[column]([[minimum = -2.3010], [lowerhinge = -1.2398], [median = -.52880], [upperhinge = .93235], [maximum = 1.0886]])

 

NULL

 

Matrix([["Values", "True weights", "Weights in sample"], [-2.3010, 4.3973, 4.5109], [-1.2398, 9.3274, 9.3545], [-.69574, 8.4820, 8.5130], [-.69352, 1.0207, .99388], [-.52879, 1.2482, 1.2245], [-.10258, 2.8382, 2.7960], [.18670, .62319, .62983], [.55150, 5.5256, 5.4635], [.93235, 5.5349, 5.4782], [1.0886, 8.4650, 8.4987]])

(3)

BoxPlot([data, sample], axis[1]=[tickmarks=[1="unweighted", 2="weighted"]])

 


Add-on 1

CONSTRUCTION OF AN UNWEIGHTED SAMPLE

IMO more complex than what I did above, but could be maybe an option when the size of data is large

Unweight := proc(Data, Weights, LargeNumber)
  local prob, PT, DataNumbers, sample:
   
  UseHardwareFloats := false:

  prob        := weights /~ add(weights):
  PT          := RandomVariable(ProbabilityTable(prob)):
  DataNumbers := round~(Sample(PT, LargeNumber)):
  sample      := Vector(LargeNumber, i -> data[DataNumbers[i]]):

  return sample
end proc:

BoxPlot([data, Unweight(data, weights, 10^5)], axis[1]=[tickmarks=[1="unweighted", 2="weighted"]])

 


Add-on 2

BOXPLOT RECONSTRUCTION OF WEIGHTED DATA

IMO more complex than what I did above, but could be maybe an option when the size of data is large

WBoxPlot := proc(Data, Weights, MyColor)
  local W_mean, W_median, W_Q25, W_Q75, W_deciles,
        W_upper, W_lower, W_outlier, W_boxplot,
        cumprob, k:

  uses plots, plottools:

  W_mean    := Mean    (Data, 'weights'=Weights):
  W_median  := Median  (Data, 'weights'=Weights):
  W_Q25     := Quantile(Data,  0.25, 'weights'=Weights):
  W_Q75     := Quantile(Data,  0.75, 'weights'=Weights):

  # This is the natural command you might thinkto to compute deciles.
  # But as shown in Add-on 3 it returns wrong results.
  # W_deciles := seq(Quantile(Data,  d, 'weights'=Weights), d=0.1..0.9, 0.1):
  #
  # So I use instead


  cumprob   := CumulativeSum(Weights) / add(Weights):
  W_deciles := NULL:
  for k from 0.1 to 0.9 by 0.1 do
    W_deciles := W_deciles, evalf[5]( data[ListTools:-BinaryPlace(cumprob, k)+1] )
  end do;

  W_upper   := min(max(Data), W_Q75+3/2*(W_Q75-W_Q25)):
  W_lower   := max(min(Data), W_Q25-3/2*(W_Q75-W_Q25)):
  W_outlier := Select((t -> is(t < Q_Lower or t > W_upper)), Data):

  W_boxplot := display(
    rectangle([-1, W_Q25], [1, W_Q75], color=MyColor)
    , plot([[-1, W_median], [1, W_median]], color=black)
    , plot([[0, W_Q75], [0, W_upper]], color=black)
    , plot([[0, W_Q25], [0, W_lower]], color=black)
    , plot([[-0.5, W_upper], [0.5, W_upper]], color=black)
    , plot([[-0.5, W_lower], [0.5, W_lower]], color=black)
    , pointplot([seq([0, W_deciles[i]], i=1..9)], symbol=circle, symbolsize=15, color=black)
  ):

  return W_boxplot
end proc:
 

use plots, plottools in
  display(
    BoxPlot([data, sample])
    , translate(scale(WBoxPlot(data, weights, "ForestGreen"), 0.75/2, 1), 3, 0)
    , axis[1]=[tickmarks=[1="unweighted", 2="weighted", 3="weighted like boxplot"]]
  )
end use

 


Add-on 3

A MAPLE ISSUE

Maple uses several methods to compute quantile (referenced by an integer from 1 to 8, see the corresponding help page).
The default method has number 7 and gives unexpected results when unequal weights are used.
This issue affects Percentile and Decile too.

So be extremely carefull while using these procedures with unequal weights

printf("This value is correct\n"):

Median    (data, 'weights'=weights);


printf("\nThese three values (method=default) are wrong\n"):

Quantile  (data,  0.5, 'weights'=weights);
Percentile(data,  50, 'weights'=weights);
Decile    (data,  5, 'weights'=weights);

# This is the reason why percentiles are not correctly placed on the green boxplot

This value is correct

 

-.5287852860

 


These three values (method=default) are wrong

 

-.2841943558

 

-.2841943558

 

-.2841943558

(4)

printf("\nThese three values (method=1) are correct\n"):

Quantile  (data,  0.5, 'weights'=weights, 'method'=1);
Percentile(data,  50, 'weights'=weights, 'method'=1);
Decile    (data,  5, 'weights'=weights, 'method'=1);
print():

printf("\nThese three values (method=2) are correct\n"):

Quantile  (data,  0.5, 'weights'=weights, 'method'=2);
Percentile(data,  50, 'weights'=weights, 'method'=2);
Decile    (data,  5, 'weights'=weights, 'method'=2);


These three values (method=1) are correct

 

-.5287852860

 

-.5287852860

 

-.5287852860

 

 


These three values (method=2) are correct

 

-.5287852860

 

-.5287852860

 

-.5287852860

(5)

# The computations are correct for the unweighted sample:

Median    (sample);
Quantile  (sample, 0.5);
Percentile(sample, 50);
Decile    (sample, 5);

-.5287852860

 

-.5287852860

 

-.5287852860

 

-.5287852860

(6)

# How to compute correctly deciles of weighted data

cumprob  := CumulativeSum(prob):

deciles := NULL:
for k from 0.1 to 0.9 by 0.1 do
  deciles := deciles, [k, evalf[5]( data[ListTools:-BinaryPlace(cumprob, k)+1] )]
end do:
`<,>`(< ':-Probability' | ':-Decile' >, convert([deciles], Matrix))

Matrix([[Probability, Decile], [.1, -1.2398], [.2, -1.2398], [.3, -.69574], [.4, -.69574], [.5, -.52879], [.6, .55150], [.7, .55150], [.8, .93235], [.9, 1.0886]])

(7)

# Check these values by using the unweighted sample

deciles := NULL:
for k from 1 to 9 do
  deciles := deciles, [k, evalf[5]( Decile(sample, k) )]
end do:
`<,>`(< ':-Probability' | ':-Decile' >, convert([deciles], Matrix))

Matrix([[Probability, Decile], [1, -1.2398], [2, -1.2398], [3, -.69574], [4, -.69574], [5, -.52879], [6, .55150], [7, .55150], [8, .93235], [9, 1.0886]])

(8)

# MAPLE BUG

wrong_deciles := NULL:
for k from 1 to 9 do
  wrong_deciles := wrong_deciles, [k, evalf[5]( Decile(data, k, 'weights'=prob) )]
end do:
`<,>`(< ':-Probability' | ':-Decile' >, convert([wrong_deciles], Matrix))

Matrix([[Probability, Decile], [1, -2.0633], [2, -1.5054], [3, -1.0750], [4, -.76037], [5, -.28440], [6, .38940], [7, .72001], [8, .96591], [9, 1.0564]])

(9)

# Check that BoxPlot correctlycomputes deciles for unweihghted sample

buw := BoxPlot(sample):
op(1..-2, select(has, [op(buw)], POINTS)[2]):
Deciles_from_BoxPlot := map(k -> [k, evalf[5](%[k][2])], [$1..9]):

`<,>`(< ':-Probability' | ':-Decile' >, convert(Deciles_from_BoxPlot, Matrix));

Matrix([[Probability, Decile], [1, -1.2398], [2, -1.2398], [3, -.69574], [4, -.69574], [5, -.52879], [6, .55150], [7, .55150], [8, .93235], [9, 1.0886]])

(10)

 

 

Download Boxplot_of_real_weighted_data.mw


NOTE:
There exist several quantile estimators for weighted data and the one I used here is just the most commonly used and easier to understand.

See for instance 
Akinshin


To moderators: please stop converting this comment into an answer, thank you


the expression you want to textplot is the result of the optimization of a Lenard-Jones model you use in your previous question?

if it is so the attached file contains a full reply (likely not the same data points the LJ model comes from).
 

restart;

pts := [[1.020408163, .9618194785], [1.021860259, .9591836735], [1.047329717, .9183673469], [1.077147904, .8775510204], [1.112217401, .8367346939], [1.153643677, .7959183673], [1.202786007, .7551020408], [1.224489796, .7394037725], [1.266731737, .7142857143], [1.350499968, .6734693878], [1.428571429, .6426647396], [1.463093584, .6326530612], [1.632653061, .5927592700], [1.638566951, .5918367347], [1.836734694, .5653094517], [2.024654644, .5510204082], [2.040816327, .5499100928], [2.244897959, .5415404104], [2.448979592, .5375577894], [2.653061224, .5364038532], [2.857142857, .5371174931], [3.061224490, .5390909888], [3.265306122, .5419306191], [3.469387755, .5453753581], [3.673469388, .5492483720], [3.759428515, .5510204082], [3.877551020, .5532080969], [4.081632653, .5571718264], [4.285714286, .5612391621], [4.489795918, .5653739340], [4.693877551, .5695506292], [4.897959184, .5737510616], [5.102040816, .5779621428], [5.306122449, .5821743709], [5.510204082, .5863807930], [5.714285714, .5905762856], [5.775983717, .5918367347], [5.918367347, .5943431266], [6.122448980, .5978993957], [6.326530612, .6014214453], [6.530612245, .6049104007], [6.734693878, .6083674439], [6.938775510, .6117937612], [7.142857143, .6151905094], [7.346938776, .6185587956], [7.551020408, .6218996660], [7.755102041, .6252141001], [7.959183673, .6285030098], [8.163265306, .6317672398], [8.219364040, .6326530612], [8.367346939, .6345736540], [8.571428571, .6371910423], [8.775510204, .6397830180], [8.979591837, .6423509843], [9.183673469, .6448962158], [9.387755102, .6474198713], [9.591836735, .6499230055], [9.795918367, .6524065794], [10.00000000, .6548714697]]:

model := a[1] + a[2]*((a[3]/Gamma)^a[4] - (a[5]/Gamma)^a[6]);

a[1]+a[2]*((a[3]/Gamma)^a[4]-(a[5]/Gamma)^a[6])

(1)

K := unapply(model, Gamma);
J := add((map2(op, 2, pts) -~ K~(map2(op, 1, pts)))^~2):
opt := evalf[6]( Optimization:-NLPSolve(J, assume=nonnegative) );

proc (Gamma) options operator, arrow; a[1]+a[2]*((a[3]/Gamma)^a[4]-(a[5]/Gamma)^a[6]) end proc

 

Warning, limiting number of major iterations has been reached

 

[0.810744e-4, [a[1] = .564441, a[2] = .350148, a[3] = 1.32558, a[4] = 2.94386, a[5] = 1.03995, a[6] = 1.69485]]

(2)

alias(STS = StringTools:-Substitute):


string_model := convert(model, string);
values       := evalf[3](opt[2])

"a[1]+a[2]*((a[3]/Gamma)^a[4]-(a[5]/Gamma)^a[6])"

 

[a[1] = .564, a[2] = .350, a[3] = 1.33, a[4] = 2.94, a[5] = 1.04, a[6] = 1.69]

(3)

for n from 1 to 6 do
  string_model := STS(string_model, convert(lhs(values[n]), string), convert(rhs(values[n]), string))
end do:

plots:-textplot([0, 0, cat("W__LJ = ", string_model)], axes=none,'font'=["helvetica","roman",25], size=[1000, 100])

 

 


 

Download display_formula_mmcdara.mw


(UPDATED: please do not turn this comment into an answer)


In your procedure the same quantity m is computed each time the loop is executed. So when theloop ends m contains the last result (here 11).
If you want to procedure to return all the values of m, you must record them in some structure.

For instance (tst returns a list)

tst := proc (M) 
  local i, m; 
  m := NULL; 
  for i from 2 to numelems(M)+1 do 
    m := m, M[1]-M[i-1] 
  end do; 
  return [m] 
end proc:


Or (tst returns a vector)

tst := proc (M) 
  local i, m; 
  m := Vector(numelems(M)):
  for i from 2 to numelems(M)+1 do 
    m[i-1] := M[1]-M[i-1] 
  end do; 
  return m
end proc:


Or more simply;

M[1] -~ M[2..-1]

 

@mz6687 

Here is the solution but it doesn't look to the image you sent before:
 

restart

with(LinearAlgebra):

A := kappa^3+(-(3*I)*m0-I*lambda-I*a[1]-I*a[2])*kappa^2+(-3*m0^2+(-2*lambda-2*a[1]-2*a[2])*m0+lambda^2-a[1]*a[2]+c^2)*kappa+I*m0^3+(I*lambda+I*a[1]+I*a[2])*m0^2+(-I*c^2-I*lambda^2+I*a[1]*a[2])*m0-I*lambda^3+(-I*a[1]-I*a[2])*lambda^2+(-I*c^2-I*a[1]*a[2])*lambda+(-I*c^2+I*c[2]^2)*a[2]-I*a[1]*c[2]^2:

B := (2*I)*c^6+(-(8*I)*c^2+(4*I)*a[1]^2+(4*I)*a[2]^2-(8*I)*c[1]^2-(8*I)*c[2]^2-(4*I)*n0+4*omega)*lambda^4+((8*I)*a[1]*c[1]^2+(8*I)*a[2]*c[2]^2)*lambda^3+(-(2*I)*c[2]^4+(-(6*I)*c^2+(2*I)*a[1]^2-(2*I)*c[1]^2-(4*I)*n0+4*omega)*c[2]^2+((2*I)*c^2-(2*I)*a[2]^2-(2*I)*c[1]^2)*a[1]^2+(2*I)*c^4+(-(8*I)*c[1]^2+(4*I)*n0-4*omega)*c^2+(4*I)*a[2]^2*c[1]^2-(2*I)*omega^2+(4*c[1]^2-4*n0)*omega+(2*I)*n0*(-2*c[1]^2+n0))*lambda^2+((4*I)*a[2]*c[2]^4+4*a[2]*(I*c^2-I*a[1]^2+I*c[1]^2+I*n0-omega)*c[2]^2+(8*(I*c^2-I*a[2]^2*(1/2)+I*n0*(1/2)-(1/2)*omega))*a[1]*c[1]^2)*lambda+(omega-I*c^2-I*a[2]^2-I*n0)*c[2]^4+((I*c^2+I*a[2]^2+I*c[1]^2+I*n0-omega)*a[1]^2-(2*I)*a[1]*a[2]*c[1]^2+(c^2-2*a[2]^2-c[1]^2)*(I*c^2+I*n0-omega))*c[2]^2+(-(2*I)*c^4+(I*a[2]^2-(2*I)*c[1]^2-(3*I)*n0+3*omega)*c^2+(I*c[1]^2+I*n0-omega)*a[2]^2+I*omega^2+omega*(c[1]^2+2*n0)-I*(c[1]^2+n0)*n0)*a[1]^2-(8*I)*lambda^6+(-I*a[2]^2+(5*I)*n0-5*omega)*c^4+((-(2*I)*n0+2*omega)*a[2]^2+(4*I)*n0^2-(4*I)*omega^2-8*n0*omega)*c^2+(-I*n0^2+I*omega^2+2*n0*omega)*a[2]^2-(3*I)*n0*omega^2+I*n0^3-3*n0^2*omega+omega^3:

x2 := simplify(coeff(A, kappa, 2)/I^(2-2+1)):

``

s3 := simplify(coeff(B, omega, 3)/I^(2-3+1)):

sol := solve({x2, x1, s2}, {m0, n0, lambda})

{lambda = -3*RootOf(12*_Z^2+(6*a[1]+6*a[2])*_Z+c^2+a[1]^2+a[1]*a[2]+a[2]^2)-a[1]-a[2], m0 = RootOf(12*_Z^2+(6*a[1]+6*a[2])*_Z+c^2+a[1]^2+a[1]*a[2]+a[2]^2), n0 = -(5/6)*c^2+(1/6)*a[1]^2-(5/6)*a[1]*a[2]-RootOf(12*_Z^2+(6*a[1]+6*a[2])*_Z+c^2+a[1]^2+a[1]*a[2]+a[2]^2)*a[1]+(1/6)*a[2]^2-RootOf(12*_Z^2+(6*a[1]+6*a[2])*_Z+c^2+a[1]^2+a[1]*a[2]+a[2]^2)*a[2]}

(1)

valsol := simplify~({allvalues(sol)});

{{lambda = -(1/4)*a[1]-(1/4)*a[2]-(1/4)*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2), m0 = -(1/4)*a[1]-(1/4)*a[2]+(1/12)*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2), n0 = -(5/6)*c^2+(5/12)*a[1]^2-(1/3)*a[1]*a[2]-(1/12)*a[1]*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)+(5/12)*a[2]^2-(1/12)*a[2]*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)}, {lambda = -(1/4)*a[1]-(1/4)*a[2]+(1/4)*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2), m0 = -(1/4)*a[1]-(1/4)*a[2]-(1/12)*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2), n0 = -(5/6)*c^2+(5/12)*a[1]^2-(1/3)*a[1]*a[2]+(1/12)*a[1]*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)+(5/12)*a[2]^2+(1/12)*a[2]*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)}}

(2)

nops(valsol);  # You gave two solutions, not one

2

(3)

# Here is for instance solution 1 (solution 2 has the same form)

print~(valsol[1]):

lambda = -(1/4)*a[1]-(1/4)*a[2]-(1/4)*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)

 

m0 = -(1/4)*a[1]-(1/4)*a[2]+(1/12)*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)

 

n0 = -(5/6)*c^2+(5/12)*a[1]^2-(1/3)*a[1]*a[2]-(1/12)*a[1]*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)+(5/12)*a[2]^2-(1/12)*a[2]*(-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)

(4)

# A simpler display

Z := 'Z':
R := select(type, indets(valsol), `^`)[] = Z:
ToDisplay := collect~(subs(R, valsol[1]), Z):

print~([(rhs=lhs)(R), ToDisplay[]]):

Z = (-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)

 

lambda = -(1/4)*a[1]-(1/4)*a[2]-(1/4)*Z

 

m0 = -(1/4)*a[1]-(1/4)*a[2]+(1/12)*Z

 

n0 = (-(1/12)*a[1]-(1/12)*a[2])*Z-(5/6)*c^2+(5/12)*a[1]^2-(1/3)*a[1]*a[2]+(5/12)*a[2]^2

(5)

ToDisplay

{lambda = -(1/4)*a[1]-(1/4)*a[2]-(1/4)*Z, m0 = -(1/4)*a[1]-(1/4)*a[2]+(1/12)*Z, n0 = (-(1/12)*a[1]-(1/12)*a[2])*Z-(5/6)*c^2+(5/12)*a[1]^2-(1/3)*a[1]*a[2]+(5/12)*a[2]^2}

(6)

# Or even simpler:

ToDisplay := map(u -> lhs(u) = value(``(numer(rhs(u))) / denom(rhs(u))), ToDisplay):
print~([(rhs=lhs)(R), ToDisplay[]]):

Z = (-12*c^2-3*a[1]^2+6*a[1]*a[2]-3*a[2]^2)^(1/2)

 

lambda = (1/4)*``(-a[1]-a[2]-Z)

 

m0 = (1/12)*``(-3*a[1]-3*a[2]+Z)

 

n0 = (1/12)*``(-Z*a[1]-Z*a[2]-10*c^2+5*a[1]^2-4*a[1]*a[2]+5*a[2]^2)

(7)

 

NULL


 

Download solA_mmcdara.mw


If you really want this "imaginary" form your imagedisplays (I don't find any interest in it), you can obtain it after some dymnastis:

eval(lhs(R), op(1, lhs(R)) = -op(1, lhs(R))*J^2):
newR := op(2, (combine(simplify(%), radical) assuming J > 0)) = Y:
eval( collect(subs(R, valsol[2][1]), Z), Z=J*Y):

s, r := selectremove(has, [op(rhs(%))], J):
convert(add(s) + J^2*(-add(r)), horner, J):
J * value(``(numer(op(1, %))) / denom(op(1, %))):

lambda = subs(J=I, %);
With = ( (rhs=lhs)(newR) )
                        1                        
               lambda = - I (I a[1] + I a[2] + Y)
                        4                        
         /                                             (1/2)\
         |    /    2         2                       2\     |
  With = \Y = \12 c  + 3 a[1]  - 6 a[1] a[2] + 3 a[2] /     /

 

@Andiguys 

# First thing: construct TRC correctly

TRC_ok := eval(TRC, {alpha = (u -> 0.02*exp(0.4*u)), beta = (u -> 0.2e-1*(1-exp(.5*I2)))})
                        12                   
          4.267000015 10   + 90 Q2 - 21.25 Q1

                             7               
             + 4.000000000 10  I1 exp(0.4 I1)

             + 2000000000 I2 (0.02 - 0.02 exp(0.5 I2))

# Assuming Q2 is nonnegative, TRC_ok is obviously mimimum when Q2=0.

TRC_reduced := eval(TRC_ok, Q2=0);
                12                            7               
  4.267000015 10   - 21.25 Q1 + 4.000000000 10  I1 exp(0.4 I1)

     + 2000000000 I2 (0.02 - 0.02 exp(0.5 I2))

# To be sure of what you are about to do verify what are the indeterminates of TRC_ok:

indets(TRC_ok, name)
                        {I1, I2, Q1, Q2}

# As you commented C1, C2 and C3, the Minimize command cannot work

C1 := 4e8 >= Q1,  Q1 >= .6e7;
C3 := I1 <= I2;
                              8      6      
                    Q1 <= 4 10 , 6 10  <= Q1
                            I1 <= I2

Next:

# Do you really want to write this:
#  C2 := if Q1= 4*(10)^(8) then Q2 =0 else Q2 = (x*d*h)-(delta*Q1*h)
# which meand that Q2 is always equal to (x*d-delta*Q1)*h excepted when Q2=4e8 where Q1=0 ???
#
# As you plane to use a numerical algorithm (Minimize) the probability that Q2=4e8 at some 
# iteration is exactly null... unless the minimum verifies Q1=4e-8 (limit of the first C1 
# condition).

Can we find "by hand" the minimum you are looking for?
TRC_reduced is obviously minimal when Q1 is maximal (Q1=4e8).

# The expression of TRC_reduced shows it is minimal when Q1 is maximal, thus 

evalf(eval(TRC_reduced, Q1=4e8));
               12         7                        9
       4.258 10   + 4.0 10  I1 exp(0.4 I1) + 2.0 10  I2 (0.02 - 0.02 exp(0.5 I2))

As a simple plot shows, the derivative wrt I2 of this expression is negative for 0 <= I2 <= 6.
Thus the minimum of TRC_reduced corresponds to Q1=4e8 and  I2=6.
It remains 

evalf(eval(TRC_reduced, [Q1=4e8, I2=6]));
                        12         7               
                4.254 10   + 4.0 10  I1 exp(0.4 I1)

... which is obviously minimum for I1=0 (a value which verifies I1 <= I2):

evalf(eval(TRC_reduced, [Q1=4e8, I2=6, I1=0]));
                             12
                     4.254 10  

(By the way I think you already asked  this same question and I already answered it. As I don't have time to verify this, please forgive me I'm wrong).

Whatever, here is a way to build an histogram from couples (bins, counts).
I assume your data are a list of equalities bin=count, where bin=a..b is a range and count is an integer.
For other structures, for instance a two-column matrix whose column 1 contains the bins and column 2 the counts, proceed as explained at the end oftheattached file.

Bins_and_counts_histogram.mw

I remain at your disposal for further help.

Remark: in the arrached file STEP 2 shows how to get the bins and counts of raw data while using TallyInto.

If you want to estimate the size and shape parameters of the Weibull random variable the data S could bea sample drawn from, you just have to do this

mle := MaximumLikelihoodEstimate(Weibull(a, b), S);
                 mle := [a = 129.944334168688, b = .9301095062]

If you want to build the corresponding random variable for any other purpose, I advice you to do this

W   := RandomVariable(Weibull(a, b)):
mle := MaximumLikelihoodEstimate(W, S):
W__opt := Specialize(W, mle):

# Example of use

N := numelems(S);
QuantilePlot(Sample(W__opt, N), S):

Point 1: Your differential system contains 8 parameters you have to fix before solving it numerically 

ind := convert(indets(ODE union IC, name) minus {eta}, list);
         [Le, Pr, alpha, N[b], N[t], a[1], a[2], a[3]]

Point 2: When you write

dsolve(eval(ODE union IC, a[i]=a), ...

what index "i" are you refering to?

Point 3: the output of your procedure finda is 

eval(f(eta),g(eta),h(eta),tt(10));

But eval needs two and only two argiments: what does this command of yours is meant to do?

Point 4: if you meant this

eval([f(eta),g(eta),h(eta)],tt(10));

the output of finda is a list with 3 elements, so 

fsolve(finda(a)-1, a=0..1);

is a nonsense because a list cannot be equal to a scalar ("1").

Look here for more explanations Shoot_Blasius-mmcdara.mw



See help(LinearAlgebra[Eigenvectors]): the output of Eigenvectors is a sequence val, vec wher val is a vector containing the eigenvalues and vec the matrix of eigenvectors.
To simplify the output of Eigenvectors do this

simplify([Eigenvectors(L)])

# or

val, vec := Eigenvectors(L):
simplify(vec)


Here is a more synthetic expression of the eigenvalues and eigenvectors:
synthetic.mw

Be aware of undesired effects produced by break, look to this example

restart
for n from 1 to 4 do
  for i from 1 to 2 do 
    if n < 2 then 
      printf("   Within if structure %d  %d\n", n, i)
    else
      break
    end if; 
    printf("Exit if structure %d  %d\n\n", n, i)
  end do;
end do;

   Within if structure 1  1
Exit if structure 1  1

   Within if structure 1  2
Exit if structure 1  2

So just replace

        if Norm(err) <= tol then 
            h := 0.1 * h * (c + 1) * (tol/Norm(err))^(0.2);
        else 
            break
        end if;

by

        if Norm(err) <= tol then 
            h := 0.1 * h * (c + 1) * (tol/Norm(err))^(0.2);
        end if;

Two comments:

Are you sure Digits:=30 is necessary and that  Digits:=10 (default value) would npt ne enough?

Given the large number of points I would prefer one of these two graphics (but it is personal opinion):

numerical_plot_y1 := plot(time_t, numerical_array_y1, style = point, symbol=point, color = blue, legend = ["TFIBF"]):
exact_plot_y1 := plot(time_t, exact_array_y1, style = point, symbol=point, color = red, legend = ["EXACT"]):
display({numerical_plot_y1, exact_plot_y1}, size=[800, 400]);

# or

numerical_plot_y1 := plot(time_t, numerical_array_y1, style = line, color = blue, legend = ["TFIBF"]):
exact_plot_y1 := plot(time_t[1..-2], exact_array_y1[1..-2], style = line, color = red, legend = ["EXACT"]):
display({numerical_plot_y1, exact_plot_y1}, size=[800, 400]);

In Maple 2015 (the version I use) printlevel is an argument of kernelopts, not of interface.
Did you check that?
Note that you can also write printlevel := n directly.

Just a question: Why do you want to change the value of printlevel within your procedure?
If you want to display intermediate results I recommend you to use trace instead:

restart
fac := proc(n::integer)
    if n = 0 then
        1
    else
        n * thisproc(n - 1);  
    end if;
end proc;
proc(n::integer)  ...  end;
fac(5)
                              120
trace(fac):
fac(5)

{--> enter fac, args = 5
{--> enter fac, args = 4
{--> enter fac, args = 3
{--> enter fac, args = 2
{--> enter fac, args = 1
{--> enter fac, args = 0
                               1
<-- exit fac (now in fac) = 1}
                               1
<-- exit fac (now in fac) = 1}
                               2
<-- exit fac (now in fac) = 2}
                               6
<-- exit fac (now in fac) = 6}
                               24
<-- exit fac (now in fac) = 24}
                              120
<-- exit fac (now at top level) = 120}
                              120


Next proceed as described in the attached file:
Ode_New_TWO_phase_mmcdara.mw

Advice...
Odes 2 and 4 both form a subsystem with unknown functions h(Theta) and H(Teta) that you should solve apart.
Note that it can be solved numerically or formally.
Once done, plug this soution into odes 1 and 3 (it's better to have solved the first substystem formally, but you can do the same using the option known [see help(dsolve[numeric]) ] if you solved the first subsystem numerically).

Errors to fix: 

  • The first subsystem requires 3 ic/bc and you give 4.
  • The first subsystem requires 5 ic/bc and you give 4.

@Prakash J 

Look at this file Difference_mmcdara.mw

@C_R Feel free to delete or reappropriate this comment if you consider that I have interfered inappropriately in your exchanges (I am no longer interested in this race for badges which seems to me to pollute Mapleprimes :-) )

To moderators: this post is deliberately a comment and not an answer, so please don't convert it into an answer. Thanks. 

4 5 6 7 8 9 10 Last Page 6 of 59