Carl Love

Carl Love

28020 Reputation

25 Badges

12 years, 302 days
Himself
Wayland, Massachusetts, United States
My name was formerly Carl Devore.

MaplePrimes Activity


These are answers submitted by Carl Love

It is fairly easy to modify combstruct[count] and combstruct[allstructs] so that they have they have the desired behaviour: that they accept a range for the size argument. Here's the code to do it.

restart:
unprotect(combstruct):
combstruct[count]:= overload([
     proc(S::anything, Sz::identical(size)=range(nonnegint))
          option overload;
          local k;
          add(combstruct[count](S, size= k), k= op(2,Sz))
     end proc,
     combstruct[count]
]):
combstruct[allstructs]:= overload([
     proc(S::anything, Sz::identical(size)=range(nonnegint))
          option overload;
          local k;
          {seq(combstruct[allstructs](S, size= k)[], k= op(2,Sz))}
     end proc,
     combstruct[allstructs]
]):
protect(combstruct):

Example of use:

with(combstruct):
allstructs(Combination(5), size= 1..2);
{{1}, {2}, {3}, {4}, {5}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 3},
  {2, 4}, {2, 5}, {3, 4}, {3, 5}, {4, 5}}

count(Combination(5), size= 1..4);
                               30

To see all contexts,

op ~ (select(type, {Units:-GetUnits()}, indexed));

To see all the units for a given context, use this procedure:

UnitsOfContext:= c-> map2(op, 0, select(u-> u::indexed and op(u)=c, {Units:-GetUnits()})):

For example,

UnitsOfContext(troy);

There are several ways to do this problem that are more elegant than what I have below. However, I decided that you should see a straightforward approach first.

prod:= 1:  #Initialize accumulator variable.
for i to 100 do
     if isprime(i) then
          prod:= prod*sqrt(i)
     end if
end do:

prod;

Note that the print command in not an acceptable way to return results. You must be able to assign the results to a variable. Also note that it is not necessary to say isprime(i)=true; simply isprime(i) is enough.

Now here's a more elegant way:

sqrt(`*`(select(isprime, [$1..100])[]));


Like this:

restart:
test1r3 := (x,y)-> (1/2)*(-x+sqrt(x^2-4*y^2))/y:
n, N:= 100, 50:  # 50 frames, 100 points per frame
R:= evalf@RandomTools:-Generate(integer(range= 1..10), makeproc):
plots:-display([seq(plot([seq([k, test1r3(R(),R())], k= 1..n)], style= point), j= 1..N)], insequence);

While I applaud Mehdi's enthusiasm for some of the subtler details of indexing, I feel that his Answer suffers from "information overload" when one considers the level at which the Question was asked.

I think that this is the most natural way to create an 80-element column Vector of zeros:

V:= < [0$80] >:

See ?MVshortcuts and ?$ .

Common sense:

  1. Profit = Revenue - Cost  (money in - money out)
  2. Cost = Fixed cost + (cost per unit)*(units sold)
  3. Revenue = units sold * price

Units sold is however a function of price. But it helps here to express price as a function of units sold. Let p be price and x be units sold. The second to fourth sentences of the problem say that

p = 1400-20*(x-13)

Putting it together, we have

Profit = x*(1400 - 20*(x-13)) - (2000 + 1140*x)

limit(sum(1/(n+k), k= 1..n), n= infinity);
                             ln(2)

limit((n!)^(1/n)/n, n= infinity);
                            exp(-1)

d:= binomial(5,2):
mu:= add(min(pair), pair= combinat:-choose(5,2))/d;
                               2
var:= add((min(pair)-mu)^2, pair= combinat:-choose(5,2))/d;
                               1


You'll want the creation command for your Matrix to take account of the sparsity pattern, so use LinearAlgebra:-BandMatrix, like this:

macro(LA= LinearAlgebra):
d:= [$1..80]:
M:= LA:-BandMatrix(
     [(d/4)[5..80], [0$77], (d/2)[3..80], [0$79], 2*d, [0$79], (d/2)[1..78], [0$77], (d/4)[1..76]],
     datatype= float[8]
):

The command that you want is cat, short for "concatenate":

A:= 45:  ExportMatrix(cat("MIN", A, ".txt"), MINM):

You can also use sprintf, short for "string print formatted":

ExportMatrix(sprintf("MIN%d.txt", A), MINM):

You have Digits set to 5. This is often too few digits for fsolve to work with. I changed Digits to 15 for your first failed fsolve, and I got 0.172565524511021. If the extra digits are irrelevant, just truncate them.

Your second failed fsolve is not the same expression as the first!! Nor is it the same as the plotted expression. If I make it the same expression and change the range to 0.3..0.35, I get 0.309465065970785.

Here is the slightly modified worksheet:

Maple_-_Upload.mw

If the goal is some compact Maple code for it, then do

select(isprime, [$1..300]);

If the goal is efficiency, then use a Sieve of Eratosthenes, like this:

N:= 300:
P:= Vector(N, [0], fill=1):
for k from 4 by 2 to N do  P[k]:= 0  end do:
for p from 3 by 2 to isqrt(N) do
     if P[p]=0 then  next  end if;
     for k from p^2 by p to N do  P[k]:= 0  end do
end do:
convert(ArrayTools:-SearchArray(P), list);


(**)

restart:

Possible values of X are 2,3,4,5.

Common denominator:

(**)

d:= binomial(6,2);

15

X=2 can only be made by drawing two 1s.

(**)

P(X=2):= binomial(3,2)/d;

1/5

X=3 can only be made by drawing a 1 and a 2.

(**)

P(X=3):= binomial(3,1)*binomial(2,1)/d;

2/5

X=4 can be two 2s or a 1 and 3.

(**)

P(X=4):= (binomial(2,2)+binomial(3,1)*binomial(1,1))/d;

4/15

X=5 has to be a 2 and 3.

(**)

P(X=5):= binomial(2,1)*binomial(1,1)/d;

2/15

Check that it's a PDF:

(**)

add(P(X=k), k= 2..5);

1

Mean:

(**)

mu:= add(k*P(X=k), k= 2..5);

10/3

Variance:

(**)

var:= add((k-mu)^2*P(X=k), k= 2..5);

8/9

(**)

 


Download probability.mw

This one can be entered into Maple pretty much as it is written above:

restart:
F:= f@g:  f(-1):= 8:  D(f)(-2):= 4:  D(f)(5):= 3:  g(5):= -2:  D(g)(5):= 6:
D(F)(5);
                               24

First 348 349 350 351 352 353 354 Last Page 350 of 395