MaplePrimes Posts

MaplePrimes Posts are for sharing your experiences, techniques and opinions about Maple, MapleSim and related products, as well as general interests in math and computing.

Latest Post
  • Latest Posts Feed

  • This post is an index page for reading the Parallel Programming blog posts.

    I thought it would be interesting to review what happened with Physics in Maple during 2013. The proposed theme for the Physics project was the consolidation and integration of the package with the rest of the Maple library. There were more than 500 changes, enhancements in most of the Physics commands, plus 17 new Physics:-Library commands. The impact of these changes is across the board, from Vector Analysis to Quantum Mechanics, Relativity and Field Theory.

    Consolidation of the Physics package is about making it robust and versatile in real case scenarios. With the launch of the Physics: Research and Development updates webpage, Maplesoft has pioneered feedback, adjustments in the package and new developments provided around the clock for all of its users. The result of this accelerated exchange with people around the world is what you find in Maple's updated Physics today.

    In addition to changes improving the functionality in mathematical-physics, changes were introduced towards making the computational experience as natural as possible, now including textbook-like typesetting of inert forms for the whole mathematical language and vectorial differential operators.

    Physics doubled in size in Maple 16, almost doubled again in Maple 17, and during 2013 Physics received the largest number of changes ever in the package in one year. We are aiming for real to provide a state-of-the-art environment for algebraic computations in Physics. The links at the end show the same but with the Examples sections expanded.

    Simplify

     

    Simplification is perhaps the most common operation performed in a computer algebra system. In Physics, this typically entails simplifying tensorial expressions, or expressions involving noncommutative operators that satisfy certain commutator/anticommutator rules, or sums and integrals involving quantum operators and Dirac delta functions in the summands and integrands. Relevant enhancements were introduced for all these cases.

    Examples

       

    4-Vectors, Substituting Tensors

     

    In Maple 17, it is possible to define a tensor with a tensorial equation, where the tensor being defined is on the left-hand side. Then, on the right-hand side, you write either a tensorial expression with free and repeated indices, or a Matrix or Array with the components themselves. With the updated Physics, you can also define a 4-Vector with a tensorial equation, where you indicate the vector's components on the right-hand side as a list.

    One new Library routine specialized for tensor substitutions was added to the Maple library: SubstituteTensor, which substitutes the equation(s) Eqs into an expression, taking care of the free and repeated indices, such that: 1) equations in Eqs are interpreted as mappings having the free indices as parameters, and 2) repeated indices in Eqs do not clash with repeated indices in the expression. This new routine can also substitute algebraic sub-expressions of type product or sum within the expression, generalizing and unifying the functionality of the subs and algsubs  commands for algebraic tensor expressions.

    Examples

       

    Functional Differentiation

     

    The Physics:-Fundiff command for functional differentiation has been extended to handle all the complex components ( abs , argument , conjugate , Im , Re , signum ) and vectorial differential operators in order to compute field equations using variational principles when the field function enters the Lagrangian together with its conjugate. For an example illustrating the use of the new capabilities in the context of a more general problem, see the MaplePrimes post Quantum Mechanics using Computer Algebra.

    Examples

       

    More Metrics in the Database of Solutions to Einstein's Equations

     

    A database of solutions to Einstein's equations  was added to the Maple library in Maple 15 with a selection of metrics from "Stephani, H.; Kramer, D.; MacCallum, M.; Hoenselaers, C.; and Herlt, E.,  Exact Solutions to Einstein's Field Equations" and "Hawking, Stephen; and Ellis, G. F. R., The Large Scale Structure of Space-Time". More metrics from these two books were added for Maple 16 and Maple 17. These metrics can be searched using the command DifferentialGeometry:-Library:-MetricSearch, or directly using g_ (the Physics command representing the spacetime metric that also sets the metric to your choice).

    • 

    With the updated Physics, fifty more metrics are available in the database from Chapter 28 of the aformentioned book entitled "Exact Solutions to Einstein's Field Equations".

    • 

    It is now possible to list all the metrics of a chapter by indexing the metric command with the chapter's number, for example, entering g_["28"].

    Examples

       

    Commutators, AntiCommutators

     

    When computing with products of noncommutative operators, the results depend on the algebra of commutators and anticommutators that you previously set. Besides that, in Physics, various mathematical objects themselves satisfy specific commutation rules. You can query about these rules using the Library commands Commute and Anticommute. Previously existing functionality and enhancements in this area were refined and implemented during 2013. Among them:

    • 

    Both Commutator and AntiCommutator now accept matrices as arguments.

    • 

    The AntiCommutator of products of fermionic operators - for instance annihilation and creation operators - is now derived automatically from the intrinsic anticommutation rules they satisfy.

    • 

    Commutators and Anticommutators of vectorial quantum operators `#mover(mi("A",mathcolor = "olive"),mo("→"))`, `#mover(mi("B",mathcolor = "olive"),mo("→"))`, are now implemented and expressed using the dot (scalar) product, as in Physics:-Commutator(`#mover(mi("A",mathcolor = "olive"),mo("→"))`, `#mover(mi("B",mathcolor = "olive"),mo("→"))`) = `#mover(mi("A",mathcolor = "olive"),mo("→"))`.`#mover(mi("B",mathcolor = "olive"),mo("→"))`-`#mover(mi("B",mathcolor = "olive"),mo("→"))`.`#mover(mi("A",mathcolor = "olive"),mo("→"))`

    • 

    If two noncommutative operators a and S  satisfy "[a^(†),S][-]=0" , then the commutator  "[a,S^(†)][-]" is automatically taken equal to 0; if in addition S is Hermitian, then  "[a,S][-]"is also automatically taken equal to zero.

    Examples

       

    Expand and Combine

     

    In the context of Physics, the expansion and recombination of algebraic expressions requires additional care: products may involve non-commutative operators and then some of the standard expansion and combination rules do not apply, or apply differently. Similarly, the expansion of vectorial operators also follows special rules. During 2013, many of these algebraic operations were reviewed and related special formulas (such as Glauber's and Haussdorf's) were implemented.

    Examples

       

    New Enhanced Modes in Physics Setup

     

    Four enhanced modes were added to the Physics setup. With these modes, you can:

    1. 

    Indicate the real objects of a computation.

    2. 

    Automatically combine powers of the same base.

    3. 

    Set Maple to take z and its conjugate, "z," as independent variables and in equal footing; this is Wirtinger calculus.

    4. 

    Redefine the sum command in order to perform multi-index summation.

    These options combined provide flexibility, subsequently making the Physics environment more expressive.

    Real Objects

       

    Combining Powers of the Same Base

       

    Complex variables: z and conjugate(z) in equal footing

       

    Redefine Sum for Multi-Index Summation

       

    Dagger

     

    Physics:-Dagger now has the same shortcut notation of Hermitian transpose , which acts on Vectors, vector products, equations, and automatically maps over the arguments of derivatives when the differentiation variables are real.

    Examples

       

    Vectors Package

     

    A number of changes were performed in the Vectors subpackage to make the computations more natural and versatile:

    • 

    You can now use geometrical coordinates indexed, as in r[j], to represent mathematical objects unrelated to the coordinates themselves (in this case the spherical coordinate r).  This is a more appropriate mimicry of the way we compute with paper and pencil.

    • 

    Integrate the Vectors package commands with assuming and accept a tensor with 1 index (of type Library:-PhysicsType:-Tensor, defined using Define) as a possible abstract representation of the kth component of a vector.

    • 

    When V is a vector of the Physics:-Vectors package, make its absolute value abs(V), compute automatically using Physics:-Vectors:-Norm

    • 

    For an arbitrary vector  `#mover(mi("A"),mo("→"))`, make its Norm LinearAlgebra[Norm](`#mover(mi("A"),mo("→"))`) = "A*(A)," and introduce a new option conjugate to Norm, to specify whether to use `#mover(mi("A"),mo("→"))`.conjugate(`#mover(mi("A"),mo("→"))`) or `#mover(mi("A"),mo("→"))`.`#mover(mi("A"),mo("→"))` when computing LinearAlgebra[Norm](`#mover(mi("A"),mo("→"))`).

    • 

    When `#mover(mi("A",mathcolor = "olive"),mo("→"))` is a quantum operator, Norm returns using Dagger instead of conjugate.

    • 

    Commutators and Anticommutators of vectorial quantum operators `#mover(mi("A",mathcolor = "olive"),mo("→"))`, `#mover(mi("B",mathcolor = "olive"),mo("→"))`, are now implemented and expressed using the dot (scalar) product, as in "[A,B][-]=A*B-B*A . "

    • 

    New PhysicsVectors type in the Library of types Library:-PhysicsTypes, in order to programmatically identify vectors of the Physics:-Vectors package.

     

    Two examples illustrating the use of the new capabilities in the context of a more general problem are found in the MaplePrimes posts Quantum Mechanics using Computer Algebra and Quantum Mechanics (II).

    Examples

       

    Library

     

    Seventeen new commands, useful for programming and interactive computation, were added to the Physics:-Library package. These are:

    • 

    Add unifies the standard add and sum commands using a more modern handling of arguments, free of premature evaluation problems, and brings new multi-index functionality.

    • 

    ApplyCommandUsingImplicitAssumptions applies any command to expressions containing sums, integrals or products such that the command is applied to the summand (integrand or 1st argument of the product) taking into account the assumptions implicit in the summation (integration or product) range.

    • 

    CombinePowersOfSameBase combines powers of the same base in products correctly handling the case of noncommutative products and powers, using Glauber's formula.

    • 

    FromTensorFunctionalForm is a generalization of the former FromGeneralRelativityTensorFunctionalForm command, that also handles user defined tensor functions.

    • 

    GetFAndDifferentiationVariables receives a derivative and returns a sequence with derivand and all the differentiation variables.

    • 

    GetReplacementIndices receives a list of indices of different kinds (spacetime, space, spinor, etc) and any other arguments and returns a list with new indices of the same kinds - useful for replacements - not present in the rest of the arguments.

    • 

    GetSymbolsWithSameType receives an expression x, of type commutative, anticommutative or noncommutative, and any other arguments, and returns symbols of the same type as x, and not present in the rest of arguments.

    • 

    GetTensorDependency gets the dependency of a given tensor; this dependency typically depends of the spacetime metric or on the way you defined the tensor using Define.

    • 

    GetTensorFunctionalForm is a generalization of the former GetGeneralRelativityTensorFunctionalForm command, that also handles user defined tensor functions.

    • 

    IsLiteralSubscript returns true or false according to whether a symbol s is of the form x__y, that is, it has the substring __ after the first or next characters and before the last one.

    • 

    IsRealObject returns true or false according to whether a mathematical expression, function or variable passed is known to be real, either because it was assumed to be real, or because it was set to be real using Setup and its realobjects keyword.

    • 

    RealObjects sets and unsets mathematical variables and functions as real, and answers queries about them.

    • 

    SortProducts sorts the operands of noncommutative products into any particular desired ordering while taking into account commutator and anticommutator algebra rules, such that the returned product is mathematically equivalent to the one received.

    • 

    SubstituteTensor substitutes equations into an expression, taking care of the free and repeated indices such that: 1) the substitution equations are interpreted as mappings having the free indices as parameters, and 2) repeated indices in the substitution equations do not clash with existing repeated indices in the target expression.

    • 

    ToContravariant and ToCovariant rewrite a given expression multiplying by the spacetime metric so that all of its free indices become respectively contravariant or covariant.

    • 

    ToTensorFunctionalForm reverses the operation performed by the new FromTensorFunctionalForm described above.

    Examples

       

    Miscellaneous

     
    • 

    Implement formulas for abstract k, n both nonnegint entering "`a+`^k*| A[n] >" and "a(-)^k*| A[n] >", where `a+` and "a-" are Creation and Annihilation operators, respectively, acting on the 1st quantum number of the space of quantum states labeled A.

    • 

    Implement new PDEtools:-dchange rules for changing variables in Bras Kets and Brackets of the Physics package

    • 

    Library:-Degree can now compute the degree for noncommutative products Enhance PDEtools:-Library:-Degree and PDEtools:-Coefficients, to work with Physics:-`.` the same way it does with Physics:-`*`

    • 

    Changes in design:

    a. 

    When the spacetime is Euclidean, there is no difference in value between the covariant and contravariant components of a tensor. Therefore, represent both with covariant indices making simplification and all manipulations simpler. This change affects the display of indices on the screen as well as the output of SumOverRepeatedIndices.

    b. 

    The dot product A . B of quantum operators A and B now returns as a (noncommutative) product  A * B when neither A nor B involve Bras or Kets.

    c. 

    When A is a quantum operator (generic, Hermitian or unitary), the literal subscript object A__x is now considered an operator of the same kind.

    d. 

    Normal normalizes powers of the same base (including exponentials) by combining them. For example, A^n*A^m "->A^(n+m)."

    e. 

    Normal normalizes noncommutative products by sorting objects that commute between themselves putting those that involve Dagger and conjugate to the left, more aligned with normal ordering in quantum field theories.

    f. 

    FeynmanDiagrams does not return any crossed propagators unless explicitly requested using the new option includecrossedpropagators. The former option, normalproducts, was renamed as externallegs.

    Examples

       

    See Also

     

    The Physics project, Physics, what is new in Physics in Maple 17, what is new in Physics in Maple 16

     

    Physics2013.pdf    Physics2013.mw

    Edgardo S. Cheb-Terrab
    Physics, Maplesoft

    Do you want to use both Simulink® and MapleSim in your tool chain? If so, we have a free upcoming webinar today at 2 pm EST that might be helpful to you!

    In this webinar, Application Engineer Bonnie Yue will demonstrate:

    - How to quickly develop and optimize engineering system models in MapleSim, then use the MapleSim Connector to automatically convert them into S-Function blocks for seamless inclusion in Simulink® diagrams.
    - How to export MapleSim models to Simulink®, including models with custom components.

    To join us for this live webinar, please visit: http://www.maplesoft.com/webinars/live/register.aspx?id=627&p=TC-3916

    We hope to see you there!


    Simulink® is a registered trademark of The MathWorks, Inc..

    Maplesoft is holding its first ever Virtual User Summit on Feb. 27.  You’ll be able to watch presentations by both Maplesoft and Maplesoft customers, ask questions, have discussions in the lounge with other attendees, and even enter a draw, all from the comfort of your own home or office.

    Here’s the agenda.  We’ll release more detailed information on speakers and session times in the next couple of weeks.

    For more information and to register:  Maplesoft Virtual User Conference

    We're looking forward to seeing you there. (Well, "seeing you" :-))

    eithne

    I'd like to pay attention to an application "Periodicity of Sunspots " by Samir Khan, where a real data is analysed. That application can be used in teaching statistics.

    PS. The code by Samir Khan works well for me.

    Voting is open for the next individual prize to be awarded as part of the Möbius App Challenge.  The winner will receive a DSLR Camera Prize Pack! 

    Here are the finalist Apps:

    If you do not have the latest version of Java installed, released last week, you may have problems viewing these apps, as older versions of Java seem to be quietly disabling themselves.  I’ve attached a zip file of the finalist Apps in case it is helpful. finalists.zip

    Note that, if you ever have any problems viewing Apps in your browser, or simply want to work offline, you can always download a Möbius App and view it in Maple or the free Maple Player. To download a Möbius App, follow the link to the App and then click on the Download button near the top left of the page.

    You can vote for your favorite through our Facebook page or, if you’re not on Facebook, send an email with your vote to Mobius-Project@maplesoft.com.

    And remember, we are now accepting entries for the next quarterly prize. You could win an Xbox One!  See the Möbuis App Challenge for details.

    Voting closes Jan. 30.

    eithne

    Greetings to all.

    It is a new year (for some time now) and I am writing to indicate that the mathematical adventures with cycle index computations and Maple continue!

    Here are the previous installments:

    My purpose this time is to alert readers who might be interested to a new cycle index computation that is neither an application of the classical form of the Polya Enumeration Theorem (PET) nor of Power Group Enumeration. The former counts objects being distributed into slots with a group acting on the slots and the latter objects going into slots with a second group which permutes the objects in addition to the slots being permuted. What I am about to present treats a third possible case: when the slot permutation group and the object permutation group are one and the same and act simultaneously (not exactly the same but induced by the action of a single group).

    This requires quite radical proceedings in the etymological sense of the word, which is to go back to the roots of a problem. It seems that after working with the PET sooner or later one is confronted with enumeration problems that demand the original unmitigated power of Burnside's lemma, sometimes called the lemma that is not Burnside's. This is the case with the following problem. Suppose you have an N-by-N matrix whose entries are values from 1 to N, with all assignments allowed and the symmetric group on N elements acts on the row and column indices permuting rows and columns as well as the entries simultaneously. We ask how many such matrices there are taking these double symmetries into account. This also counts the number of closed binary operations on a set of N elemnents and there is a discussion as well as the Maple code (quite simple in my opinion and no more than a few lines) that solves this problem at the following Math Stackexchange link, which uses Lovasz Formula for the cycle index of the symmetric group which some readers may remember.

    In continuing the saga of Polya and Burnside exploration I have often reflected on how best to encapsulate these techniques in a Maple package. With this latest installment it would appear that a command to do Burnside enumeration probably ought to be part of such a package.

    Best regards,

    Marko Riedel

    CoolProp is an open source C++ library of thermophysical properties for pure fluids, pseudo-pure fluids, and humid air. Ian Bell has recently developed a wrapper for Maple (get the wrapper and library at Github). Compiling CoolProp gives a library (a DLL on Windows) you can call in Maple via define_external().

    I started exploring CoolProp a few days ago, and here's a few simple examples of what you can do

    The saturation pressure (in kPa) of the refrigerant R134a at 253 K

    The pressure (in kPa) of the refrigerant R22 that produces a two-phase mixture of quality 0.3 with an enthalpy of 300 kJ/kg

    And since I'm a fan of engineering visualization, here's a refrigeration cycle on a P-h-T chart, generated in Maple with CoolProp.

    Here's a Maple application that uses CoolProp to analyze a refrigeration cycle (together with a CoolProp DLL for 64-bit Windows).

    Analysis_of_a_Refrig.zip

    I'd like to encourage anyone with an interest in thermophysical modeling to download CoolProp and explore its functionality. It's certainly opened up a new field of applications for me.

    Samir

    Event?

    January 2014: Pages of oldest Russian Maple Application Center have been opened 10000000 times.

    http://webmath.exponenta.ru/

    Dear friends. 

    This is to alert you to a minor problem with your website. I use a variety of operating systems and browsers to access your site. With Firefox 22 and Firefox 26 and OpenSuse 12.2 when I click on a question with a lot of commentary like "Perl vs. Maple (MPF)" from a couple of days ago or "collect x/2-y/2 1/2" the question appears to load for a while but then an empty page appears, containing only the string "2014" and nothing else. Maybe you want to look into this.

    Best regards,

    Marko Riedel

     

    Slides of the presentation at the VII Workshop Fast Computational and Applied Mathematics developed in graduate school at the National University of Trujillo. January 8, 2014.

     

    Visualización_Geomét.pdf

     

    L. Araujo C.

    An isometry of the Euclidean plane is a distance-preserving transformation of the plane.  There are four types: translations,  rotations,  reflections,  and  glide reflections. See http://en.wikipedia.org/wiki/Euclidean_plane_isometry#Classification_of_Euclidean_plane_isometries

    Procedure  AreIsometric  checks two plane sets  Set1  and  Set2  and  if there is an isometry of the plane mapping the first set to the second one, then the procedure returns true and false otherwise. Global variable  T  saves the type of isometry and all its parameters. For example, it returns  the rotation center and rotation angle, etc.

    Each of the sets  Set1  and  Set2   is the set (or list) consisting of the following objects in any combinations:

    1) The points that are defined as a list of coordinates  [х, y] .

    2) Segments, which are defined as a set (or list)  of two points  {[x1, y1], [x2, y2]}  or  [[x1, y1], [x2, y2]]  .

    3) Curves, which should  be defined as a list of points   [[x1, y1], [x2, y2], ..., [xn, yn]].

    Of course, if  n = 2, then the curve is identical to the segment.

     

    Code of the procedure:

    AreIsometric:=proc(Set1::{set,list}, Set2::{set,list}) 

    local n1, n2, n3, n4,s1, S, s, l1, l2, S11, f, x0, y0, phi, Sol, x, y, M1, M2, A1, A2, A3, A4, B1, B2, B3, B4, line1, line2, line3, line4, u, v, Sign, g, M, Line1, Line2, Line3, A, B, C, h, AB, CD, Eq, Eq1, T1, T2, i, S1, S2, T11; 

    global T; 

    uses combinat;     

     

    S1:={};  S2:={};  T1:={}; T2:={}; 

     

    for i in Set1 do 

    if i[1]::realcons  then S1:={op(S1),i} else 

    S1:={op(i), op(S1)};  T1:={op(T1), seq({i[k],i[k+1]}, k=1..nops(i)-1)} fi;  

    od; 

     

    for i in Set2 do 

    if i[1]::realcons  then S2:={op(S2),i} else 

    S2:={op(i), op(S2)};  T2:={op(T2), seq({i[k],i[k+1]}, k=1..nops(i)-1)} fi; 

    od;

       

    n1:=nops(S1);  n2:=nops(S2);  n3:=nops(T1); n4:=nops(T2); 

    if is(S1=S2) and is(T1=T2) then T:=identity;  return true fi; 

    if n1<>n2 or n3<>n4 then return false fi; 

    if n1=1 then T:=[translation, <S2[1,1]-S1[1,1], S2[1,2]-S1[1,2]>];  return true fi;

     

    f:=(x,y,phi)->[(x-x0)*cos(phi)-(y-y0)*sin(phi)+x0, (x-x0)*sin(phi)+(y-y0)*cos(phi)+y0];  g:=(x,y)->[(B^2*x-A^2*x-2*A*B*y-2*A*C)/(A^2+B^2), (A^2*y-B^2*y-2*A*B*x-2*B*C)/(A^2+B^2)]; 

    _Envsignum0 := 1;

         

    s1:=[S1[1], S1[2]];  S:=select(s->is((s1[2,1]-s1[1,1])^2+(s1[2,2]-s1[1,2])^2=(s[2,1]-s[1,1])^2+(s[2,2]-s[1,2])^2),permute(S2, 2));    

    for s in S do   

     

    # Checking for translation    

    l1:=s[1]-s1[1]; l2:=s[2]-s1[2]; 

    if is(l1=l2) then S11:=map(x->x+l1, S1); 

    if n3<>0 then T11:={seq(map(x->x+l1, T1[i]), i=1..nops(T1))}; fi; 

    if n3=0 then  if is(S11=S2) then T:=[translation, convert(l1, Vector)]; return true fi;  else 

    if is(S11=S2) and is(T11=T2) then T:=[translation, convert(l1, Vector)]; return true fi; fi; 

    fi;   

     

    # Checking for rotation   

    x0:='x0'; y0:='y0'; phi:='phi'; u:='u'; v:='v'; Sign:='Sign';    

    if  is(s1[1]-s[1]<>s1[2]-s[2]) then  

    M1:=[(s1[1,1]+s[1,1])/2, (s1[1,2]+s[1,2])/2]; M2:=[(s1[2,1]+s[2,1])/2, (s1[2,2]+s[2,2])/2]; A1:=s1[1,1]-s[1,1]; B1:=s1[1,2]-s[1,2]; A2:=s1[2,1]-s[2,1]; B2:=s1[2,2]-s[2,2];    line1:=A1*(x-M1[1])+B1*(y-M1[2])=0; line2:=A2*(x-M2[1])+B2*(y-M2[2])=0;  

    if is(A1*B2-A2*B1<>0) then Sol:=solve({line1, line2}); x0:=simplify(rhs(Sol[1]));   y0:=simplify(rhs(Sol[2])); u:=[s1[1,1]-x0,s1[1,2]-y0]; v:=[s[1,1]-x0,s[1,2]-y0];    else   

    if is(s[2]-s1[1]=s[1]-s1[2])  then   x0:=(s1[1,1]+s[1,1])/2;  y0:=(s1[1,2]+s[1,2])/2; 

    if is([x0,y0]<>s1[1]) then  u:=[s1[1,1]-x0,s1[1,2]-y0]; v:=[s[1,1]-x0,s[1,2]-y0]; else 

    u:=[s1[2,1]-x0,s1[2,2]-y0]; v:=[s[2,1]-x0,s[2,2]-y0]; fi;

    else  A3:=s1[2,1]-s1[1,1];  B3:=s1[2,2]-s1[1,2]; A4:=s[2,1]-s[1,1];  B4:=s[2,2]-s[1,2];  line3:=B3*(x-s1[1,1])-A3*(y-s1[1,2])=0;  line4:=B4*(x-s[1,1])-A4*(y-s[1,2])=0;Sol:=solve({line3, line4}); x0:=simplify(rhs(Sol[1])); y0:=simplify(rhs(Sol[2]));   

    if is(s1[1]=s[1]) then    u:=s1[2]-[x0,y0]; v:=s[2]-[x0,y0]; else   

    u:=s1[1]-[x0,y0]; v:=s[1]-[x0,y0];  fi;  fi;  fi;   

    Sign:=signum(u[1]*v[2]-u[2]*v[1]);   phi:=Sign*arccos(expand(rationalize(simplify((u[1]*v[1]+u[2]*v[2])/sqrt(u[1]^2+u[2]^2)/sqrt(v[1]^2+v[2]^2)))));      S11:=expand(rationalize(simplify(map(x->f(op(x), phi), S1))));   

    if n3<>0 then T11:={seq(expand(rationalize(simplify(map(x->f(op(x), phi), T1[i])))), i=1..nops(T1))}; fi; 

    if n3=0 then  if is(S11=expand(rationalize(simplify(S2))))  then T:=[rotation, [x0,y0], phi]; return true fi;  else 

    if is(S11=expand(rationalize(simplify(S2)))) and  is(T11=expand(rationalize(simplify(T2)))) then  

    T:=[rotation, [x0,y0], phi]; return true fi;  fi; 

    fi; 

     

    od;   

     

    # Checking for reflection or glide reflection   

    for s in S do    

    AB:=s1[2]-s1[1]; CD:=s[2]-s[1];  

    if is(AB[1]*CD[2]-AB[2]*CD[1]=0) then  M:=(s1[2]+s[1])/2;

    if  is(AB[1]*CD[1]+ AB[2]*CD[2]>0) then  A:=AB[2]; B:=-AB[1];    Line1:=A*(x-M[1])+B*(y-M[2])=0;  else 

    A:=AB[1]; B:=AB[2];  Line2:=A*(x-M[1])+B*(y-M[2])=0; fi;  

    else     u:=[AB[1]+CD[1], AB[2]+CD[2]];  A:=u[2]; B:=-u[1];     M:=[(s1[1,1]+s[1,1])/2, (s1[1,2]+s[1,2])/2]; Line3:=A*(x-M[1])+B*(y-M[2])=0;   fi;    C:=-A*M[1]-B*M[2];  h:= simplify(expand(rationalize(s[1]-g(op(s1[1])))));    S11:=expand(rationalize(simplify(map(x->g(op(x))+h, S1))));  

    if n3<>0 then T11:={seq(expand(rationalize(simplify(map(x->g(op(x))+h, T1[i])))), i=1..nops(T1))}; fi;    

    if n3=0 then   if is(S11=expand(rationalize(S2))) then 

    Eq:=A*x+B*y+C=0; Eq1:=`if`(is(coeff(lhs(Eq), y)<>0), y=solve(Eq, y),  x=solve(Eq, x)); 

    if h=[0,0] then  T:=[reflection, Eq1] else T:=[glide_reflection,Eq1,convert(h, Vector)] fi; return true fi; else  

    if is(S11=expand(rationalize(S2))) and is(T11=expand(rationalize(T2))) then 

    Eq:=A*x+B*y+C=0; Eq1:=`if`(is(coeff(lhs(Eq), y)<>0), y=solve(Eq, y),  x=solve(Eq, x)); 

    if h=[0,0] then T:=[reflection, Eq1] else

    T:=[glide_reflection,Eq1,convert(h, Vector)] fi; return true fi;  fi;   

    od;      

     

    T:='T';   false;  

    end proc:

     

    Three simple examples:

    AreIsometric({[4, 0], [7, 4], [14, 0]}, {[4, 14], [9, 14], [10, 6]});  T;

     

    AreIsometric({[2, 0], [2, 2], [5, 0]}, {[3, 3], [3, 6], [5, 3]});  T;

     

    S1 := {[[5, 5], [5, 20], [10, 15], [15, 20], [15, 5]]}: 
    S2 := {[[21, 11], [30, 23], [31, 16], [38, 17], [29, 5]]}: 
    S3 := {[[50, 23], [41, 11], [51, 16], [49, 5], [58, 17]]}: 
    AreIsometric(S1, S2); T; AreIsometric(S1, S3);

    plots[display](plottools[curve](op(S1), thickness = 2, color = green), plottools[curve](op(S2), thickness = 2, color = green), plottools[curve](op(S3), thickness = 2, color = red), scaling = constrained, view = [-1 .. 60, -1 .. 25]);  # Green sets are isometric,  green and red sets aren't

     

    Example with animation:

    S1:={[0,0],[-1,2],[2,4],[4,2]}:  S2:={[8,3],[6,6],[8,8],[10,4]}:

    AreIsometric(S1, S2);  T;  

    with(plots): with(plottools): 

    #  For clarity, instead of points polygons depicted with vertices at these points 

    N:=50:   

    A:=seq(rotate(polygon([[0,0],[-1,2],[2,4],[4,2]], color=blue), (k*Pi)/(2*N), [3,7]), k=0..N):  B:=polygon([[8,3],[6,6],[8,8],[10,4]], color=green):  E:=line([3,7], [6,6], color=black, linestyle=2): 

    C:=seq(rotate(line([3,7], [2,4], color=black, linestyle=2), (k*Pi)/(2*N), [3,7]), k=0..N):  L:=curve([[3,7],[2,4], [-1,2], [0,0],[4,2], [2,4]], color=black, linestyle=2):  T:=textplot([3, 7.2, "Center of rotation"]): 

    Frames:=seq(display(A[k], B, E,T,L, C[k]), k=1..N+1):   

    display(seq(Frames[k],k=1..N+1), insequence=true, scaling=constrained);

     

     

    Finding unique solutions to the problem of Queens (m chess queens on an n×n chessboard not attacking one another). Used the procedures  Queens  and  QueenPic  . See  http://www.mapleprimes.com/posts/200049-Queens-Problem-And-Its-Visualization-With-Maple

    Queens(8, 8);  M := [ListTools[Categorize](AreIsometric, S)]:

    nops(M);

    seq(op(M[k])[1], k = 1 .. %);   # 12 unique solutions from total 92 solutions

    QueensPic([%], 4);  #  Visualization of obtained solutions

     

     

    Finding unique solutions to the problem "Polygons of matches"  (all polygons with specified perimeter and area). See http://www.mapleprimes.com/posts/142884-Polygons-Of-The-Matches

    N := 12: S := 6: Polygons(N, S);

    M := [ListTools[Categorize](AreIsometric, T)]:

    n := nops(M);

    seq([op(M[k][1])], k = 1 .. n);  #  7 unique solutions from total 35 solutions with perimeter 12 and area 6

    Visual([%], 4);  #  Visualization of obtained solutions

     

     Isometry_of_plane_se.mw

     

    I work entitled Point Exeter made ​​for Fast VII workshop on applied and computational mathematics 2014 Trujillo Peru.

      Punto_de_Exeter.mw   (version in spanish)

    Atte.

    Lenin Araujo Castillo

    Physics Pure

    Computer Science

     

    It is a relatively recent innovation that complex-number computations can be done in the evalhf environment. When combined with plots:-densityplot, this makes escape-time fractals in the complex domain very easy to plot. This fractal is based on the Collatz problem. This Wikipedia article has a high-resolution picture of this fractal. I've switched the real and imaginary axes and reversed the direction of the real axis purely for asthetic reasons.

     

    Collatz:= proc(b,a)  #Axes switched
    local z:= -a+b*I, k;  #real part negated
         for k to 31 while abs(Im(z)) < 1 do
              z:= (1+4*z-(1+2*z)*cos(Pi*z))/4
         end do;
         k #escape time
    end proc:

    #Test evalhf'ability:

    evalhf(Collatz(0,1));

    32.

    plotsetup(
         jpeg, plotoutput= "C:/Users/Carl/desktop/Collatz.jpg",
         plotoptions="height= 1024, width= 1024, quality= 95"
    );

     

    CodeTools:-Usage(
         plots:-densityplot(
              Collatz,
              -1..1, # imaginary range
              -0.5..4.5, #negative of real range
              colorstyle= HUE, grid= [1024, 1024], style= patchnogrid,
              labels= [Im,-Re], labelfont= [TIMES, BOLD, 14],
              axes= boxed,
              caption= cat("      Happy New Year ",                  

                    StringTools:-FormatTime("%Y")),
              captionfont= [HELVETICA, BOLDOBLIQUE, 18]
         )
    );

    memory used=24.08MiB, alloc change=24.00MiB, cpu time=7.78s, real time=7.79s

     

    Download Collatz_fractal.mw

    The Stone-Weierstass theorem  in its simplest form asserts that every continuous function defined on a closed interval [a,b] can be uniformly approximated as closely as desired by a polynomial function. Let us consider a concrete function (say, arcsin(sqrt(x))) on a concrete interval (for example,[0,1]) and a concrete rate (for instance, 0.01). The question arises: what can be  the degree of an approximating polynomial?
    Looking in the constructive proof of the Weierstrass theorem (for example, see
    W. Rudin, Principles of mathematical analysis. Third Ed. McGraw-Hill Inc. New York-...-Toronto. 1976, pp. 159-160 SWT.docx), we find the inequality for degree n in terms of the modulus of the  continuity delta and the maximum of the modulus M of a function f on [0,1]: 4*M*sqrt(n)*(1-delta^2)^n < epsilon/2.
    Next, we find the modulus of the continuity of arcsin(sqrt(x)) with help of Maple (namely, the DirectSearch package):
    >restart;
    >CM := proc (delta) DirectSearch:-Search(abs(arcsin((x+delta)^(1/2))-arcsin(x^(1/2))),
     {0 <= x, 0 <= x+delta, x <= 1, x+delta <= 1}, maximize)
    end proc
    . Now delta is fitting to satisfy CM(delta) < 0.01:
    >Digits := 15: CM(0.9999640e-4);


    [0.999995686126010e-2, [x = .999900003599999], 18].
    At last, we find the required degree, taking into account M=Pi/2 for arcsin(sqrt(x)) on [0,1]:
    >DirectSearch:-SolveEquations((4*Pi*(1/2))*sqrt(n)*(1-0.9999640e-4^2)^n = (1/2)*10^(-2), {n >= 10^9}, tolerances = 10^(-8));


    [3.68635028417869*10^(-35), Vector(1, {(1) = -0.607153216591882e-17}),[n = 1.77870508105403*10^9], 74]
    The obtained result is unexpected and impressive. However, this is only an estimate of the degree for the chosen construction. There are different ways to construct an approximating polynomial. For example, let us take the interpolating polynomial.
    >with(CurveFitting): Digits := 200: P := PolynomialInterpolation([seq([(1/200)*j,
    evalf(arcsin(sqrt((1/200)*j)), 180)], j = 0 .. 200)], x);

    8.57260524574724504043891781488113281218267308627010084942700641\
    2116721658995225354525109649870447266086431479184935898860221001\
    6810627259201248204607733508370522655937863029427984169024474693\
    605019813*10^(-24)*x^200+
    3.4102471291087052576144785068387656673244314487588\
    37173451046570851636655790486463697061695256004409457030\
    661587523327337363549630285194598139656219506035056874382\
    5412929520214254752642899246978334986*10^83*x^199+...
    The whole long output of sort(P) can be seen in the attached file.
    >DirectSearch:-Search(abs(arcsin(sqrt(x))-P), {x >= 0, x <= 1}, maximize, tolerances = 10^(-10));


    [0.7028873160870935332477114389520278374486329450431055674880288416078\

    033259753063018233397798614e-2, [x = .999760629733897552108099038488344\

    76319065496787157065017717228830101\

    791752323133523143936216508553686883680060439608736578363\

    678796478147136266075441732651036025656505033942652374763794644368578081487], 22]
    See SWtheorem.mw

    First 79 80 81 82 83 84 85 Last Page 81 of 297