Carl Love

Carl Love

28160 Reputation

25 Badges

14 years, 9 days
Himself
Wayland, Massachusetts, United States
My name was formerly Carl Devore.

MaplePrimes Activity


These are answers submitted by Carl Love

Since Maple allows a newline character anywhere that it allows whitespace, continuation characters are very rarely needed. Your example would work just as well without the backslash. Even long strings can be split "simply "
"like "
"this."

There is no logical concept of a "line" of code in Maple. Statements can, and often do, go on for tens of lines.

That being said, I have no information about the situation in Maple IDE.

Instead of type(e, negative) you need to say is(e < 0). The type of an expression is an inherent property of the expression, and it is not affected by assumptions.

You should not use and in the assumptions; just separating them with the commas is logically equivalent to and.

Putting it together, your statement should be

is(e < 0) assuming  
     d1 > 0, d2 > 0, d3 > 0, Kw > 0, Ks > 0,
     0 < pfw1, pfw1 < 1, 0 < pfw2, pfw2 < 1, 0 < pfw3, pfw3 < 1,
     0 < pfs1, pfs1 < 1, 0 < pfs2, pfs2 < 1, 0 < pfs3, pfs3 < 1,
     d1-pfw1*Kw-pfs1*Ks > 1, d2-pfw2*Kw-pfs2*Ks > 1, d3-pfw3*Kw-pfs3*Ks > 1,
     pfw1 <> pfw2, pfw2 <> pfw3, pfs1 <> pfs2, pfs2 <> pfs3
;

Maple's response is false.

Addressing your question 2: There is no algorithm for deriving the conditions under which a complicated, non-polynomial, multivariate expression is negative (or positive, or zero).

Let's say that your expression with the h for the difference quotient is called dq. Then you need to say

limit(dq, h= 0);

Here's your problem:

f:= x-> x^3+3*cos(x):
dq:= (f(x+h)-f(x))/h:
limit(dq, h=0);

 

Change plot3d to plots:-implicitplot3d. Then adjust the ranges of x, y, and z to get a better plot.

Here's how to do it with the order. That is, how to run Maximize and save each call to the objective function and the order that the calls were made.

 

(**)

restart:

Here's an example maximization problem.

(**)

Optimization:-Maximize(sin(x), {x >= 0, x <= 3*Pi/2});

[1., [x = HFloat(1.5707963267950427)]]

Now I will convert this problem into a form where we save each call to the objective function for later use.

(**)

Problem:= module()
local
     ct,
     Calls
;
export
     Obj:= proc(x)
     local r:= sin(x);  
          ct:= ct+1;  
          Calls[ct]:= (x,r);  
          r  
     end proc,

     Constr1:= x-> 0 - x,  # x >= 0
     Constr2:= x-> x - 3*Pi/2,  # x <= 3*Pi/2
     Constrs:= {Constr1, Constr2},

     Init:= proc()  
          ct:= 0;  
          Calls:= table()
     end proc,

     AllObjEvals:= proc()  
     local k;  
          [seq([Calls[k]], k= 1..ct)]
     end proc
;
     Init()
end module:

 

(**)

Optimization:-Maximize(Problem:-Obj, Problem:-Constrs);

[1., Vector(1, {(1) = 1.57079632679490})]

(**)

Data:= Problem:-AllObjEvals();

[[HFloat(0.0), HFloat(0.0)], [0., 0.], [0.50000000000000000000000000e-8, 0.49999999999999999791666667e-8], [-0.50000000000000000000000000e-8, -0.49999999999999999791666667e-8], [HFloat(1.0), HFloat(0.8414709848078965)], [1., .84147098480789650665250232], [1.0000000050000000000000000, .84147098750940802547481359], [.99999999500000000000000000, .84147098210638496679341644], [HFloat(2.1753426496700228), HFloat(0.8227600473221269)], [2.175342649670023, .82276004732212685306409917], [2.1753426546700230000000000, .82276004448018250601607050], [2.1753426446700230000000000, .82276005016407117954312665], [HFloat(1.569745684590937), HFloat(0.9999994480755304)], [1.569745684590937, .99999944807553039954776143], [1.5697456895909370000000000, .99999944808078359710110782], [1.5697456795909370000000000, .99999944807027717699442884], [HFloat(1.570855739119737), HFloat(0.9999999982350878)], [1.570855739119737, .99999999823508782904968963], [1.5708557441197370000000000, .99999999823479075492566251], [1.5708557341197370000000000, .99999999823538487817371679], [HFloat(1.5707963267845844), HFloat(1.0)], [1.570796326784584, .99999999999999999999994682], [1.5707963317845840000000000, .99999999999999998755150992], [1.5707963217845840000000000, .99999999999999998744838373], [HFloat(1.570796326794897), HFloat(1.0)], [1.570796326794897, 1.0000000000000000000000000], [1.5707963317948970000000000, .99999999999999998749999810], [1.5707963217948970000000000, .99999999999999998750000190]]

(**)

 

Please let me know if you are able to apply this to your problem.

Download Max_with_saved_dat.mw

conjugate(1/sqrt(I*t*lambda+m))*sqrt(lambda^2*(t^2)+m^2)*(1/sqrt(I*t*lambda+m)):
simplify(evalc(%));
                               1

It would not be possible for Maple in general to implement what you want. Maple deals with polynomial arithmetic over finite fields. x^2+x+1 is considered an irreducible polynomial over Z[2]; it is not equivalent to 1. So Z[2]/(x^2+x+1) is the finite field with 4 elements.

