Applications, Examples and Libraries

Share your work here

This is a post that I wrote for the Altair Innovation Intelligence blog.

I have a grudging respect for Victorian engineers. Isambard Kingdom Brunel, for example, designed bridges, steam ships and railway stations with nothing but intellectual flair, hand-calculations and painstakingly crafted schematics. His notebooks are digitally preserved, and make for fascinating reading for anyone with an interest in the history of engineering.

His notebooks have several characteristics.

  • Equations are written in natural math notation
  • Text and diagrams are freely mixed with calculations
  • Calculation flow is clear and well-structured

Hand calculations mix equations, text and diagrams.

 

Engineers still use paper for quick calculations and analyses, but how would Brunel have calculated the shape of the Clifton Suspension Bridge or the dimensions of its chain links if he worked today?

If computational support is needed, engineers often choose spreadsheets. They’re ubiquitous, and the barrier to entry is low. It’s just too easy to fire-up a spreadsheet and do a few simple design calculations.

 Spreadsheets are difficult to debug, validate and extend.

 

Spreadsheets are great at manipulating tabular data. I use them for tracking expenses and budgeting.

However, the very design of spreadsheets encourages the propagation of errors in equation-oriented engineering calculations

  • Results are difficult to validate because equations are hidden and written in programming notation
  • You’re often jumping about from one cell to another in a different part of the worksheet, with no clear visual roadmap to signpost the flow of a calculation

For these limitations alone, I doubt if Brunel would have used a spreadsheet.

Technology has now evolved to the point where an engineer can reproduce the design metaphor of Brunel’s paper notebooks in software – a freeform mix of calculations, text, drawings and equations in an electronic notebook. A number of these tools are available (including Maple, available via the APA website).

 Modern calculation tools reproduce the design metaphor of hand calculations.

 

Additionally, these modern software tools can do math that is improbably difficult to do by hand (for example, FFTs, matrix computation and optimization) and connect to CAD packages.

For example, Brunel could have designed the chain links on the Clifton Suspension Bridge, and updated the dimensions of a CAD diagram, while still maintaining the readability of hand calculations, all from the same electronic notebook.

That seems like a smarter choice.

Would I go back to the physical notebooks that Brunel diligently filled with hand calculations? Given the scrawl that I call my handwriting, probably not.

I am learning to use maple for my notes preparation for the subject Finite Element Analysis. It is interesting to know that how often we blame maple or computer for the silly mistakes we made in our commands and expect the exact answers. I have used a small file and find it easy to analyse my mistakes fatser. If we make a small mistake in a big file, it not only gives us problem finding our mistakes, it leads to more mistakes in other parts as well. A command working in one document need not necessarily work the same way in other document.

I have made my first document and people will come with suggestions to make appropriate modifications in the various sections to improve my knowledge on maple as well as the subject.

Download FINITE_ELEMENT_ANALYSIS.mw

Ramakrishnan V

rukmini_ramki@hotmail.com

Um den Studierenden zu helfen, deren Mathematikkenntnisse nicht auf dem von Studienanfängern erwarteten Niveau waren, hat die TU Wien einen Auffrischungskurs mit Maple T.A. entwickelt.  Die vom Team der TU Wien ausgearbeiteten Fragen zu mathematischen Themen wie der Integralrechnung, linearen Funktionen, der Vektoranalysis, der Differentialrechnung und der Trigonometrie, sind in die Maple T.A. Cloud übernommen worden.  Außerdem haben wir diesen Inhalt als Kursmodul zur Verfügung gestellt.

Laden Sie das Kursmodul der TU Wien herunter.

Bei Interesse können Sie mehr über das Projekt der TU Wien in diesem Anwenderbericht lesen: Erfolgreiches Auffrischen von Mathematikkenntnissen an der Technischen Universität Wien mit Maple T.A.

Jonny
Maplesoft Product Manager, Maple T.A.

Here's a simple package for drawing knot diagrams and computing the Alexander polynomial. A typical usage case for the AlexanderPolynomial function is when a knot needs to be identified and only a visual representation of the knot is available. Then it's trivial to write down the Dowker sequence by hand and then the sequence can be used as an input for this package. The KnotDiagram function also takes the Dowker sequence as an input.

 

TorusKnot(p, q) and PretzelKnot(p, q, r) are accepted as an input as well and can also be passed to the DowkerNotation function.

 

The algorithm is fairly simple, it works as follows: represent each double point as a quadrilateral (two 'in' vertices and two 'out' vertices); connect the quads according to the Dowker specification; draw the result as a planar graph; erase the sides of each quad and draw its diagonals instead. This draws the intersections corresponding to the double points and guarantees that there are no other intersections. The knot polynomial is then computed from the diagram.

 

The diagrams work fairly well for pretzel knots, but for certain knots they can be difficult to read because some of the quads around the double points can become too small or too skewed. Also, the code doesn't check that the generated quadrilaterals are convex (which is an implicit assumption in the algorithm).

 

knot.txt

knot.mw

read "c:/math/prg/maple/knot.txt"

_m489214528

(1)

with(Knots)

[AlexanderPolynomial, DowkerNotation, KnotDiagram]

(2)

AlexanderPolynomial([6, 8, 10, 2, 4], t)

t^4-t^3+t^2-t+1

(3)

AlexanderPolynomial([4, 10, 14, 12, 2, 8, 6], t)

3*t^2-5*t+3

(4)

AlexanderPolynomial([6, 18, 16, 14, -20, 4, 2, 22, 12, -8, -10], t)

2*t^6-11*t^5+24*t^4-31*t^3+24*t^2-11*t+2

(5)

KnotDiagram([10, 12, -20, -16, -18, 2, 22, 24, -8, -4, -6, 14])

 

AlexanderPolynomial([10, 12, -20, -16, -18, 2, 22, 24, -8, -4, -6, 14], t)

t^10-t^9-t^8+6*t^7-11*t^6+13*t^5-11*t^4+6*t^3-t^2-t+1

(6)

AlexanderPolynomial([4, 8, 10, 16, 2, 18, 20, 22, 6, 14, 12], t)

2*t^6-11*t^5+25*t^4-31*t^3+25*t^2-11*t+2

(7)

DowkerNotation(TorusKnot(5, 4))

[-24, -10, 20, -30, -16, 26, -6, -22, 2, -12, -28, 8, -18, -4, 14]

(8)

KnotDiagram(TorusKnot(5, 4))

 

AlexanderPolynomial(TorusKnot(p, q), t); 1; simplify(subs([p = 5, q = 4], %))

(t^(p*q)-1)*(t-1)/((t^p-1)*(t^q-1))

 

t^12-t^11+t^8-t^6+t^4-t+1

(9)

DowkerNotation(PretzelKnot(3, -4, 5))

[-16, -14, 20, 22, 24, 18, -4, -2, 10, 12, 6, 8]

(10)

KnotDiagram(PretzelKnot(3, -4, 5))

 

AlexanderPolynomial(PretzelKnot(p, q, r), t)

piecewise(p::odd and q::odd and r::odd, piecewise(p*q+p*r+q*r <> -1, (1/4)*signum(p*q+p*r+q*r+1)*((p*q+p*r+q*r)*(t^2-2*t+1)+t^2+2*t+1), 1), AlexanderPolynomial(PretzelKnot(p, q, r), t))

(11)

eval(%, [p = 3, q = -4, r = 5])

2*t^8-3*t^7+2*t^6-t^5+t^4-t^3+2*t^2-3*t+2

(12)

 

Download knot.mw

knot.txt

ABSTRACT. In this paper we demonstrate how the simulation of dynamic systems engineering has been implemented with graphics software algorithms using maple and MapleSim. Today, many of our researchers the computational modeling performed by inserting a piece of code from static work; with these packages we have implemented through the automation components of kinematics and dynamics of solids simple to complex.

It is very important to note that once developed equations study; recently we can move to the simulation; to thereby start the physical construction of the system. We will use mathematical and computational methods using the embedded buttons which lie in the dynamics leaves and viewing platform cloud of Maplesoft and power MapleNet for online evaluation of specialists in the area. Finally they will see some work done; which integrate various mechanical and computational concepts implemented for companies in real time and pattern of credibility.

 

Selasi_2015.pdf

(in spanish)

 

Lenin Araujo Castillo

 

 

I have two linear algebra texts [1, 2]  with examples of the process of constructing the transition matrix Q that brings a matrix A to its Jordan form J. In each, the authors make what seems to be arbitrary selections of basis vectors via processes that do not seem algorithmic. So recently, while looking at some other calculations in linear algebra, I decided to revisit these calculations in as orderly a way as possible.

 

First, I needed a matrix A with a prescribed Jordan form. Actually, I started with a Jordan form, and then constructed A via a similarity transform on J. To avoid introducing fractions, I sought transition matrices P with determinant 1.

 

Let's begin with J, obtained with Maple's JordanBlockMatrix command.

 

• 

Tools_Load Package: Linear Algebra

Loading LinearAlgebra

J := JordanBlockMatrix([[2, 3], [2, 2], [2, 1]])

Matrix([[2, 1, 0, 0, 0, 0], [0, 2, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 1, 0], [0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 2]])

 

``

The eigenvalue lambda = 2 has algebraic multiplicity 6. There are sub-blocks of size 3×3, 2×2, and 1×1. Consequently, there will be three eigenvectors, supporting chains of generalized eigenvectors having total lengths 3, 2, and 1. Before delving further into structural theory, we next find a transition matrix P with which to fabricate A = P*J*(1/P).

 

The following code generates random 6×6 matrices of determinant 1, and with integer entries in the interval [-2, 2]. For each, the matrix A = P*J*(1/P) is computed. From these candidates, one A is then chosen.

 

L := NULL:

 

 

After several such trials, the matrix A was chosen as

 

A := Matrix(6, 6, {(1, 1) = -8, (1, 2) = -8, (1, 3) = 4, (1, 4) = -8, (1, 5) = -1, (1, 6) = 5, (2, 1) = -1, (2, 2) = 3, (2, 3) = 1, (2, 4) = -2, (2, 5) = 2, (2, 6) = -1, (3, 1) = -13, (3, 2) = -9, (3, 3) = 8, (3, 4) = -11, (3, 5) = 1, (3, 6) = 5, (4, 1) = 3, (4, 2) = 3, (4, 3) = -1, (4, 4) = 4, (4, 5) = 1, (4, 6) = -2, (5, 1) = 7, (5, 2) = 5, (5, 3) = -3, (5, 4) = 6, (5, 5) = 2, (5, 6) = -3, (6, 1) = -6, (6, 2) = -2, (6, 3) = 3, (6, 4) = -7, (6, 5) = 2, (6, 6) = 3})

 

 

for which the characteristic and minimal polynomials are

 

factor(CharacteristicPolynomial(A, lambda))

(lambda-2)^6

factor(MinimalPolynomial(A, lambda))

(lambda-2)^3

 

 

So, if we had started with just A, we'd now know that the algebraic multiplicity of its one eigenvalue lambda = 2 is 6, and there is at least one 3×3 sub-block in the Jordan form. We would not know if the other sub-blocks were all 1×1, or a 1×1 and a 2×2, or another 3×3. Here is where some additional theory must be invoked.

``

The null spaces M[k] of the matrices (A-2*I)^k are nested: `&sub;`(`&sub;`(M[1], M[2]), M[3]) .. (), as depicted in Figure 1, where the vectors a[k], k = 1, () .. (), 6, are basis vectors.

 

Figure 1   The nesting of the null spaces M[k] 

 

 

The vectors a[1], a[2], a[3] are eigenvectors, and form a basis for the eigenspace M[1]. The vectors a[k], k = 1, () .. (), 5, form a basis for the subspace M[2], and the vectors a[k], k = 1, () .. (), 6, for a basis for the space M[3], but the vectors a[4], a[5], a[6] are not yet the generalized eigenvectors. The vector a[6] must be replaced with a vector b[6] that lies in M[3] but is not in M[2]. Once such a vector is found, then a[4] can be replaced with the generalized eigenvector `&equiv;`(b[4], (A-2*I)^2)*b[6], and a[1] can be replaced with `&equiv;`(b[1], A-2*I)*b[4]. The vectors b[1], b[4], b[6] are then said to form a chain, with b[1] being the eigenvector, and b[4] and b[6] being the generalized eigenvectors.

 

