Carl Love

Carl Love

28025 Reputation

25 Badges

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

MaplePrimes Activity


These are answers submitted by Carl Love

Since you tried partial fractions, I thought that maybe you'd want a step-by-step work through of the "telescoping" method by which the sum of such a series is found. Here it is.
 

restart:

T:= 1/i/(i+1)/(i+2)/(i+3);

1/(i*(i+1)*(i+2)*(i+3))

(1)

We want this sum:

S:= Sum(T, i= 1..infinity);

Sum(1/(i*(i+1)*(i+2)*(i+3)), i = 1 .. infinity)

(2)

We suspect "telescoping" when the general term contains parts that also occur in subsequent terms, i.e., i+1, i+2, i+3. An analysis of it usually begins by breaking the general term itself into a sum. In this case, that means a partial-fraction decomposition.

F:= unapply(convert(T, parfrac, i), i);

proc (i) options operator, arrow; (1/6)/i+(1/2)/(i+2)-(1/6)/(i+3)-(1/2)/(i+1) end proc

(3)

Add an arbitrary number of consecutive terms from anywhere in the series to see the effect of "telescoping" cancellations.

sum(F(i+j), j= 0..n);

-(1/6)/(i+n+1)+(1/3)/(i+n+2)-(1/6)/(i+n+3)+(1/6)/i-(1/3)/(i+1)+(1/6)/(i+2)

(4)

This is called a partial sum of the series. Its limit is the sum of the series. Obviously the terms with n in the denominator go to 0.

limit(%, n= infinity);

(1/3)/(i*(i+1)*(i+2))

(5)

The actual sum that we want begins at i=1.

eval(%, i= 1);

1/18

(6)

Check if Maple concurs:

value(S);

1/18

(7)

 


 

Download TelescopingSeries.mw

Hints:

1. The command fsolve when applied to a univariate polynomial and given the option complex will return all the roots. 

2. The command abs returns the modulus.

3. The command Digits:= 15 should give you enough leeway that you can fully trust the first 10 digits.

In writing the assignment, your instructor inadvertently used f in two different ways: as a coefficient and as a function. This is of course confusing to Maple. Tom's Answer gets around this by using and h as the functions. 

One way to interpolate a data list for a smoother plot is

S:= [seq(j^2, j= -5..5)]:
plot(Interpolation:-SplineInterpolation([$1..nops(S)], S), 1..nops(S));

The SplineInterpolation command converts the data from a list to a function, thus it can be plotted with plot but not listplot.

You mentioned "time series". If you are working with data that are actually indexed by absolute times (as measured by calendars and clocks), then look at Maple's TimeSeries package.
 

Here are the first and last steps to do it. There's a step in the middle that I can't be definite about without seeing a worksheet containing the tensor. You can post your worksheet by editing your Question and using the green uparrow on the toolar. You edit the Question by using the "More..." pull-down menu in its lower right corner.

First step: Create an Array of indexed names

Arr:= Array((1..4)$6, ()-> index(myT, args)):

This step creates an array of 4096 names with indices in 6 dimensions, each running from 1 to 4. The names are all of the form myT[i,j,k,l,m,n].

Middle step: Match the names to the tensor's components: I'll suppose that the tensor is named T. This step may be as easy as

Matches:= Arr =~ T: ,

but I'm not sure if the elementwise operator =~ will work in your case. That's why I need to see your worksheet.

Last step: Convert to a set

mySet:= {seq(Matches)}:

Now mySet is set of 4096 equations, each of the form 
myT[i,j,k,l,m,n] = ....

Example: Retrieving a value: I don't recommend that you actually assign the values (although you may do it with assign~(mySet)). Rather, any desired value can be retrieved as in this example:

eval(myT[1,2,3,4,1,2], mySet);

plot(ListTools:-Enumerate(S));

The shortest command I can think of for this is

plot(<<[$1..nops(S)]>|<S>>);

If you're willing to forego any special handling of exceptional conditions (such as fsolve not being able to find a solution), and you're satisfied with just one solution, then it can be done as a single command:

Z:= eval(Matrix((2,2), symbol= z), fsolve({seq(A)}, indets(A,name)=~ 0..1)); 

Your dsolve command is missing a closing brace }. This is the type of easy-to-find error to look for when you get a "unable to match delimiters" error message.

My previous Answer only needs a trivial modification for the new integrals. You seem to have completely ignored that Answer. Here is the modification:

U:= Matrix(
   N, 
   (i,j)-> 
      int(
         psi[i](x)*omega[iquo(i-1,M)+1](x)*
            int(u(x,t)*psi[j](t)*omega[iquo(j-1,M)+1](t), t= 0..1),
         x= 0..1
      )
);

 

It's fairly easy to make them wider, as ellipses, by padding the labels before and after with spaces:

G:= GraphTheory:-CompleteGraph(5):
G1:= GraphTheory:-RelabelVertices(
   G, 
   sprintf~("    %a    ", GraphTheory:-Vertices(G))
):
GraphTheory:-DrawGraph(G1, stylesheet= "legacy");

Thanks. Your Matlab work shows both sufficient effort and sufficient understanding that I'm willing to share my Maple code.