But, you can easily redefine mod to suit your purposes:

restart:
Modp:= eval(modp):
unprotect(modp):
modp:= (e,m)-> Modp(`if`(m=2, evalindets(e, `^`, x-> op(1,x)), e), m):
protect(modp):

x^2 mod 2;
                                            x

a*b*c+a^2*c*d+d+c^2*d^2*a^2*b^2+d^2*a*b^2*c+d^2*a*b^2+a*c+c*d+d*b+d*a^2*b*c+c+c^2+d^2*a^2*c+d^2*a^2*b^2*c+d^2*b^2+d^2*a+
d^2+b*c^2+c^2*d^2+b*c^2*d+a^2*c^2*b*d+c^2*d^2*a^2+c*d*a*b+a*b^2*c*d+b^2*c*d+b^2*c^2*d+d^2*a*c+a^2*b^2*c^2*d+b*c+d*a*b+d*a+
a^2*c^2+a^2*c^2*b+c^2*d^2*b^2 mod 2;
                                             0

Yes, function application distributes over most other operators; and constants, when applied as functions, become constant functions. Example:

((D-2)^3)(sin)(x);

There is a missing character between your k and 1. I will assume it is a plus sign. You can enter the expression pretty much as you currently have it into Maple:

Limit((Sum((n-k)/(k+1), k= 0..n-1) -ln(n!))/n, n= infinity);

value(%);

                                      γ

The answer is hard to read when I cut-and-paste it above, but it is the Euler-Mascheroni constant, gamma.

 

No, it can't be done.

Please post the example. It might help if you give fsolve a hint by making an initial guess based on an implicitplot.

See the section "Fundamental Recurrence Relation" of the Wikipedia article "Generalized Continued Fraction".


(**)

restart:

(**)

recA:= A(n+1)=b(n+1)*A(n) + a(n+1)*A(n-1), A(-1)=1, A(0)=b(0):

(**)

recB:= B(n+1)= b(n+1)*B(n) + a(n+1)*B(n-1), B(-1)=0, B(0)=1:

(**)

b:= n-> 2:

(**)

a:= n-> (2*n-1)^2:

(**)

An:= rsolve({recA}, A(n));

2^(n+1)*GAMMA(n+3/2)*(1/Pi^(1/2)-(1/4)*((-1)^(n+1)*Psi(5/4+(1/2)*n)-(-1)^(n+1)*Psi(3/4+(1/2)*n)-Pi)/Pi^(1/2))

(**)

Bn:= rsolve({recB}, B(n));

-(1/4)*2^(n+1)*GAMMA(n+3/2)*((-1)^(n+1)*Psi(5/4+(1/2)*n)-(-1)^(n+1)*Psi(3/4+(1/2)*n)-Pi)/Pi^(1/2)

(**)

simplify(An/Bn) assuming n::posint;

(2*(-1)^n*Psi((1/2)*n+1/4)*n+2*(-1)^(n+1)*Psi(3/4+(1/2)*n)*n+2*Pi*n+(-1)^n*Psi((1/2)*n+1/4)-(-1)^n*Psi(3/4+(1/2)*n)+Pi+4*(-1)^n+8*n+4)/(2*(-1)^n*Psi((1/2)*n+1/4)*n+2*(-1)^(n+1)*Psi(3/4+(1/2)*n)*n+2*Pi*n+(-1)^n*Psi((1/2)*n+1/4)-(-1)^n*Psi(3/4+(1/2)*n)+Pi+4*(-1)^n)

(**)

limit(%, n= infinity);

(4+Pi)/Pi

(**)

simplify(4/(1+%));

2*Pi/(Pi+2)

(**)

 


Download gen_cont_frac.mw

It's as simple as

(A_old,A_new):= (A_new,A_old):

Ordinary assignment (via :=) only copies the addresses of tables and arrays, which is what you want. Multiple ordinary assignment is done in such a way that an intermediate variable is not necessary.

1. You probably used an e somewhere earlier in your computation where you had meant to use exp. If you print the expression with lprint, it will show you if the e is actually exp(1).

2. Yes, the argument of a positive real number is 0.

It is surprising that there is no single command to do this. So I wrote a procedure to do it.

To use this, you'll need to download a combinatorics package called Iterator from the Maple Applications Center. The package has a command SetPartitions which lets you control the size of the blocks in the partition, but you can't directly control the number of blocks. So I iterate over the integer partitions of n to get all possible combinations of block sizes with k blocks. Then these need some modification to be put into the form expected by SetPartitions.

PartitionIntoKBlocks:= proc(n::{set,nonnegint}, k::nonnegint)
option `Written by Carl Love 2013-Sep-27.`;
uses J=Iterator, C= combinat, S= Statistics;
local s, P, N:= `if`(n::set, n, {$1..n});
     {seq(
          seq({s[]}, s= J:-SetPartitions(N, map(`[]`@op, S:-Tally(P)), compile= false)),
          P= select(x-> nops(x)=k, C:-partition(nops(N)))
     )}
end proc:

PartitionIntoKBlocks(4,2);
    {{{1}, {2, 3, 4}}, {{2}, {1, 3, 4}}, {{3}, {1, 2, 4}},
      {{4}, {1, 2, 3}}, {{1, 2}, {3, 4}}, {{1, 3}, {2, 4}},
      {{1, 4}, {2, 3}}}

Joe Riel, if you're reading: I think Iterator:-SetPartitions should have an option for the number of blocks in the partition.

First 346 347 348 349 350 351 352 Last Page 348 of 396