Joe Riel

9048 Reputation

23 Badges

16 years, 346 days

MaplePrimes Activity


These are answers submitted by Joe Riel

As Roman suggests, create a procedure rather than a polynomial. However, if you have already created the polynomial, you then need to convert it to a procedure. The procedure unapply is useful here.
P := a*x1^2 + 3*x2^2 + b:
f := unapply(P, [x1,x2]):
f(z1,z2);
            a*z1^2+3*z2^2+b
Note that your example use of eval is incorrect. Proper usage is eval(P, [x=1,y=2]).
> LengthU := norm(u,2);
                         2
Unlike many other elements, Maple does not consider rtables (the low-level struture that includes Vectors) equal even if they have the same elements. The LinearAlgebra command Equal can be used to determine element by element (or just structure) equality of two Vectors. One way to do what you want is to convert the set to a list, then use ListTools:MakeUnique, passing LinearAlgebra:-Equal as the optional comparison procedure. Thus lst := convert(s, list): lst := ListTools:-MakeUnique(lst,1,Equal): s := convert(lst, set); An interesting observation is that if you had done s := {UnitVector(1,2), UnitVector(1,2)}: s would have been assigned a singleton. The reason for that is subtle, Maple applies its set simplification to the input before UnitVector is called, so at that point the set consistents of two identical function calls. This simplification can result in incorrect results if the functions return different values.
Try spacecurve([2*t,0,0],t=0..1)
You must have used the command with(inttrans) somewhere, otherwise Maple wouldn't have plotted the first y1. However, I have no problem with the second. What version of Maple are you using? Note that y1 is expressed in terms of the Heaviside function, which may have caused problems for some versions of Maple (my memory is fuzzy).
A mathematical, rather than programmatical, approach is the simpler
SplitPolynomialEvenOdd := proc(poly::polynom(anything,v), v)
description "return the even and odd parts of a polynomial in v";
local p,m;
    p := collect(poly,v);
    m := subs(v=-v,p);
    return ((p+m)/2, (p-m)/2);
end proc:
Here's one approach.
assume(p::positive,l::positive,a::positive,q::positive);
eqn :=-p*(l^2-a^2)^(3/2)+a^3*q;
                                   2     2 (3/2)     3
                     eqn := -p~ (l~  - a~ )      + a~  q~

eqn2 := isolate(eqn,a^3);
                                            2     2 3/2
                                  3   p~ (l~  - a~ )
                        eqn2 := a~  = -----------------
                                             q~

map(x -> x^(2/3), %);
                                  /      2     2 3/2\(2/3)
                        3 (2/3)   |p~ (l~  - a~ )   |
                     (a~ )      = |-----------------|
                                  \       q~        /

combine(%,power);
                              /      2     2 3/2\(2/3)
                          2   |p~ (l~  - a~ )   |
                        a~  = |-----------------|
                              \       q~        /

# At this point it is tricky to get Maple to distribute
# the power.  Easier just to do it by hand:
eqn3 := a^2 = (p/q)^(2/3)*(l^2-a^2);
                               2   / p~ \(2/3)    2     2
                     eqn3 := a~  = |----|      (l~  - a~ )
                                   \ q~ /

sol := solve(eqn3,a):
sol[1];
                     //    / p~ \(2/3)\ / p~ \(2/3)\1/2
                     ||1 + |----|     | |----|     |    l~
                     \\    \ q~ /     / \ q~ /     /
                     -------------------------------------
                                    / p~ \(2/3)
                                1 + |----|
                                    \ q~ /
Again, distribute the power by hand. Is there a command that does that? It's easy to write one, though it won't be rigorous. You could try using the RealDomain package; that nearly solved the problem in one go but I couldn't figure out a clever way to factor out the common terms in the numerator and denominator.
You write "maxima", meaning more than one maximum. What do expect to get for the given expression, assuming the chosen component is one? That is, do you want to get the indices 1 and 2, corresponding to the two components whose first element is 8? If that is what you want, then the following will return the list of indices: maxima_indices := proc(indx::posint, lst::list) local elem,i,val; val := max(seq(op(indx,elem),elem in lst)); return [seq](`if`(op([i,indx],lst)=val,i,NULL) ,i = 1..nops(lst)) end proc: H1 := [[8,9,11],[8,10,11],[5,10,6]]: map(maxima_indices,[1,2,3],H1); [[1, 2], [2, 3], [1, 2]]
I'm unsure as to the precise mechanism, however, this is probably caused by the assuming keyword making a substitution into the table (a local variable z~ with assumptions replacing z), the result evaluated, then the original z replacing the z~. At the conclusion of this we are left with a different table, identical to the original. It has no name and must be displayed as a table. I don't know what your second question means.
I'm not sure what you want. Currently, the only way for users to generate help pages is by writing them in the Maple gui (templates are available), saving them as worksheets, then using Maple commands (makehelp and INTERFACE_HELP) to save the worksheets as help pages in a help database. This is acceptable for a small package with a few help pages but is cumbersome for larger packages with many help pages. I wrote a small package, generichelp, that can be used to strip the user style table from a user created help-page/worksheet. The reason for doing this is that it ensures that the created help pages behave like the ones supplied by Maplesoft; that is, they do not contain character and paragraph styles that are specific to the creator. The original version is available at my home page. I've recently revised it to be compatible with Maple 10 but need to finish it. About a year ago I began work on a package for generating Maple help pages from text files using a custom markup language. Alas, it is not ready for release and I haven't been motivated to work on it for awhile.
1. Not sure. 2. Tools > Options > Display > Input Notation = Maple Notation 3. To change colors you want to create a custom default style, modifying, in particular, the character styles "Maple Input" and "2D output" (there are other output styles that you will probably want to modify as well). I described the basics here.
Assuming that the constraint expression, g, is supposed to be equal to zero, f := 1000*x+7500*y: g := 10000000-(20000*x^0.8)*y^1.2: Student:-MultivariateCalculus:-LagrangeMultipliers(f,[g],[x,y]); [58.73094715, 11.74618943], [-58.73094715-.3095363126e-18*I, -11.74618943-.6190726252e-19*I] You can use fnormal and simplify/zero to remove the vestigial complex part.
I cannot reproduce that,
restart;
a := 4;
anames(user)[1];
                    a
What do you want to do with the list? You can always convert the names to strings:
map(convert,[anames](user),string);
I'm not sure that you have completely described the problem. Your procedure does not declare k as local, so if A, B, or C are in terms of the global k, they will be summed accordingly:
> sums([k,k^2,k^3],[[ku1,kl1],[ku2,kl2],[ku3,kl3]]);
         2                  2                  3            2            3
(ku1 + 1)    ku1         kl1    kl1   (ku2 + 1)    (ku2 + 1)    ku2   kl2
---------- - --- - 1/3 - ---- + --- + ---------- - ---------- + --- - ----
    2         2           2      2        3            2         6     3

          2                  4            3            2      4      3      2
       kl2    kl2   (ku3 + 1)    (ku3 + 1)    (ku3 + 1)    kl3    kl3    kl3
     + ---- - --- + ---------- - ---------- + ---------- - ---- + ---- - ----
        2      6        4            2            4         4      2      4
Is that what you want? If not, that is, if you meant k to be local, then just do
adds := proc(a,b)
local j;
    add(a[j]*(b[j,1]-b[j,2]+1),j=1..nops(a));
end proc:
Use a print statement in the loop to print intermediate results. You might also want to consider terminating the for loop with a colon so that the final result is not displayed twice. Using your example, for i from 0 to 10 do print(f(i) mod 11); end do:
First 107 108 109 110 Page 109 of 110