Your solution of the differential equation is correct. The plotting "blip" that you showed (I wish that you hadn't deleted it!!) comes, I think, from Matlab's spline command. I don't have Matlab to check.
 

restart:

Digits:= 15:

#
#All problem specs are in this section.
#
params:= {X0= 0.05, B= 3.9, Nrange= 0..30, Yrange= 0..1}:
params:= params union
   #recurrence formula:
   {R= subs(params, n-> B*R(n)*(1-R(n)))}
:
(Nrange, Yrange):= (0..30, 0..1):

#
#Everything else is generic (and could be applied to any 1st-order recurrence
#once the parameters are specified).
#
 
#recursive procedure for the difference equation:
X:= subs[eval](
   _R= eval(R, params), R= thisproc,
   proc(n::nonnegint) option remember; _R(n-1) end proc
):
X(lhs(Nrange)):= eval(X0, params) #Put initial value in remember table.
:

#equivalent differential equation (which has a simple symbolic solution in
#this case):
F:= rhs(
   dsolve(
      subs(R= Y,  eval({diff(Y(n),n)+Y(n) = R(n), Y(lhs(Nrange))=X0}, params))
   )
);

29/(39+541*exp(-(29/10)*n))

#plot of both
plot(
   [F, [seq([k,X(k)], k= Nrange)]], n= Nrange,
   style= [line, pointline], thickness= [1,0], size= [600,400],
   axes= boxed, view= [Nrange, Yrange],
   legend= [continuous, discrete], gridlines,
   title= typeset(
      "Logistic example:  ", beta=eval(B,params), ", ", 'X'[0]=eval(X0,params)
   ),
   titlefont= [TIMES, BOLD, 16],
   labels= [`n\n`, 'X'[n]], labelfont= [HELVETICA, BOLD, 14]
);

 


 

Download LogisticMap.mw

Please let me know if you have any trouble with the above code, or any other questions. I don't have Maple 18 to check this, but I didn't conciously use anything that wouldn't work in Maple 18. Note that the plot looks much better in the actual worksheet than it's rendered above by MaplePrimes.

@syhue You should check the help before giving commands that are essentially random garbage. You'll see that read is a command that has nothing to with this, and to_number means nothing at all to Maple.

Here's a complete RSA example, from an original string plaintext, converted to numeric, encrypted, decrypted, and returned to plaintext.

restart:
#I just need any (n,e,d) for this demo; I don't care if they're secure.
(p,q):= 'nextprime(rand())'$2: 
(n,e):= (p*q, 2^16+1):  d:= e^(-1) mod (p-1)*(q-1):
#message in string form:
P:= "Return to headquarters.": 
bby:= 2^8: #base of original bytes 
#base of "chunkified" message:
bch:= bby^iquo(ilog2(n), ilog2(bby)):
#message in numeric "chunk" form:
M:= convert(convert(P, 'bytes'), 'base', bby, bch);
    M := [2055956401727290500434, 2109951468272787744800, 
          199505372532]
C:= `&^`~(M,e) mod n; #Encrypt.
    C := [11266093172382474618748, 59649508547257401648253, 
          57058717428414196529185]
M1:= `&^`~(C,d) mod n; #Decrypt.
    M1 := [2055956401727290500434, 2109951468272787744800, 
           199505372532]
evalb(M1=M); #accuracy check
                              true
#Convert back to string:
P1:= cat(convert~(convert~(M1, 'base', bby), 'bytes')[]);
                P1 := "Return to headquarters."
evalb(P1=P);
                              true

Please let me know if there's anything that you don't understand about the above.

Actually, no loops or seqs are needed, just two lines of code. But there are some problems with your specs! So, I have made the following three assumptions to correct them:

  1. goes from to M-1, not to M-1.
  2. The integral wrt t can be factored out of the integral wrt x.
  3. The ns in the two integrals are different: One corresponds to i and one corresponds to j.

Please confirm that my assumptions are correct! If they are correct, then the matrix can be created by

(k,M):= (2,2):
intpsiomega:= ij-> local t; int(psi[ij](t)*omega[iquo(ij-1,M)+1](t), t= 0..1);
U:= Matrix(2^k/2*M, mul@intpsiomega~@`[]`);

That's coded for Maple 2019. If you're using an earlier Maple, a tiny adjustment will be needed. Let me know.

As I've explained to you before, when doing modular exponentiation you should use &^ instead of ^.  (In 2-D Input mode, enter the operator as &\^ (the backslash won't appear).) If the exponents e or d are as large as would typically be used in cryptography, then you must use &^; using will error out or crash the system.

Compare timings of the two:

C:= CodeTools:-Usage(M^e mod n, iterations= 10^5):
memory used=4.29KiB, alloc change=-3.01MiB, cpu time=17.81us,
real time=17.76us, gc time=8.12us

C:= CodeTools:-Usage(M &^ e mod n, iterations= 10^5):
memory used=104 bytes, alloc change=0 bytes, cpu time=1.09us,
real time=1.01us, gc time=0ns


As the exponent grows, the time of the first method grows exponentially, whereas the second method's time just grows a tiny amount:

C:= CodeTools:-Usage(M^(e^2) mod n, iterations= 10):
memory used=53.89MiB, alloc change=101.21MiB, cpu time=189.10ms,
real time=188.40ms, gc time=0ns

C:= CodeTools:-Usage(M &^ (e^2) mod n, iterations= 10^5):
memory used=144 bytes, alloc change=0 bytes, cpu time=1.25us,
real time=1.27us, gc time=0ns

The time of the first method has increased by a factor of more than 10,000 (note the unit change from microseconds to milliseconds)! But the second method took only 15% longer. And e^2 would still be an extremely small exponent for cryptographic purposes.
 

 

You need to set an artificial finite value for infinity, such as 10.

First 125 126 127 128 129 130 131 Last Page 127 of 395