If we could carry out these steps, we'd be in the state depicted in Figure 2.

 

Figure 2   The null spaces M[k] with the longest chain determined

 

 

Next, basis vector a[5] is to be replaced with b[5], a vector in M[2] but not in M[1], and linearly independent of b[4]. If such a b[5] is found, then a[2] is replaced with the generalized eigenvector `&equiv;`(b[2], A-2*I)*b[5]. The vectors b[2] and b[5] would form a second chain, with b[2] as the eigenvector, and b[5] as the generalized eigenvector.

``

Define the matrix C = A-2*I by the Maple calculation

 

C := A-2

Matrix([[-10, -8, 4, -8, -1, 5], [-1, 1, 1, -2, 2, -1], [-13, -9, 6, -11, 1, 5], [3, 3, -1, 2, 1, -2], [7, 5, -3, 6, 0, -3], [-6, -2, 3, -7, 2, 1]])

 

``

and note

 

N := convert(NullSpace(C), list)

[Vector(6, {(1) = 1/2, (2) = 1/2, (3) = 1, (4) = 0, (5) = 0, (6) = 1}), Vector(6, {(1) = -1/2, (2) = -1/2, (3) = -2, (4) = 0, (5) = 1, (6) = 0}), Vector(6, {(1) = -2, (2) = 1, (3) = -1, (4) = 1, (5) = 0, (6) = 0})]

NN := convert(LinearAlgebra:-NullSpace(C^2), list)

[Vector(6, {(1) = 2/5, (2) = 0, (3) = 0, (4) = 0, (5) = 0, (6) = 1}), Vector(6, {(1) = 0, (2) = 0, (3) = 0, (4) = 0, (5) = 1, (6) = 0}), Vector(6, {(1) = -1, (2) = 0, (3) = 0, (4) = 1, (5) = 0, (6) = 0}), Vector(6, {(1) = 2/5, (2) = 0, (3) = 1, (4) = 0, (5) = 0, (6) = 0}), Vector(6, {(1) = -3/5, (2) = 1, (3) = 0, (4) = 0, (5) = 0, (6) = 0})]

 

``

The dimension of M[1] is 3, and of M[2], 5. However, the basis vectors Maple has chosen for M[2] do not include the exact basis vectors chosen for M[1].

 

We now come to the crucial step, finding b[6], a vector in M[3] that is not in M[2] (and consequently, not in M[1] either). The examples in [1, 2] are simple enough that the authors can "guess" at the vector to be taken as b[6]. What we will do is take an arbitrary vector in M[3] and project it onto the 5-dimensional subspace M[2], and take the orthogonal complement as b[6].

``

A general vector in M[3] is

 

Z := `<,>`(u || (1 .. 6))

Vector[column]([[u1], [u2], [u3], [u4], [u5], [u6]])

 

``

A matrix that projects onto M[2] is

 

P := ProjectionMatrix(NN)

Matrix([[42/67, -15/67, 10/67, -25/67, 0, 10/67], [-15/67, 58/67, 6/67, -15/67, 0, 6/67], [10/67, 6/67, 63/67, 10/67, 0, -4/67], [-25/67, -15/67, 10/67, 42/67, 0, 10/67], [0, 0, 0, 0, 1, 0], [10/67, 6/67, -4/67, 10/67, 0, 63/67]])

 

``

The orthogonal complement of the projection of Z onto M[2] is then -P*Z+Z. This vector can be simplified by choosing the parameters in Z appropriately. The result is taken as b[6].

 

b[6] := 67*(eval(Z-Typesetting:-delayDotProduct(P, Z), Equate(Z, UnitVector(1, 6))))*(1/5)

Vector[column]([[5], [3], [-2], [5], [0], [-2]])

NULL

 

``

The other two members of this chain are then

 

b[4] := Typesetting:-delayDotProduct(C, b[6])

Vector[column]([[-132], [-12], [-169], [40], [92], [-79]])

b[1] := Typesetting:-delayDotProduct(C, b[4])

Vector[column]([[-67], [134], [67], [67], [0], [134]])

 

``

A general vector in M[2] is a linear combination of the five vectors that span the null space of C^2, namely, the vectors in the list NN. We obtain this vector as

 

ZZ := add(u || k*NN[k], k = 1 .. 5)

Vector[column]([[(2/5)*u1-u3+(2/5)*u4-(3/5)*u5], [u5], [u4], [u3], [u2], [u1]])

 

``

A vector in M[2] that is not in M[1] is the orthogonal complement of the projection of ZZ onto the space spanned by the eigenvectors spanning M[1] and the vector b[4]. This projection matrix is

 

PP := LinearAlgebra:-ProjectionMatrix(convert(`union`(LinearAlgebra:-NullSpace(C), {b[4]}), list))

Matrix([[69/112, -33/112, 19/112, -17/56, 0, 19/112], [-33/112, 45/112, 25/112, 13/56, 0, 25/112], [19/112, 25/112, 101/112, 1/56, 0, -11/112], [-17/56, 13/56, 1/56, 5/28, 0, 1/56], [0, 0, 0, 0, 1, 0], [19/112, 25/112, -11/112, 1/56, 0, 101/112]])

 

``

The orthogonal complement of ZZ, taken as b[5], is then

 

b[5] := 560*(eval(ZZ-Typesetting:-delayDotProduct(PP, ZZ), Equate(`<,>`(u || (1 .. 5)), LinearAlgebra:-UnitVector(4, 5))))

Vector[column]([[-9], [-59], [17], [58], [0], [17]])

 

``

Replace the vector a[2] with b[2], obtained as

 

b[2] := Typesetting:-delayDotProduct(C, b[5])

Vector[column]([[251], [-166], [197], [-139], [-112], [-166]])

 

 

The columns of the transition matrix Q can be taken as the vectors b[1], b[4], b[6], b[2], b[5], and the eigenvector a[3]. Hence, Q is the matrix

 

Q := `<|>`(b[1], b[4], b[6], b[2], b[5], N[3])

Matrix([[-67, -132, 5, 251, -9, -2], [134, -12, 3, -166, -59, 1], [67, -169, -2, 197, 17, -1], [67, 40, 5, -139, 58, 1], [0, 92, 0, -112, 0, 0], [134, -79, -2, -166, 17, 0]])

 

``

Proof that this matrix Q indeed sends A to its Jordan form consists in the calculation

 

1/Q.A.Q = Matrix([[2, 1, 0, 0, 0, 0], [0, 2, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 1, 0], [0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 2]])``

 

NULL

The bases for M[k], k = 1, 2, 3, are not unique. The columns of the matrix Q provide one set of basis vectors, but the columns of the transition matrix generated by Maple, shown below, provide another.

 

JordanForm(A, output = 'Q')

Matrix([[-5, -43/5, -9/5, 7/5, -14/5, -3/5], [10, -4/5, -6/25, 1/5, -6/25, -3/25], [5, -52/5, -78/25, 13/5, -78/25, -39/25], [5, 13/5, 38/25, -2/5, 38/25, 4/25], [0, 6, 42/25, -1, 42/25, 21/25], [10, -29/5, -11/25, 1/5, -11/25, 7/25]])

 

``

I've therefore added to my to-do list the investigation into Maple's algorithm for determining an appropriate set of basis vectors that will support the Jordan form of a matrix.

 

References

 

NULL

[1] Linear Algebra and Matrix Theory, Evar Nering, John Wiley and Sons, Inc., 1963

[2] Matrix Methods: An Introduction, Richard Bronson, Academic Press, 1969

 

NULL

``

Download JordanForm_blog.mw

Some time ago, @marc005 asked how he could send an email from the Maple command line.

Why would you want to do this? Using Maple's functionality, you could programatically construct an email - perhaps with the results of a computation - and email it yourself or someone else.

I originally posted a solution that involved communicating with a locally-installed SMTP server using the Sockets package. But of course, you need to set up an SMTP server and ensure the appropriate ports are open.

I recently found a better solution. Mailgun (http://mailgun.com) is a free email delivery service with an web-based API. You can communicate with this API via the URL package; simply send Mailgun a URL:-Post() message that contains account-specific information, and the text of your email.

The general steps and Maple commands are given below, and you can download the worksheet here.

Note: Maplesoft have no affiliation with Mailgun.

Step 1:
Sign up for a free Mailgun account.

Step 2:
In your Mailgun account, go to the Domains section - it should look like the screengrab below (account-specific information has been blanked).

Note down the API Base URL and the API key.

  • the API Base URL looks like https://api.mailgun.net/v3/sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org.  
  • •the API Key looks like key-XXXXXXXXXXXXXXXXXXXXXXXXXX

Step 3:

In Maple, define strings containing your own API Base URL and API Key. Also, define the recipient's email address, the email you want the recipient to reply to, the email subject and email body.

>restart:
>APIBaseURL := "https://api.mailgun.net/v3/sandboxXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org":
>APIKey:="key-XXXXXXXXXXXXXXXXXXXXXXXX":
>toEmail := "xxxxx@xxxxxx.com":
>fromEmail:="First Last <FirstLast@Domain.com>":
>subject:= "Email Subject Goes Here":
>emailBody := "I'd rather have a bottle in front of me than a frontal lobotomy":

Step 4:
Run the following code

> URL:-Post(cat(APIBaseURL,"/messages"),[
"from"=fromEmail,"to"=toEmail,
"subject"=subject,
"text"= emailBody],
user="api",password=APIKey);

If you've successfully sent the email, you should see something like this (account-specific information is blanked out)

You can also send HTML emails by replacing the "text" line with "html" = str, where str is a string with your HTML code.


Exact solutions to Einstein’s equations” is one of those books that are difficult even to imagine: the authors reviewed more than 4,000 papers containing solutions to Einstein’s equations in the general relativity literature, collecting, classifying, discarding repetitions in disguise, and organizing the whole material into chapters according to the physical properties of these solutions. The book is already in its second edition and it is a monumental piece of work.

 

As good as it is, however, the project resulted only in printed material, a textbook constituted of paper and ink. In 2006, when the DifferentialGeometry package was rewritten to enter the Maple library, one of the first things that passed through our minds was to bring the whole of “Exact solutions to Einstein’s equations” into Maple.

 

It took some time to start but in 2010, for Maple 14, we featured the first 26 solutions from this book. In Maple 15 this number jumped to 61. For Maple 17 we decided to emphasize the general relativity functionality of the DifferentialGeometry package, and Maple 18 added 50 more, featuring in total 225 of these solutions - great! but still far from the whole thing …

 

And this is when we decided to “step on the gas” - go for it, the whole book. One year later, working in collaboration with Denitsa Staicova from Bulgarian Academy of Sciences, Maple 2015 appeared with 330 solutions to Einstein’s equations. Today we have already implemented 492 solutions, and for the first time we can see the end of the tunnel: we are targeting finishing the whole book by the end of this year.

 

Wow2! This is a terrific result. First, because these solutions are key in the area of general relativity, and at this point what we have in Maple is already the most thorough digitized database of solutions to Einstein’s equations in the world. Second, and not any less important, because within Maple this knowledge comes alive. The solutions are fully searcheable and are set by a simple call to the Physics:-g_  spacetime metric command, and that automatically sets the related coordinates, Christoffel symbols , Ricci  and Riemann  tensors, orthonormal and null tetrads , etc. All of this happens on the fly, and all the mathematics within the Maple library are ready to work with these solutions. Having everything come alive completely changes the game. The ability to search the database according to the physical properties of the solutions, their classification, or just by parts of keywords also makes the whole book concretely more useful.

 

And, not only are these solutions to Einstein’s equations brought to life in a full-featured way through the Physics  package: they can also be reached through the DifferentialGeometry:-Library:-MetricSearch  applet. Almost all of the mathematical operations one can perform on them are also implemented as commands in DifferentialGeometry .

 

Finally, in the Maple PDEtools package , we already have all the mathematical tools to start resolving the equivalence problem around these solutions. That is: to answer whether a new solution is or not new, or whether it can be obtained from an existing solution by transformations of coordinates of different kinds. And we are going for it.

 

What follows is a basic illustration of what has already been implemented. As usual, in order to reproduce these results, you need to update your Physics library from the Maplesoft R&D Physics webpage.

 

Load Physics , set the metric to Schwarzschild (and everything else automatically) in one go

with(Physics)

g_[sc]

`Systems of spacetime Coordinates are: `*{X = (r, theta, phi, t)}

 

`Default differentiation variables for d_, D_ and dAlembertian are: `*{X = (r, theta, phi, t)}

 

`The Schwarzschild metric in coordinates `[r, theta, phi, t]

 

`Parameters: `[m]

 

g[mu, nu] = (Matrix(4, 4, {(1, 1) = r/(-r+2*m), (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = -r^2, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = -r^2*sin(theta)^2, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = (r-2*m)/r}))

(1)

And that is all we do :) Although the strength in Physics  is to compute with tensors using indicial notation, all of the tensor components and related properties of this metric are also derived on the fly (and no, they are not in any database). For instance these are the definition in terms of Christoffel symbols , and the covariant components of the Ricci tensor

Ricci[definition]

Physics:-Ricci[mu, nu] = Physics:-d_[alpha](Physics:-Christoffel[`~alpha`, mu, nu], [X])-Physics:-d_[nu](Physics:-Christoffel[`~alpha`, mu, alpha], [X])+Physics:-Christoffel[`~beta`, mu, nu]*Physics:-Christoffel[`~alpha`, beta, alpha]-Physics:-Christoffel[`~beta`, mu, alpha]*Physics:-Christoffel[`~alpha`, nu, beta]

(2)

Ricci[]

Physics:-Ricci[mu, nu] = Matrix(%id = 18446744078179871670)

(3)

These are the 16 Riemann invariants  for Schwarzschild solution, using the formulas by Carminati and McLenaghan

Riemann[invariants]

r[0] = 0, r[1] = 0, r[2] = 0, r[3] = 0, w[1] = 6*m^2/r^6, w[2] = 6*m^3/r^9, m[1] = 0, m[2] = 0, m[3] = 0, m[4] = 0, m[5] = 0

(4)

The related Weyl scalars  in the context of the Newman-Penrose formalism

Weyl[scalars]

psi__0 = 0, psi__1 = 0, psi__2 = -m/r^3, psi__3 = 0, psi__4 = 0

(5)

 

These are the 2x2 matrix components of the Christoffel symbols of the second kind (that describe, in coordinates, the effects of parallel transport in curved surfaces), when the first of its three indices is equal to 1

"Christoffel[~1,alpha,beta,matrix]"

Physics:-Christoffel[`~1`, alpha, beta] = Matrix(%id = 18446744078160684686)

(6)

In Physics, the Christoffel symbols of the first kind are represented by the same object (not two commands) just by taking the first index covariant, as we do when computing with paper and pencil

Christoffel[1, alpha, beta, matrix]

Physics:-Christoffel[1, alpha, beta] = Matrix(%id = 18446744078160680590)

(7)

One could query the database, directly from the spacetime metrics, about the solutions (metrics) to Einstein's equations related to Levi-Civita, the Italian mathematician

g_[civi]

____________________________________________________________

 

[12, 16, 1] = ["Authors" = ["Bertotti (1959)", "Kramer (1978)", "Levi-Civita (1917)", "Robinson (1959)"], "PrimaryDescription" = "EinsteinMaxwell", "SecondaryDescription" = ["Homogeneous"]]

 

____________________________________________________________

 

[12, 18, 1] = ["Authors" = ["Bertotti (1959)", "Kramer (1978)", "Levi-Civita (1917)", "Robinson (1959)"], "PrimaryDescription" = "EinsteinMaxwell", "SecondaryDescription" = ["Homogeneous"]]

 

____________________________________________________________

 

[12, 19, 1] = ["Authors" = ["Bertotti (1959)", "Kramer (1978)", "Levi-Civita (1917)", "Robinson (1959)"], "PrimaryDescription" = "EinsteinMaxwell", "SecondaryDescription" = ["Homogeneous"]]

(8)

These solutions can be set in one go from the metrics command, just by indicating the number with which it appears in "Exact Solutions to Einstein's Equations"

g_[[12, 16, 1]]

`Systems of spacetime Coordinates are: `*{X = (t, x, theta, phi)}

 

`Default differentiation variables for d_, D_ and dAlembertian are: `*{X = (t, x, theta, phi)}

 

`The Bertotti (1959), Kramer (1978), Levi-Civita (1917), Robinson (1959) metric in coordinates `[t, x, theta, phi]

 

`Parameters: `[k, kappa0, beta]

 

g[mu, nu] = (Matrix(4, 4, {(1, 1) = -k^2*sinh(x)^2, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = k^2, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = k^2, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = k^2*sin(theta)^2}))

(9)

Automatically, everything gets set accordingly; these are the contravariant components of the related Ricci tensor

"Ricci[~]"

Physics:-Ricci[`~mu`, `~nu`] = Matrix(%id = 18446744078179869750)

(10)

One works with the Newman-Penrose formalism frequently using tetrads (local system of references); the Physics subpackage for this is Tetrads

with(Tetrads)

`Setting lowercaselatin letters to represent tetrad indices `

 

0, "%1 is not a command in the %2 package", Tetrads, Physics

 

0, "%1 is not a command in the %2 package", Tetrads, Physics

 

[IsTetrad, NullTetrad, OrthonormalTetrad, SimplifyTetrad, TransformTetrad, e_, eta_, gamma_, l_, lambda_, m_, mb_, n_]

(11)

This is the tetrad related to the book's metric with number 12.16.1

e_[]

Physics:-Tetrads:-e_[a, mu] = Matrix(%id = 18446744078160685286)

(12)

One can check these directly; for instance this is the definition of the tetrad, where the right-hand side is the tetrad metric

e_[definition]

Physics:-Tetrads:-e_[a, mu]*Physics:-Tetrads:-e_[b, `~mu`] = Physics:-Tetrads:-eta_[a, b]

(13)

This shows that, for the components given by (12), the definition holds

TensorArray(Physics:-Tetrads:-e_[a, mu]*Physics:-Tetrads:-e_[b, `~mu`] = Physics:-Tetrads:-eta_[a, b])

Matrix(%id = 18446744078195401422)

(14)

One frequently works with a different signature and null tetrads; set that, and everything gets automatically recomputed for the metric 12.16.1 accordingly

Setup(signature = "+---", tetradmetric = null)

[signature = `+ - - -`, tetradmetric = {(1, 2) = 1, (3, 4) = -1}]

(15)

eta_[]

eta[a, b] = (Matrix(4, 4, {(1, 1) = 0, (1, 2) = 1, (1, 3) = 0, (1, 4) = 0, (2, 1) = 1, (2, 2) = 0, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = 0, (3, 4) = -1, (4, 1) = 0, (4, 2) = 0, (4, 3) = -1, (4, 4) = 0}))

(16)

e_[]

Physics:-Tetrads:-e_[a, mu] = Matrix(%id = 18446744078191417574)

(17)

TensorArray(Physics:-Tetrads:-e_[a, mu]*Physics:-Tetrads:-e_[b, `~mu`] = Physics:-Tetrads:-eta_[a, b])

Matrix(%id = 18446744078191319390)

(18)

The related 16 Riemann invariant

Riemann[invariants]

r[0] = 0, r[1] = 1/k^4, r[2] = 0, r[3] = (1/4)/k^8, w[1] = 0, w[2] = 0, m[1] = 0, m[2] = 0, m[3] = 0, m[4] = 0, m[5] = 0

(19)

The ability to query rapidly, set things in one go, change everything again etc. are at this point fantastic. For instance, these are the metrics by Kaigorodov; next are those published in 1962

g_[Kaigorodov]

____________________________________________________________

 

[12, 34, 1] = ["Authors" = ["Kaigorodov (1962)", "Cahen (1964)", "Siklos (1981)", "Ozsvath (1987)"], "PrimaryDescription" = "Einstein", "SecondaryDescription" = ["Homogeneous"], "Comments" = ["All metrics with _epsilon <> 0 are equivalent to the cases _epsilon = +1, -1, _epsilon = 0 is anti-deSitter space"]]

 

____________________________________________________________

 

[12, 35, 1] = ["Authors" = ["Kaigorodov (1962)", "Cahen (1964)", "Siklos (1981)", "Ozsvath (1987)"], "PrimaryDescription" = "Einstein", "SecondaryDescription" = ["Homogeneous", "SimpleTransitive"]]

(20)

g_[`1962`]

____________________________________________________________

 

[12, 13, 1] = ["Authors" = ["Ozsvath, Schucking (1962)"], "PrimaryDescription" = "Vacuum", "SecondaryDescription" = ["Homogeneous", "PlaneWave"], "Comments" = ["geodesically complete, no curvature singularities"]]

 

____________________________________________________________

 

[12, 14, 1] = ["Authors" = ["Petrov (1962)"], "PrimaryDescription" = "Vacuum", "SecondaryDescription" = ["Homogeneous", "SimpleTransitive"]]

 

____________________________________________________________

 

[12, 34, 1] = ["Authors" = ["Kaigorodov (1962)", "Cahen (1964)", "Siklos (1981)", "Ozsvath (1987)"], "PrimaryDescription" = "Einstein", "SecondaryDescription" = ["Homogeneous"], "Comments" = ["All metrics with _epsilon <> 0 are equivalent to the cases _epsilon = +1, -1, _epsilon = 0 is anti-deSitter space"]]

 

____________________________________________________________

 

[12, 35, 1] = ["Authors" = ["Kaigorodov (1962)", "Cahen (1964)", "Siklos (1981)", "Ozsvath (1987)"], "PrimaryDescription" = "Einstein", "SecondaryDescription" = ["Homogeneous", "SimpleTransitive"]]

 

____________________________________________________________

 

[28, 16, 1] = ["Authors" = ["Robinson-Trautman (1962)"], "PrimaryDescription" = "Vacuum", "SecondaryDescription" = ["RobinsonTrautman"], "Comments" = ["The coordinate zeta is changed to xi", "AlternativeOrthonormalTetrad1 and AlternativeNullTetrad1 are adapted to the shear-free null geodesic congruence (Robinson-Trautman tetrads)"]]

 

____________________________________________________________

 

[28, 26, 1] = ["Authors" = ["Robinson, Trautman (1962)"], "PrimaryDescription" = "Vacuum", "SecondaryDescription" = ["RobinsonTrautman"], "Comments" = ["One can use the diffeo r -> -r and u -> -u to make the assumption r > 0", "The case _m = 0 is Stephani, [28, 16,1]", "The metric is type D at points where r = 3*_m/(xi1+xi2) and type II on either side of this hypersurface. For convenience, it is assumed that 3*_m  - r*(xi1 + xi2) > 0", "AlternativeOrthonormalTetrad1 and AlternativeNullTetrad1 are adapted to the shear-free null geodesic congruence (Robinson-Trautman tetrads)"]]

 

____________________________________________________________

 

[28, 26, 2] = ["Authors" = ["Robinson, Trautman (1962)"], "PrimaryDescription" = "Vacuum", "SecondaryDescription" = ["RobinsonTrautman"], "Comments" = ["One can use the diffeo r -> -r and u -> -u to make the assumption r > 0", "The case _m = 0 is Stephani, [28, 16,1].", "AlternativeOrthonormalTetrad1 and AlternativeNullTetrad1 are adapted to the shear-free null geodesic congruence (Robinson-Trautman tetrads)"]]

 

____________________________________________________________

 

[28, 26, 3] = ["Authors" = ["Robinson, Trautman (1962)"], "PrimaryDescription" = "Vacuum", "SecondaryDescription" = ["RobinsonTrautman"], "Comments" = ["One can use the diffeo r -> -r and u -> -u to make the assumption r > 0", "The case _m = 0 is Stephani, [28, 16,1].", "AlternativeOrthonormalTetrad1 and AlternativeNullTetrad1 are adapted to the shear-free null geodesic congruence (Robinson-Trautman tetrads)"]]

 

____________________________________________________________

 

[28, 43, 1] = ["Authors" = ["Robinson, Trautman (1962)"], "PrimaryDescription" = "EinsteinMaxwell", "SecondaryDescription" = ["PureRadiation", "RobinsonTrautman"], "Comments" = ["h1(u) is the conjugate of h(u)"]]

(21)

 

The search can be done visually, by properties; this is the only solution in the database that is a Pure Ratiation solution, of Petrov Type "D", Plebanski-Petrov Type "O" and that has Isometry Dimension equal to 1:

DifferentialGeometry:-Library:-MetricSearch()

 

Set the solution, and everything related to work with it, in one go

g_[[28, 74, 1]]

`Systems of spacetime Coordinates are: `*{X = (u, eta, r, y)}

 

`Default differentiation variables for d_, D_ and dAlembertian are: `*{X = (u, eta, r, y)}

 

`The Frolov and Khlebnikov (1975) metric in coordinates `[u, eta, r, y]

 

`Parameters: `[kappa0, m(u), b, d]

 

"`Comments: `With _m(u) = constant, the metric is Ricci flat and becomes 28.24 in Stephani."

 

g[mu, nu] = (Matrix(4, 4, {(1, 1) = (2*m(u)^3-6*m(u)^2*eta*r-r^2*(-6*eta^2+b)*m(u)+r^3*(-2*eta^3+b*eta+d))/(r*m(u)^2), (1, 2) = -r^2/m(u), (1, 3) = -1, (1, 4) = 0, (2, 1) = -r^2/m(u), (2, 2) = r^2/(-2*eta^3+b*eta+d), (2, 3) = 0, (2, 4) = 0, (3, 1) = -1, (3, 2) = 0, (3, 3) = 0, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = r^2*(-2*eta^3+b*eta+d)}))

(22)

 

The related Riemann invariants:

Riemann[invariants]

r[0] = 0, r[1] = 0, r[2] = 0, r[3] = 0, w[1] = 6*m(u)^2/r^6, w[2] = -6*m(u)^3/r^9, m[1] = 0, m[2] = 0, m[3] = 0, m[4] = 0, m[5] = 0

(23)

To conclude, how many solutions from the book have we already implemented?

DifferentialGeometry:-Library:-Retrieve("Stephani", 1)

[[8, 33, 1], [8, 34, 1], [12, 6, 1], [12, 7, 1], [12, 8, 1], [12, 8, 2], [12, 8, 3], [12, 8, 4], [12, 8, 5], [12, 8, 6], [12, 8, 7], [12, 8, 8], [12, 9, 1], [12, 9, 2], [12, 9, 3], [12, 12, 1], [12, 12, 2], [12, 12, 3], [12, 12, 4], [12, 13, 1], [12, 14, 1], [12, 16, 1], [12, 18, 1], [12, 19, 1], [12, 21, 1], [12, 23, 1], [12, 23, 2], [12, 23, 3], [12, 24.1, 1], [12, 24.2, 1], [12, 24.3, 1], [12, 26, 1], [12, 27, 1], [12, 28, 1], [12, 29, 1], [12, 30, 1], [12, 31, 1], [12, 32, 1], [12, 34, 1], [12, 35, 1], [12, 36, 1], [12, 37, 1], [12, 37, 2], [12, 37, 3], [12, 37, 4], [12, 37, 5], [12, 37, 6], [12, 37, 7], [12, 37, 8], [12, 37, 9], [12, 38, 1], [12, 38, 2], [12, 38, 3], [12, 38, 4], [12, 38, 5], [13, 2, 1], [13, 2, 2], [13, 2, 3], [13, 7, 1], [13, 7, 2], [13, 7, 3], [13, 7, 4], [13, 7, 5], [13, 7, 6], [13, 7, 7], [13, 7, 8], [13, 14, 1], [13, 14, 2], [13, 14, 3], [13, 19, 1], [13, 31, 1], [13, 32, 1], [13, 46, 1], [13, 48, 1], [13, 49, 1], [13, 49, 2], [13, 51, 1], [13, 53, 1], [13, 59, 1], [13, 59, 2], [13, 60, 1], [13, 60, 2], [13, 60, 3], [13, 60, 4], [13, 60, 5], [13, 60, 6], [13, 60, 7], [13, 60, 8], [13, 61, 1], [13, 61, 2], [13, 62, 1], [13, 62, 2], [13, 62, 4], [13, 62, 6], [13, 63, 1], [13, 63, 2], [13, 63, 3], [13, 63, 4], [13, 64, 1], [13, 64, 2], [13, 64, 3], [13, 64, 4], [13, 65, 1], [13, 69, 1], [13, 71, 1], [13, 72, 1], [13, 73, 1], [13, 74, 1], [13, 74, 2], [13, 74, 3], [13, 76, 1], [13, 77, 1], [13, 77, 2], [13, 79, 1], [13, 79, 2], [13, 80, 1], [13, 81, 1], [13, 83, 1], [13, 84, 1], [13, 84, 2], [13, 84, 3], [13, 85, 1], [13, 85, 2], [13, 86, 1], [13, 87, 1], [14, 6.1, 1], [14, 6.2, 1], [14, 6.3, 1], [14, 7, 1], [14, 8.1, 1], [14, 8.2, 1], [14, 8.3, 1], [14, 9.1, 1], [14, 9.2, 1], [14, 10, 1], [14, 10, 2], [14, 12, 1], [14, 12, 2], [14, 12, 3], [14, 14, 1], [14, 14, 2], [14, 15, 1], [14, 15.1, 2], [14, 15.2, 2], [14, 15.3, 2], [14, 16, 1], [14, 16, 2], [14, 17, 1], [14, 18, 1], [14, 18, 2], [14, 19, 1], [14, 20, 1], [14, 21, 1], [14, 21, 2], [14, 21, 3], [14, 22, 1], [14, 23, 1], [14, 24, 1], [14, 25, 1], [14, 26, 1], [14, 26, 2], [14, 26, 3], [14, 26, 4], [14, 27, 1], [14, 28, 1], [14, 28, 2], [14, 28, 3], [14, 29, 1], [14, 30, 1], [14, 31, 1], [14, 32, 1], [14, 33, 1], [14, 35, 1], [14, 37, 1], [14, 38, 1], [14, 38, 2], [14, 38, 3], [14, 39, 1], [14, 39, 2], [14, 39, 3], [14, 39, 4], [14, 39, 5], [14, 39, 6], [14, 40, 1], [14, 41, 1], [14, 42, 1], [14, 46, 1], [15, 3, 1], [15, 3, 2], [15, 4, 1], [15, 4, 2], [15, 4, 3], [15, 9, 1], [15, 10, 1], [15, 12, 1], [15, 12, 2], [15, 12, 3], [15, 12, 4], [15, 12, 5], [15, 12, 6], [15, 17, 1], [15, 17, 2], [15, 17, 3], [15, 17, 4], [15, 18, 1], [15, 19, 1], [15, 19, 2], [15, 20, 1], [15, 21, 1], [15, 21, 2], [15, 22, 1], [15, 23, 1], [15, 23, 2], [15, 24, 1], [15, 24, 2], [15, 25, 1], [15, 25, 2], [15, 26, 1], [15, 26, 2], [15, 27, 1], [15, 27, 2], [15, 27, 3], [15, 27, 4], [15, 27, 5], [15, 27, 6], [15, 27, 7], [15, 27, 8], [15, 28, 1], [15, 29, 1], [15, 30, 1], [15, 31, 1], [15, 32, 1], [15, 34, 1], [15, 34, 2], [15, 34, 3], [15, 43, 1], [15, 43, 2], [15, 43, 3], [15, 50, 1], [15, 50, 2], [15, 50, 3], [15, 50, 4], [15, 50, 5], [15, 50, 6], [15, 62, 1], [15, 62, 2], [15, 62, 3], [15, 63, 1], [15, 63, 2], [15, 63, 3], [15, 65, 1], [15, 65, 2], [15, 66, 1], [15, 66, 2], [15, 66, 3], [15, 75, 1], [15, 75, 2], [15, 75, 3], [15, 77, 1], [15, 77, 2], [15, 77, 3], [15, 78, 1], [15, 79, 1], [15, 81, 1], [15, 81, 2], [15, 81, 3], [15, 82, 1], [15, 82, 2], [15, 82, 3], [15, 83, 1.1], [15, 83, 1.2], [15, 83, 2], [15, 83, 3.1], [15, 83, 3.2], [15, 83, 4], [15, 84, 1], [15, 85, 1], [15, 85, 2], [15, 85, 3], [15, 86, 1], [15, 86, 2], [15, 86, 3], [15, 87, 1], [15, 87, 2], [15, 87, 3], [15, 87, 4], [15, 87, 5], [15, 88, 1], [15, 89, 1], [15, 90, 1], [16, 1, 1], [16, 1, 2], [16, 1, 3], [16, 1, 4], [16, 1, 5], [16, 1, 6], [16, 1, 7], [16, 1, 8], [16, 1, 9], [16, 1, 10], [16, 1, 11], [16, 1, 12], [16, 1, 13], [16, 1, 14], [16, 1, 15], [16, 1, 16], [16, 1, 17], [16, 1, 18], [16, 1, 19], [16, 1, 20], [16, 1, 21], [16, 1, 22], [16, 1, 23], [16, 1, 24], [16, 1, 25], [16, 1, 26], [16, 1, 27], [16, 14, 1], [16, 14, 2], [16, 14, 3], [16, 14, 4], [16, 14, 5], [16, 14, 6], [16, 14, 7], [16, 14, 8], [16, 14, 9], [16, 14, 10], [16, 14, 11], [16, 14, 12], [16, 14, 13], [16, 14, 14], [16, 14, 15], [16, 14, 16], [16, 14, 17], [16, 14, 18], [16, 14, 19], [16, 14, 20], [16, 18, 1], [16, 19, 1], [16, 20, 1], [16, 22, 1], [16, 24, 1], [16, 24, 2], [16, 43, 1], [16, 45, 1], [16, 45, 2], [16, 46, 1], [16, 47, 1], [16, 50, 1], [16, 51, 1], [16, 54, 1], [16, 61, 1], [16, 63, 1], [16, 66, 1], [16, 66, 2], [16, 66, 3], [16, 67, 1], [16, 71, 1], [16, 72, 1], [16, 73, 1], [16, 74, 1], [16, 75, 1], [16, 76, 1], [16, 77, 1], [16, 77, 2], [16, 77, 3], [16, 78, 1], [17, 4, 1], [17, 4, 2], [17, 5, 1], [17, 9, 1], [17, 14, 1], [17, 15, 1], [17, 15, 2], [17, 16, 1], [17, 20, 1], [17, 22, 1], [17, 23, 1], [17, 24, 1], [17, 24, 2], [17, 26, 1], [17, 27, 1], [17, 27, 2], [17, 28, 1], [17, 28, 2], [17, 29, 1], [17, 29, 2], [17, 30, 1], [17, 31, 1], [18, 2, 1], [18, 2, 2], [18, 2, 3], [18, 2, 4], [18, 2, 5], [18, 2, 6], [18, 2, 7], [18, 2, 8], [18, 48, 1], [18, 48, 2], [18, 49, 1], [18, 50, 1], [18, 64, 1], [18, 64, 2], [18, 64, 3], [18, 65, 1], [18, 66, 1], [18, 67, 1], [18, 71, 1], [18, 75, 1], [19, 17, 1], [19, 17, 2], [19, 21, 1], [20, 3, 1], [20, 4, 1], [20, 5, 1], [20, 7, 1], [20, 8, 1], [20, 9, 1], [20, 10, 1], [20, 11, 1], [20, 12, 1], [20, 13, 1], [20, 15, 1], [20, 16, 1], [20, 17, 1], [20, 20, 1], [20, 21, 1], [20, 23, 1], [20, 27, 1], [20, 28, 1], [20, 29, 1], [20, 32, 1], [20, 34, 1], [20, 36, 1], [20, 38, 1], [20, 38, 2], [20, 38, 3], [20, 44, 1], [20, 46, 1], [20, 54, 1], [20, 57, 1], [20, 57, 2], [28, 16, 1], [28, 17, 1], [28, 21, 1], [28, 21, 2], [28, 21, 3], [28, 21, 4], [28, 21, 5], [28, 21, 6], [28, 21, 7], [28, 24, 1], [28, 25, 1], [28, 26, 1], [28, 26, 2], [28, 26, 3], [28, 41, 1], [28, 43, 1], [28, 44, 1], [28, 44, 2], [28, 44, 3], [28, 44, 4], [28, 44, 5], [28, 44, 6], [28, 45, 1], [28, 45, 2], [28, 46, 1], [28, 46, 2], [28, 53, 1], [28, 53, 2], [28, 55, 1], [28, 55, 2], [28, 56.1, 1], [28, 56.2, 2], [28, 56.2, 3], [28, 56.3, 1], [28, 56.4, 1], [28, 56.5, 1], [28, 56.6, 1], [28, 58.2, 1], [28, 58.3, 1], [28, 58.3, 2], [28, 58.4, 1], [28, 60, 1], [28, 61, 1], [28, 64, 1], [28, 66, 1], [28, 67, 1], [28, 68, 1], [28, 72, 1], [28, 73, 1], [28, 74, 1]]

(24)

nops([[8, 33, 1], [8, 34, 1], [12, 6, 1], [12, 7, 1], [12, 8, 1], [12, 8, 2], [12, 8, 3], [12, 8, 4], [12, 8, 5], [12, 8, 6], [12, 8, 7], [12, 8, 8], [12, 9, 1], [12, 9, 2], [12, 9, 3], [12, 12, 1], [12, 12, 2], [12, 12, 3], [12, 12, 4], [12, 13, 1], [12, 14, 1], [12, 16, 1], [12, 18, 1], [12, 19, 1], [12, 21, 1], [12, 23, 1], [12, 23, 2], [12, 23, 3], [12, 24.1, 1], [12, 24.2, 1], [12, 24.3, 1], [12, 26, 1], [12, 27, 1], [12, 28, 1], [12, 29, 1], [12, 30, 1], [12, 31, 1], [12, 32, 1], [12, 34, 1], [12, 35, 1], [12, 36, 1], [12, 37, 1], [12, 37, 2], [12, 37, 3], [12, 37, 4], [12, 37, 5], [12, 37, 6], [12, 37, 7], [12, 37, 8], [12, 37, 9], [12, 38, 1], [12, 38, 2], [12, 38, 3], [12, 38, 4], [12, 38, 5], [13, 2, 1], [13, 2, 2], [13, 2, 3], [13, 7, 1], [13, 7, 2], [13, 7, 3], [13, 7, 4], [13, 7, 5], [13, 7, 6], [13, 7, 7], [13, 7, 8], [13, 14, 1], [13, 14, 2], [13, 14, 3], [13, 19, 1], [13, 31, 1], [13, 32, 1], [13, 46, 1], [13, 48, 1], [13, 49, 1], [13, 49, 2], [13, 51, 1], [13, 53, 1], [13, 59, 1], [13, 59, 2], [13, 60, 1], [13, 60, 2], [13, 60, 3], [13, 60, 4], [13, 60, 5], [13, 60, 6], [13, 60, 7], [13, 60, 8], [13, 61, 1], [13, 61, 2], [13, 62, 1], [13, 62, 2], [13, 62, 4], [13, 62, 6], [13, 63, 1], [13, 63, 2], [13, 63, 3], [13, 63, 4], [13, 64, 1], [13, 64, 2], [13, 64, 3], [13, 64, 4], [13, 65, 1], [13, 69, 1], [13, 71, 1], [13, 72, 1], [13, 73, 1], [13, 74, 1], [13, 74, 2], [13, 74, 3], [13, 76, 1], [13, 77, 1], [13, 77, 2], [13, 79, 1], [13, 79, 2], [13, 80, 1], [13, 81, 1], [13, 83, 1], [13, 84, 1], [13, 84, 2], [13, 84, 3], [13, 85, 1], [13, 85, 2], [13, 86, 1], [13, 87, 1], [14, 6.1, 1], [14, 6.2, 1], [14, 6.3, 1], [14, 7, 1], [14, 8.1, 1], [14, 8.2, 1], [14, 8.3, 1], [14, 9.1, 1], [14, 9.2, 1], [14, 10, 1], [14, 10, 2], [14, 12, 1], [14, 12, 2], [14, 12, 3], [14, 14, 1], [14, 14, 2], [14, 15, 1], [14, 15.1, 2], [14, 15.2, 2], [14, 15.3, 2], [14, 16, 1], [14, 16, 2], [14, 17, 1], [14, 18, 1], [14, 18, 2], [14, 19, 1], [14, 20, 1], [14, 21, 1], [14, 21, 2], [14, 21, 3], [14, 22, 1], [14, 23, 1], [14, 24, 1], [14, 25, 1], [14, 26, 1], [14, 26, 2], [14, 26, 3], [14, 26, 4], [14, 27, 1], [14, 28, 1], [14, 28, 2], [14, 28, 3], [14, 29, 1], [14, 30, 1], [14, 31, 1], [14, 32, 1], [14, 33, 1], [14, 35, 1], [14, 37, 1], [14, 38, 1], [14, 38, 2], [14, 38, 3], [14, 39, 1], [14, 39, 2], [14, 39, 3], [14, 39, 4], [14, 39, 5], [14, 39, 6], [14, 40, 1], [14, 41, 1], [14, 42, 1], [14, 46, 1], [15, 3, 1], [15, 3, 2], [15, 4, 1], [15, 4, 2], [15, 4, 3], [15, 9, 1], [15, 10, 1], [15, 12, 1], [15, 12, 2], [15, 12, 3], [15, 12, 4], [15, 12, 5], [15, 12, 6], [15, 17, 1], [15, 17, 2], [15, 17, 3], [15, 17, 4], [15, 18, 1], [15, 19, 1], [15, 19, 2], [15, 20, 1], [15, 21, 1], [15, 21, 2], [15, 22, 1], [15, 23, 1], [15, 23, 2], [15, 24, 1], [15, 24, 2], [15, 25, 1], [15, 25, 2], [15, 26, 1], [15, 26, 2], [15, 27, 1], [15, 27, 2], [15, 27, 3], [15, 27, 4], [15, 27, 5], [15, 27, 6], [15, 27, 7], [15, 27, 8], [15, 28, 1], [15, 29, 1], [15, 30, 1], [15, 31, 1], [15, 32, 1], [15, 34, 1], [15, 34, 2], [15, 34, 3], [15, 43, 1], [15, 43, 2], [15, 43, 3], [15, 50, 1], [15, 50, 2], [15, 50, 3], [15, 50, 4], [15, 50, 5], [15, 50, 6], [15, 62, 1], [15, 62, 2], [15, 62, 3], [15, 63, 1], [15, 63, 2], [15, 63, 3], [15, 65, 1], [15, 65, 2], [15, 66, 1], [15, 66, 2], [15, 66, 3], [15, 75, 1], [15, 75, 2], [15, 75, 3], [15, 77, 1], [15, 77, 2], [15, 77, 3], [15, 78, 1], [15, 79, 1], [15, 81, 1], [15, 81, 2], [15, 81, 3], [15, 82, 1], [15, 82, 2], [15, 82, 3], [15, 83, 1.1], [15, 83, 1.2], [15, 83, 2], [15, 83, 3.1], [15, 83, 3.2], [15, 83, 4], [15, 84, 1], [15, 85, 1], [15, 85, 2], [15, 85, 3], [15, 86, 1], [15, 86, 2], [15, 86, 3], [15, 87, 1], [15, 87, 2], [15, 87, 3], [15, 87, 4], [15, 87, 5], [15, 88, 1], [15, 89, 1], [15, 90, 1], [16, 1, 1], [16, 1, 2], [16, 1, 3], [16, 1, 4], [16, 1, 5], [16, 1, 6], [16, 1, 7], [16, 1, 8], [16, 1, 9], [16, 1, 10], [16, 1, 11], [16, 1, 12], [16, 1, 13], [16, 1, 14], [16, 1, 15], [16, 1, 16], [16, 1, 17], [16, 1, 18], [16, 1, 19], [16, 1, 20], [16, 1, 21], [16, 1, 22], [16, 1, 23], [16, 1, 24], [16, 1, 25], [16, 1, 26], [16, 1, 27], [16, 14, 1], [16, 14, 2], [16, 14, 3], [16, 14, 4], [16, 14, 5], [16, 14, 6], [16, 14, 7], [16, 14, 8], [16, 14, 9], [16, 14, 10], [16, 14, 11], [16, 14, 12], [16, 14, 13], [16, 14, 14], [16, 14, 15], [16, 14, 16], [16, 14, 17], [16, 14, 18], [16, 14, 19], [16, 14, 20], [16, 18, 1], [16, 19, 1], [16, 20, 1], [16, 22, 1], [16, 24, 1], [16, 24, 2], [16, 43, 1], [16, 45, 1], [16, 45, 2], [16, 46, 1], [16, 47, 1], [16, 50, 1], [16, 51, 1], [16, 54, 1], [16, 61, 1], [16, 63, 1], [16, 66, 1], [16, 66, 2], [16, 66, 3], [16, 67, 1], [16, 71, 1], [16, 72, 1], [16, 73, 1], [16, 74, 1], [16, 75, 1], [16, 76, 1], [16, 77, 1], [16, 77, 2], [16, 77, 3], [16, 78, 1], [17, 4, 1], [17, 4, 2], [17, 5, 1], [17, 9, 1], [17, 14, 1], [17, 15, 1], [17, 15, 2], [17, 16, 1], [17, 20, 1], [17, 22, 1], [17, 23, 1], [17, 24, 1], [17, 24, 2], [17, 26, 1], [17, 27, 1], [17, 27, 2], [17, 28, 1], [17, 28, 2], [17, 29, 1], [17, 29, 2], [17, 30, 1], [17, 31, 1], [18, 2, 1], [18, 2, 2], [18, 2, 3], [18, 2, 4], [18, 2, 5], [18, 2, 6], [18, 2, 7], [18, 2, 8], [18, 48, 1], [18, 48, 2], [18, 49, 1], [18, 50, 1], [18, 64, 1], [18, 64, 2], [18, 64, 3], [18, 65, 1], [18, 66, 1], [18, 67, 1], [18, 71, 1], [18, 75, 1], [19, 17, 1], [19, 17, 2], [19, 21, 1], [20, 3, 1], [20, 4, 1], [20, 5, 1], [20, 7, 1], [20, 8, 1], [20, 9, 1], [20, 10, 1], [20, 11, 1], [20, 12, 1], [20, 13, 1], [20, 15, 1], [20, 16, 1], [20, 17, 1], [20, 20, 1], [20, 21, 1], [20, 23, 1], [20, 27, 1], [20, 28, 1], [20, 29, 1], [20, 32, 1], [20, 34, 1], [20, 36, 1], [20, 38, 1], [20, 38, 2], [20, 38, 3], [20, 44, 1], [20, 46, 1], [20, 54, 1], [20, 57, 1], [20, 57, 2], [28, 16, 1], [28, 17, 1], [28, 21, 1], [28, 21, 2], [28, 21, 3], [28, 21, 4], [28, 21, 5], [28, 21, 6], [28, 21, 7], [28, 24, 1], [28, 25, 1], [28, 26, 1], [28, 26, 2], [28, 26, 3], [28, 41, 1], [28, 43, 1], [28, 44, 1], [28, 44, 2], [28, 44, 3], [28, 44, 4], [28, 44, 5], [28, 44, 6], [28, 45, 1], [28, 45, 2], [28, 46, 1], [28, 46, 2], [28, 53, 1], [28, 53, 2], [28, 55, 1], [28, 55, 2], [28, 56.1, 1], [28, 56.2, 2], [28, 56.2, 3], [28, 56.3, 1], [28, 56.4, 1], [28, 56.5, 1], [28, 56.6, 1], [28, 58.2, 1], [28, 58.3, 1], [28, 58.3, 2], [28, 58.4, 1], [28, 60, 1], [28, 61, 1], [28, 64, 1], [28, 66, 1], [28, 67, 1], [28, 68, 1], [28, 72, 1], [28, 73, 1], [28, 74, 1]])

492

(25)

NULL

:)



Download Exact_Solutions_to_Einstein_Equations.mw

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

The engineering design process involves numerous steps that allow the engineer to reach his/her final design objectives to the best of his/her ability. This process is akin to creating a fine sculpture or a great painting where different approaches are explored and tested, then either adopted or abandoned in favor of better or more developed and fine-tuned ones. Consider the x-ray of an oil painting. X-rays of the works of master artists reveal the thought and creative processes of their minds as they complete the work. I am sure that some colleagues may disagree with the comparison of our modern engineering designs to art masterpieces, but let me ask you to explore the innovations and their brilliant forms, and maybe you will agree with me even a little bit.

Design Process

Successful design engineers must have the very best craft, knowledge and experience to generate work that is truly worthy of being incorporated in products that sell in the tens, or even hundreds, of millions. This is presently achieved by having cross-functional teams of engineers work on a design, allowing cross checking and several rounds of reviews, followed by multiple prototypes and exhaustive preproduction testing until the team reaches a collective conclusion that “we have a design.” This is then followed by the final design review and release of the product. This necessary and vital approach is clearly a time consuming and costly process. Over the years I have asked myself several times, “Did I explore every single detail of the design fully”? “Am I sure that this is the very best I can do?” And more importantly, “Does every component have the most fine-tuned value to render the best performance possible?” And invariably I am left with a bit of doubt. That brings me to a tool that has helped me in this regard.

A Great New Tool

I have used Maple for over 25 years to dig deeply into my designs and understand the interplay between a given set of parameters and the performance of the particular circuit I am working on. This has always given me a complete view of the problem at hand and solidly pointed me in the direction of the best possible solutions.

In recent years, a new feature called “Explore” has been added to Maple. This amazing feature allows the engineer/researcher to peer very deeply into any formula and explore the interaction of EVERY variable in the formula. 

Take for example the losses in the control MOSFET in a synchronous buck converter. In order to minimize these losses and maximize the power conversion efficiency, the most suitable MOSFET must be selected. With thousands of these devices being available in the market, a dozen of them are considered very close to the best at any given time. The real question then is, which one is really the very best amongst all of them? 

There are two possible approaches - one, build an application prototype, test a random sample of each and choose the one that gives you the best efficiency.  Or, use an accurate mathematical model to calculate the losses of each and chose the best. The first approach lacks the variability of each parameter due to the six sigma statistical distribution where it is next to impossible to get a device laying on the outer limits of the distribution. That leaves the mathematical model approach. If you take this route, you can have built-in tolerances in the equations to accommodate all the variabilities and use a simplified equation for the control MOSFET losses (clearly you can use a very detailed model should you chose to) to explore these losses. Luckily you can explore the losses using the Explore function in Maple.

The figure below shows a three dimensional plot, plus five other variables in the formula that the user can change using sliders that cover the range of values of interest including Minima and Maxima, while observing in real time the effects of the change on the power loss.

This means that by changing the values of any set of variables, you can observe their effect on the function. To put it simply, this single feature helps you replace dozens of plots with just one, saving you precious time and cost in fine-tuning your design. In my opinion, this is equivalent to an eight-dimensional/axes plot.

I used this amazing feature in the last few weeks and I was delighted at how simple it is to use and how much it simplifies the study of my approach and my components selection, in record times!

 Obtain the tri-stimulus XYZ values from the CIE Color matching functions.

 Show the gamut of maximum chroma for the standard observer model with a D65 Illuminant.

 Approximate the white point of a Planckian source and compare to D65.

 Translate the maximum chroma gamut in xy to Lab (CIE L*a*b*) for perceived gamut (Violet and Magenta come together)

 Map the RGB color cube of fully saturated color into Lab and compare to perceivable colors.

10/6/15  Initial Document

•12/28/15 Improve RGB gamut with more data points: Procedures added for RGB to Lab: Wavlength Colors now based on CIEDE2000 model for Lab.                   

 

 Here is the latest version of this document, the MSL_data must be in a directory set in the mw file;

MSL_data.xlsx    Vision_RGB_Gamut.mw

In this paper we will demonstrate the many differences of implementation in the modeling of mechanical systems using embedded components through Maplesoft. The mechanical systems are used for different tasks and therefore have different structure in its design; as to the nature of the used functional elements placed on them, they vary greatly. This diversity is reflected in approaches and practices in modeling.

The following cases focus on mechanical components of the units manufacturing and processing machines. We can generate graphs for analysis using different dynamic pair ametros; all in real-time considerations in its manufacturing costs from the equations of conservation of energy.
Therefore modeling with Maplesoft ensures the smooth optimum performance in mechanical systems, highlighting the sustainability criteria for other areas of engineering.

 

XXXIII_Coloquio_SMP_2015.pdf

XXXIII_Coloquio_UNASAM_2015.mw

(in spanish)

L.AraujoC.

 

 

Apparently inconsistent behaviour of the BesselJ() function.

Examples: BesselJ(-3, 0)  ... gives 0 (correct)

but BesselJ(-3.0, 0), BesselJ(-3, 0.0)  and BesselJ(-3, 0.0) all give Float(infinity) (wrong! - should be 0.0)

The problem seems to occur for all negative integer values of the first argument (the order) when the second argument is 0 or 0.0.


One of the interesting things about the Physics package is that it was designed from scratch to extend the domain of operations of the Maple system from commutative variables to one that includes commutative, anticommutative and nonocommutative variables, as well as abstract vectors and related (nabla) differential operators. In this line we have, among others, the following Physics commands working with this extended domain: `*` , `.` , `^` , diff , Expand , Normal , Simplify , Gtaylor , and Coefficients .

 

More recently, Pascal Szriftgiser (from Laboratoire PhLAM, Université Lille 1, France), suggested a similar approach to factorize expressions involving noncommutative variables. This is a pretty complicated problem though. Pascal's suggestion, however, spinned around an idea beautiful for its simplicity, similar to what is done in the experimental Physics command, PerformOnAnticommutativeSystem , that is, to transform the problem into one that can be treated with the command that works only with commutative variables and from there extract the result for noncommutative ones.The approach has limitations but it is surprising how far one can go using imaginative algebraic manipulations to extend these commands that otherwise only work with commutative variables.

 

In brief, we now have a new command, Physics:-Factor, with already powerful performance for factorizing algebraic expressions that involve commutative, noncommutative and anticommutative variables, making Maple's mathematical capabilities more advanced in very interesting directions. This command is in fact useful not just in advanced theoretical physics, but for instance also when working with noncommutative symbols representing abstract matrices (that can have dependency, and so they can be differentiated before saying anything about their components, multiplied, and be present int  expressions that in turn can be expanded, simplified and now also factorized), and also useful with expressions that include differential operators, now that within Physics you can compute with the the covariant and noncovariant derivatives D_  and d_ algebraically. For instance, how about solving differential equations using Physics:-Factor (reducing their order by means of factoring the involved differential operators) ? :)

 

What follows are some basic algebraic examples illustrating the novelty, and as usual to reproduce the results in this worksheet you need to update your Physics library with the one available in the Maplesoft R&D Physics webpage.

 

Physics:-Version()[2]

`2015, September 25, 7:48 hours`

(1)

with(Physics); -1; Setup(quantumoperators = {a, b, c, d, e}, mathematicalnotation = true)

[mathematicalnotation = true, quantumoperators = {a, b, c, d, e}]

(2)

First example, because of using mathematical notation, noncommutative variables are displayed in different color (olive)

Physics:-`*`(Physics:-`^`(alpha, 2), Physics:-`^`(a, 2))+Physics:-`*`(Physics:-`*`(Physics:-`*`(alpha, sqrt(2)), a), b)+Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(4, sqrt(2)), lambda), Physics:-`^`(b, 2)), c)+Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(4, lambda), alpha), b), c), a)+Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(4, lambda), sqrt(2)), b), c), b)+Physics:-`*`(Physics:-`*`(16, Physics:-`^`(lambda, 2)), Physics:-`^`(Physics:-`*`(b, c), 2))+Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(Physics:-`*`(4, alpha), lambda), a), b), c)+Physics:-`*`(Physics:-`*`(Physics:-`*`(sqrt(2), alpha), b), a)+Physics:-`*`(2, Physics:-`^`(b, 2))

alpha^2*Physics:-`^`(a, 2)+alpha*2^(1/2)*Physics:-`*`(a, b)+4*2^(1/2)*lambda*Physics:-`*`(Physics:-`^`(b, 2), c)+4*lambda*alpha*Physics:-`*`(b, c, a)+4*2^(1/2)*lambda*Physics:-`*`(b, c, b)+16*lambda^2*Physics:-`^`(Physics:-`*`(b, c), 2)+4*lambda*alpha*Physics:-`*`(a, b, c)+alpha*2^(1/2)*Physics:-`*`(b, a)+2*Physics:-`^`(b, 2)

(3)

Physics:-Factor(alpha^2*Physics:-`^`(a, 2)+alpha*2^(1/2)*Physics:-`*`(a, b)+4*2^(1/2)*lambda*Physics:-`*`(Physics:-`^`(b, 2), c)+4*lambda*alpha*Physics:-`*`(b, c, a)+4*2^(1/2)*lambda*Physics:-`*`(b, c, b)+16*lambda^2*Physics:-`^`(Physics:-`*`(b, c), 2)+4*lambda*alpha*Physics:-`*`(a, b, c)+alpha*2^(1/2)*Physics:-`*`(b, a)+2*Physics:-`^`(b, 2))

Physics:-`^`(4*lambda*Physics:-`*`(b, c)+a*alpha+2^(1/2)*b, 2)

(4)

A more involved example from a physics problem, illustrating that the factorization is also happening within function's arguments, as well as that we can also correctly expand mathematical expressions involving noncommutative variables

PDEtools:-declare((a, b, c, g)(x, y)):

a(x, y)*`will now be displayed as`*a

 

b(x, y)*`will now be displayed as`*b

 

c(x, y)*`will now be displayed as`*c

 

g(x, y)*`will now be displayed as`*g

(5)

Physics:-Intc(Physics:-`^`(Physics:-`*`(Physics:-`*`(Physics:-`*`(4, Physics:-Dagger(b(x, y))), c(x, y)), lambda)+Physics:-`*`(Physics:-`*`(Physics:-`*`(alpha, f(t)), a(x, y)), Physics:-Dagger(a(x, y)))+Physics:-`*`(Physics:-`*`(sqrt(2), g(x, y)), b(x, y)), 2), x, y)

Int(Int(Physics:-`^`(4*lambda*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y))+alpha*f(t)*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)))+2^(1/2)*g(x, y)*b(x, y), 2), x = -infinity .. infinity), y = -infinity .. infinity)

(6)

So first expand ...

expand(Int(Int(Physics:-`^`(4*lambda*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y))+alpha*f(t)*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)))+2^(1/2)*g(x, y)*b(x, y), 2), x = -infinity .. infinity), y = -infinity .. infinity))

Int(Int(16*lambda^2*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y), Physics:-Dagger(b(x, y)), c(x, y))+4*lambda*alpha*f(t)*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y), a(x, y), Physics:-Dagger(a(x, y)))+4*lambda*2^(1/2)*g(x, y)*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y), b(x, y))+4*alpha*f(t)*lambda*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)), Physics:-Dagger(b(x, y)), c(x, y))+alpha^2*f(t)^2*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)), a(x, y), Physics:-Dagger(a(x, y)))+alpha*f(t)*2^(1/2)*g(x, y)*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)), b(x, y))+4*2^(1/2)*g(x, y)*lambda*Physics:-`*`(b(x, y), Physics:-Dagger(b(x, y)), c(x, y))+2^(1/2)*g(x, y)*alpha*f(t)*Physics:-`*`(b(x, y), a(x, y), Physics:-Dagger(a(x, y)))+2*g(x, y)^2*Physics:-`^`(b(x, y), 2), x = -infinity .. infinity), y = -infinity .. infinity)

(7)

Now retrieve the original expression by recursing over the arguments and so factoring the integrand

Physics:-Factor(Int(Int(16*lambda^2*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y), Physics:-Dagger(b(x, y)), c(x, y))+4*lambda*alpha*f(t)*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y), a(x, y), Physics:-Dagger(a(x, y)))+4*lambda*2^(1/2)*g(x, y)*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y), b(x, y))+4*alpha*f(t)*lambda*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)), Physics:-Dagger(b(x, y)), c(x, y))+alpha^2*f(t)^2*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)), a(x, y), Physics:-Dagger(a(x, y)))+alpha*f(t)*2^(1/2)*g(x, y)*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)), b(x, y))+4*2^(1/2)*g(x, y)*lambda*Physics:-`*`(b(x, y), Physics:-Dagger(b(x, y)), c(x, y))+2^(1/2)*g(x, y)*alpha*f(t)*Physics:-`*`(b(x, y), a(x, y), Physics:-Dagger(a(x, y)))+2*g(x, y)^2*Physics:-`^`(b(x, y), 2), x = -infinity .. infinity), y = -infinity .. infinity))

Int(Int(Physics:-`^`(4*lambda*Physics:-`*`(Physics:-Dagger(b(x, y)), c(x, y))+alpha*f(t)*Physics:-`*`(a(x, y), Physics:-Dagger(a(x, y)))+2^(1/2)*g(x, y)*b(x, y), 2), x = -infinity .. infinity), y = -infinity .. infinity)

(8)

This following one looks simpler but it is actually more complicated:

Physics:-`*`(Physics:-Commutator(a, b), c)

Physics:-`*`(Physics:-Commutator(a, b), c)

(9)

expand(Physics:-`*`(Physics:-Commutator(a, b), c))

Physics:-`*`(a, b, c)-Physics:-`*`(b, a, c)

(10)

The complication consists of the fact that the standard factor  command, that assumes products are commutative, can never deal with factors like Physics:-Commutator(a, b) = a*b-a*b because if products were commutative these factors are equal to 0. Of course we not just us factor but include a number of algebraic manipulations before using it, so that the approach handles these cases nicely anyway

Physics:-Factor(Physics:-`*`(a, b, c)-Physics:-`*`(b, a, c))

Physics:-`*`(Physics:-`*`(a, b)-Physics:-`*`(b, a), c)

(11)

This other one is more complicated:

Physics:-`*`(Physics:-`*`(a, b)-Physics:-`*`(b, a), a+Physics:-`*`(beta, b)+Physics:-`^`(c, 2))

Physics:-`*`(Physics:-`*`(a, b)-Physics:-`*`(b, a), a+beta*b+Physics:-`^`(c, 2))

(12)

When you expand,

expand(Physics:-`*`(Physics:-`*`(a, b)-Physics:-`*`(b, a), a+beta*b+Physics:-`^`(c, 2)))

Physics:-`*`(a, b, a)+beta*Physics:-`*`(a, Physics:-`^`(b, 2))+Physics:-`*`(a, b, Physics:-`^`(c, 2))-Physics:-`*`(b, Physics:-`^`(a, 2))-beta*Physics:-`*`(b, a, b)-Physics:-`*`(b, a, Physics:-`^`(c, 2))

(13)

you see that there are various terms involving the same noncommutative operands, just multiplied in different order. Generally speaking the limitation (n this moment) of the approach is: "there cannot be more than 2 terms in the expanded form containing the same operands" . For instance in (13) the 1st and 4th terms have the same operands, that are actually also present in the 5th term but there you also have beta and for that reason (involving some additional manipulations) it can be handled:

Physics:-Factor(Physics:-`*`(a, b, a)+beta*Physics:-`*`(a, Physics:-`^`(b, 2))+Physics:-`*`(a, b, Physics:-`^`(c, 2))-Physics:-`*`(b, Physics:-`^`(a, 2))-beta*Physics:-`*`(b, a, b)-Physics:-`*`(b, a, Physics:-`^`(c, 2)))

Physics:-`*`(Physics:-`*`(a, b)-Physics:-`*`(b, a), a+beta*b+Physics:-`^`(c, 2))

(14)

Recalling, in all these examples, the task is actually accomplished by the standard factor  command, and the manipulations consist of ingeniously rewriting the given problem as one that involves only commutative variables, and from extract the correct result for non commutative variables.

 

To conclude, here is an example where the approach implemented does not work (yet) because of the limitation mentioned in the previous paragraph:

Physics:-`^`(Physics:-Commutator(a, b)+c, 2)

Physics:-`^`(Physics:-Commutator(a, b)+c, 2)

(15)

expand(Physics:-`^`(Physics:-Commutator(a, b)+c, 2))

Physics:-`*`(a, b, a, b)-Physics:-`*`(a, Physics:-`^`(b, 2), a)+Physics:-`*`(a, b, c)-Physics:-`*`(b, Physics:-`^`(a, 2), b)+Physics:-`*`(b, a, b, a)-Physics:-`*`(b, a, c)+Physics:-`*`(c, a, b)-Physics:-`*`(c, b, a)+Physics:-`^`(c, 2)

(16)

In this expression, the 1st, 2nd, 4th and 5th terms have the same operands a, b, a, b and then there are four terms containing the operands a, b, c. We do have an idea of how this could be done too ... :) To be there in one of the next Physics updates.

NULL

NULL


Download Physics[Factor].mw

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

Maple's dsolve numeric can solve delay ODEs and DAEs as of Maple 18. However, if I am not wrong, it cannot solve delay equations with a time dependent history. In this post I show two examples.

Example 1:

y1(t) and y2(t) with time dependent history. Use of piecewise helps this problem to be solved efficiently. Hopefully Maple will add history soon in its capability.

Example 2: 

This is a very a complicated stiff problem from immunology. As of now, I believe only Maple can solve this (other than RADAR5 from Prof. Hairer). Details and plots are posted in the attached code.

 

Let me know if any one has a delay problem that needs to be solved. I have tested many delay problems in Maple (they work fine). The attached examples required addtional tweaking, hence the post.

 

I want to take this opportunity to congratulate and thank Maple's dsolve numeric/delay solvers for their fantastic job. Maple is world leader not because of example1, but because of its ability to solve example 2.

 

 

restart;

 This code is written by Dayaram Sonawane and Venkat R. Subramnian, University of Washington. You will need Maple 18 or later for this. For those who are wanting to solve these problems in earlier versions, I can help them by offering a procedure based approach (less efficient).

Example1 The first example solved is a state dependent delay problem (http://www.mathworks.com/help/matlab/math/state-dependent-delay-problem.html).

 

eq1:= diff(y1(t),t)=y2(t);

eq1 := diff(y1(t), t) = y2(t)

(1)

eq2:=diff(y2(t),t)=-y2(exp(1-y2(t)))*y2(t)^2*exp(1-y2(t));

eq2 := diff(y2(t), t) = -y2(exp(1-y2(t)))*y2(t)^2*exp(1-y2(t))

(2)

 Both y1(t) and y2(t) have time dependent history (y1(t)=log(t) and y2(t)=1/t, t<-0.1). If I am not mistaken one cannot solve this directly using Maple's dsolve numeric command. However, a simple trick can be used to redefine the equations for y1(t) and y2(t) as below

eq3:=diff(y1(t),t)=piecewise(t<=0.1,1/t,y2(t));

eq3 := diff(y1(t), t) = piecewise(t <= .1, 1/t, y2(t))

(3)

eq4:=diff(y2(t),t)=piecewise(t<=0.1,-1/t^2,-y2(exp(1-y2(t)))*y2(t)^2*exp(1-y2(t)));

eq4 := diff(y2(t), t) = piecewise(t <= .1, -1/t^2, -y2(exp(1-y2(t)))*y2(t)^2*exp(1-y2(t)))

(4)

 The problem is solved from a small number close to t = 0 (1e-4) to make Maple's dsolve numeric remember the history till t = 0.1

epsilon:=1e-4;

epsilon := 0.1e-3

(5)

sol:=dsolve({eq3,eq4,y1(epsilon)=log(epsilon),y2(epsilon)=1/epsilon},type=numeric,delaymax=5):

with(plots):

odeplot(sol,[t,y1(t)],0.1..5,thickness=3,axes=boxed);

 

odeplot(sol,[t,y2(t)],0.1..5,thickness=3,axes=boxed);

 

sol(5.0);log(5.0);1/5.0;

[t = 5.0, y1(t) = 1.60942323180838, y2(t) = .199998786891688]

1.609437912

.2000000000

(6)

Tweaking the tolerances and epsilon will get the solution even more closer to the expected answers.

 

 

 Example 2

 The next problem discussed is very stiff, complicated and as of today, according Professor Hairer (one of the world's leading authority in numerical solutions of ODEs, DAEs), cannot be solved by any other code other than his RADAR (5th order implicit Runge Kutta modified for delay equations, Guglielmi N. and Hairer E. (2001) Implementing Radau IIa methods for stiff delay differential equations. Computing 67:1-12). This problem requires very stringent tolerances. For more information read, http://www.scholarpedia.org/article/Stiff_delay_equations. I can safely say that Maple can boast that it can solve this delay differential equation by using a switch function (instead of Heaviside/picecewise function). Code is attached below and results are compared with the output from RADAR code.  Note that dsolve/numeric is probably taking more time steps compared to RADAR, but the fact that Maple's dsolve numeric solved this model (which cannot be solved in Mathematica or MATLAB[needs confirmation for MATLAB]) should make Maple's code writers proud. It is very likely that we will be trying to submit an educational/research article on this topic/example soon to a journal. For some weird reasons, stiff=true gives slightly inaccurate results.

restart:

 

radar5data:=readdata("C:\\Users\\Venkat16core-office\\Google Drive\\waltmanproblem\\sol.txt",[string,string,float,string,string,float,float,float,float,float,float]):

nops(radar5data);

1059

(7)

radar5data[1059];

["X", "=", 300.000000, "Y", "=", 0.6154486288e-15, 0.3377120916e-6, 0.4221403310e-6, 0.2142554563e-5, 299.9999999, 299.6430338]

(8)

eq[1]:=diff(y[1](t),t)=-r*y[1](t)*y[2](t)-s*y[1](t)*y[4](t);

eq[1] := diff(y[1](t), t) = -r*y[1](t)*y[2](t)-s*y[1](t)*y[4](t)

(9)

eq[2]:=diff(y[2](t),t)=-r*y[1](t)*y[2](t)+alpha*r*y[1](y[5](t))*y[2](y[5](t))*H1;#Heaviside(t-35);

eq[2] := diff(y[2](t), t) = -r*y[1](t)*y[2](t)+alpha*r*y[1](y[5](t))*y[2](y[5](t))*H1

(10)

eq[3]:=diff(y[3](t),t)=r*y[1](t)*y[2](t);

eq[3] := diff(y[3](t), t) = r*y[1](t)*y[2](t)

(11)

eq[4]:=diff(y[4](t),t)=-s*y[1](t)*y[4](t)-gamma1*y[4](t)+beta*r*y[1](y[6](t))*y[2](y[6](t))*H2;#Heaviside(t-197);

eq[4] := diff(y[4](t), t) = -s*y[1](t)*y[4](t)-gamma1*y[4](t)+beta*r*y[1](y[6](t))*y[2](y[6](t))*H2

(12)

eq[5]:=diff(y[5](t),t)=H1*(y[1](t)*y[2](t)+y[3](t))/(y[1](y[5](t))*y[2](y[5](t))+y[3](y[5](t)));#eq[7]:=y[7](t)=HH(t);

eq[5] := diff(y[5](t), t) = H1*(y[1](t)*y[2](t)+y[3](t))/(y[1](y[5](t))*y[2](y[5](t))+y[3](y[5](t)))

(13)

eq[6]:=diff(y[6](t),t)=H2*(10.^(-12)*0+y[2](t)+y[3](t))/(10.^(-12)*0+y[2](y[6](t))+y[3](y[6](t)));

eq[6] := diff(y[6](t), t) = H2*(y[2](t)+y[3](t))/(y[2](y[6](t))+y[3](y[6](t)))

(14)

H1:=1/2+1/2*tanh(100*(t-35));H2:=1/2+1/2*tanh(100*(t-197));

H1 := 1/2+(1/2)*tanh(100*t-3500)

H2 := 1/2+(1/2)*tanh(100*t-19700)

(15)

alpha:=1.8;beta:=20.;gamma1:=0.002;r:=5.*10^4;s:=10.^5;

alpha := 1.8

beta := 20.

gamma1 := 0.2e-2

r := 50000.

s := 100000.

(16)

seq(eq[i],i=1..6);

diff(y[1](t), t) = -50000.*y[1](t)*y[2](t)-100000.*y[1](t)*y[4](t), diff(y[2](t), t) = -50000.*y[1](t)*y[2](t)+90000.0*y[1](y[5](t))*y[2](y[5](t))*(1/2+(1/2)*tanh(100*t-3500)), diff(y[3](t), t) = 50000.*y[1](t)*y[2](t), diff(y[4](t), t) = -100000.*y[1](t)*y[4](t)-0.2e-2*y[4](t)+1000000.*y[1](y[6](t))*y[2](y[6](t))*(1/2+(1/2)*tanh(100*t-19700)), diff(y[5](t), t) = (1/2+(1/2)*tanh(100*t-3500))*(y[1](t)*y[2](t)+y[3](t))/(y[1](y[5](t))*y[2](y[5](t))+y[3](y[5](t))), diff(y[6](t), t) = (1/2+(1/2)*tanh(100*t-19700))*(y[2](t)+y[3](t))/(y[2](y[6](t))+y[3](y[6](t)))

(17)

ics:=y[1](0)=5.*10^(-6),y[2](0)=10.^(-15),y[3](0)=0,y[4](0)=0,y[5](0)=1e-40,y[6](0)=1e-20;

ics := y[1](0) = 0.5000000000e-5, y[2](0) = 0.1000000000e-14, y[3](0) = 0, y[4](0) = 0, y[5](0) = 0.1e-39, y[6](0) = 0.1e-19

(18)

#infolevel[all]:=10;

sol:=dsolve({seq(eq[i],i=1..6),ics},type=numeric,delaymax=300,initstep=1e-6,abserr=[1e-21,1e-21,1e-21,1e-21,1e-9,1e-9],[y[1](t),y[2](t),y[3](t),y[4](t),y[5](t),y[6](t)],relerr=1e-9,maxstep=10,optimize=false,compile=true,maxfun=0):

 

 

 note that compile = true was used for efficiency

t11:=time():sol(300);time()-t11;

[t = 300., y[1](t) = 0.615611371327094e-15, y[2](t) = 0.337706811581908e-6, y[3](t) = 0.422136411682798e-6, y[4](t) = 0.214253771204037e-5, y[5](t) = 299.999986716780, y[6](t) = 299.643054284209]

.141

(19)

with(plots):

nd:=nops(radar5data);

nd := 1059

(20)

radar5data[nd];

["X", "=", 300.000000, "Y", "=", 0.6154486288e-15, 0.3377120916e-6, 0.4221403310e-6, 0.2142554563e-5, 299.9999999, 299.6430338]

(21)

 Values at t = 300 match with expected results.

pr[1]:=plot([seq([radar5data[i][3],log(radar5data[i][6])/log(10)],i=1..nd)],style=point,color=green):

p[1]:=odeplot(sol,[t,log(y[1](t))/log(10)],0..300,axes=boxed,thickness=3):

display({pr[1],p[1]});

 

pr[2]:=plot([seq([radar5data[i][3],log(radar5data[i][7])/log(10)],i=1..nd)],style=point,color=green):

p[2]:=odeplot(sol,[t,log(y[2](t))/log(10)],0..300,axes=boxed,thickness=3,numpoints=1000):

display({pr[2],p[2]});

 

pr[3]:=plot([seq([radar5data[i][3],log(radar5data[i][8])/log(10)],i=2..nd)],style=point,color=green):

 

p[3]:=odeplot(sol,[t,log(y[3](t))/log(10)],0..300,axes=boxed,thickness=3):

display({pr[3],p[3]});

 

pr[4]:=plot([seq([radar5data[i][3],log(radar5data[i][9])/log(10)],i=496..nd)],style=point,color=green,view=[197..300,-9..-5]):

p[4]:=odeplot(sol,[t,log(y[4](t))/log(10)],197..300,axes=boxed,thickness=3,view=[197..300,-9..-5]):

display({pr[4],p[4]});

 

pr[5]:=plot([seq([radar5data[i][3],radar5data[i][10]],i=1..nd)],style=point,color=green):

p[5]:=odeplot(sol,[t,y[5](t)],0..300,axes=boxed,thickness=3):

display({pr[5],p[5]});

 

pr[6]:=plot([seq([radar5data[i][3],radar5data[i][11]],i=1..nd)],style=point,color=green):

p[6]:=odeplot(sol,[t,y[6](t)],0..300,axes=boxed,thickness=3):

display({pr[6],p[6]});

 


Download delayimmunetopost.mws

LL_104)_NASDAQ.mw
Portfolio_Optimization.txt

Portfolio Optimization with Google Spreadsheet and Maple
 

I will in this post show how to manage data and do portfolio optimization in Maple by using google spreadsheet.

You can either use a direct link to the data:

https://docs.google.com/spreadsheets/d/1L5-yUB0EWeBdJNMdELKBRmBQ1JJ0QymrtDLkVhHCVn8/pub?gid=649021574&single=true&output=csv

or you can set up your own google spreadsheet. If you choice to set up your own spreedsheet follow the below road map:

1) select which market you want to follow:

NASDAQ

http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download

NYSE

http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download

AMEX

http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=AMEX&render=download


2) Create a new google spreadsheet and name two sheets Blad1 and Panel. In the first cell of Blad1 you put the formula:

=IMPORTDATA("http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download")

you need to change the url to match your selection in 1).


3) In the first cell of Panel you put the name "Ticker" and then you copy all the ticker names from Blad1.

4) In the script editor you put in the below java script code:


function PanelCreation_Stock() 

{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName("Blad1");
var dstSheet = ss.getSheetByName("Panel");
var curDat = new Date();
var day1 = curDat.getDay();
if(day1 == 0 || day1 == 1)
{
return;
}
var lCol = dstSheet.getLastColumn();
var srcdate = dstSheet.getRange(1, 1, 1, lCol).getValues();

for(var k=1;k<=srcdate[0].length-1;k++)
{
if(Utilities.formatDate(srcdate[0][k],"GMT", "dd-MMM-yy") == Utilities.formatDate(curDat,"GMT", "dd-MMM-yy"))
{
return;
}
}
var snRows = sourceSheet.getLastRow();
var dnRows = dstSheet.getLastRow();

var srcStock = sourceSheet.getRange("A2:A" + snRows).getValues();
var srcLastSale = sourceSheet.getRange("C2:C" + snRows).getValues();

var dstStock = dstSheet.getRange("A2:A" + dnRows).getValues();
var dstLastSale = dstSheet.getRange("Z2:Z" + dnRows).getValues();

for(var j=0;j<dnRows-1;j++)
{
dstLastSale[j][0]="n/a";
}
var flag = "true";
var foundStock;
for(var i=0;i<snRows-1;i++) //snRows
{
var sStockVal = srcStock[i][0];

//var foundStock = ArrayLib.indexOf(dstStock,0, sStockVal);

flag="false";
for(var j=0;j<dnRows-1;j++)
{
if(dstStock[j][0].toString().toUpperCase() == srcStock[i][0].toString().toUpperCase())
{
flag = "true";
foundStock = j;
break;
}
}
if(flag=="true")
{
dstLastSale[foundStock][0] = srcLastSale[i][0];
}
else
{
var dnRows1 = dstSheet.getLastRow()+1;
dstSheet.getRange("A" + dnRows1).setValue(srcStock[i][0]);
dstSheet.getRange(dnRows1,lCol+1,1,1).setValue(srcLastSale[i][0]);
for(var k=2;k<=lCol;k++)
{
if(dstSheet.getRange(dnRows1, k).getValue()=="")
{
dstSheet.getRange(dnRows1, k).setValue("n/a");
}
}
}
}
dstSheet.getRange(1,lCol+1).setValue(curDat);
dstSheet.getRange(2, lCol+1, dstLastSale.length, 1).setValues(dstLastSale);
}

 
5) Set it to run each day at 12:00. The code will save the new last sale price for monday to friday with one days lag.

Now we can move on to Maple.


In Maple run the following code to load the data:

 

X := proc (Url) local theDLL, URLDownloadToFile, myDirectory, myFile, Destination, DL;

 

theDLL := "C:\\WINDOWS\\SYSTEM32\\urlmon.dll";

 

URLDownloadToFile := define_external('URLDownloadToFileA', pCaller::(integer[4]), szURL::string, szFileName::string, dwReserved::(integer[4]), lpfnCB::(integer[4]), 'RETURN'::(integer[4]), LIB = theDLL);

 

if FileTools[Exists]("C:\\mydir") = true then FileTools:-RemoveDirectory("C:\\mydir", recurse = true, forceremove = true) else end if;

 

FileTools:-MakeDirectory("C:\\mydir");
myDirectory := "C:\\mydir";
myFile := "data1.csv";
Destination := cat(myDirectory, "\\", myFile);

 

DL := proc () local M;

 

URLDownloadToFile(0, Url, Destination, 0, 0);
M := ImportMatrix("C:\\mydir\\data1.csv", delimiter = ",", datatype = string);
M := Matrix(M, datatype = anything)

 

end proc;

 

return DL()

 

end proc:

 

data := X("https://docs.google.com/spreadsheets/d/1L5-yUB0EWeBdJNMdELKBRmBQ1JJ0QymrtDLkVhHCVn8/pub?gid=649021574&single=true&output=csv");
L := LinearAlgebra:-Transpose(data);

If you use your own spreadsheet you need to change the url to match that spreadsheet.
Select File -> Publish to the web in google spreadsheet

We can now run the portfolio optimization in Maple:

with(Statistics):
with(ListTools):
with(LinearAlgebra):
with(Optimization):
with(plots):

 

Nr, Nc := ArrayTools:-Size(L):
symb := L[1 .. 1, 2 .. Nc]:
LL := L[2 .. Nr, 2 .. Nc]:
Nr, Nc := ArrayTools:-Size(LL):

 

# Removing stocks with missing observations
for i to Nc do if Occurrences("n/a", convert(Column(LL, i), list)) >= 1 then AA[i] := i else AA[i] := 0 end if
end do;

 

DD := RemoveInRange([seq(AA[i], i = 1 .. Nc)], 0 .. 1):
symbb := DeleteColumn(symb, DD):
LLL := map(parse, DeleteColumn(LL, DD)):
Nr, Nc := ArrayTools:-Size(LLL):

 

# Calculate Return
for j to Nc do
for i from 2 to Nr do

 

r[i, j] := (LLL[i, j]-LLL[i-1, j])/LLL[i-1, j]

 

end do
end do;

 

RR := Matrix([seq([seq(r[i, j], j = 1 .. Nc)], i = 2 .. Nr)], datatype = float[8]);
n, nstock := ArrayTools:-Size(RR):

 

# Portfolio Optimization
W := Vector(nstock, symbol = w):
y := Vector(n, fill = 2, datatype = float[8]):
s1 := Optimization[LSSolve]([y, RR])[2];
Nr, Nc := ArrayTools:-Size(s1):

 

j := 0:
for i to Nr do if s1[i] <> 0 then j := j+1; ss1[j] := symbb[1, i] = s1[i] end if end do;

 

Vector(j, proc (i) options operator, arrow; ss1[i] end proc);
LineChart(s1);

 

 

 

First 43 44 45 46 47 48 49 Last Page 45 of 77