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
  • Hi there, fellow primers, it's good to be back after almost 5 years! I just want to share a worksheet on Numerov's algorithm in Maple using procedures as I've recently found out that google could not find any Maple procedure that implements Numerov's algorithm to solve ODEs.   numerov.mw   Reference.pdf 

    This is the first of three blog posts about working with data sets in Maple.

    In 2013, I wrote a library for Maple that used the HTTP package to access the Quandl data API and import data sets into Maple. I was motivated by the fact that, when I was downloading data, I often used multiple data sources, manually updated data when updates were available, and cleaned or manipulated the data into a standardized form (which left me spending too much time on the data acquisition step).

    Simply put, I needed a source for data that would provide me with a searchable, stable data API, which would also return data in a form that did not require too much post-processing.

    My initial library had really just scratched the surface of what was possible.

    Maple 2015 introduced the new DataSets package, which fully integrated a data set search into core library routines and made its functionality more discoverable through availability in Maple’s search bar.

    Accessing online data suddenly became much easier. From within Maple, I could now search through over 12 million time series data sets provided by Quandl, and then automatically import the data into a format that I could readily work with.

    If you’re not already aware of this online service, Quandl is an online data aggregator that delivers a wide variety of high quality financial and economic data. This includes the latest data on stocks and commodities, exchange rates, and macroeconomic indicators such as population, inflation, unemployment, and so on. Quandl collects both open and proprietary data sets from many sources, such as the US Federal Reserve System, OECD, Eurostat, The World Bank, and Open Data for Africa. Best of all, Quandl's powerful API is free to use.

    One of the first examples for the DataSets package that I constructed was in part based on the inspirational work of Hans Rosling. I was drawn in by his ability to use statistical visualizations to break down complex multidimensional data sets and provide insight into underlying patterns; a key example investigating the correlation between rising incomes and life expectancy.

    As well as online data, the DataSets package had a database for country data. Hence it seemed fitting to add an example that explored macroeconomic indicators for several countries. Accordingly, I set out to create an example that visualized variables such as Gross Domestic Product, Life Expectancy, and Population for a collection of countries.

    I’ll now describe how I constructed this application.

    The three key variables are Gross Domestic Product at Power Purchasing Parity, Life Expectancy, and Population. Having browsed through Quandl’s website for available data sets, the World Bank and Open Data for Africa projects seemingly had the most available relevant data; therefore I chose these as my data sources.

    Pulling data for a single country from one of these sources was pretty straight forward. For example, the DataSets Reference for the Open Data for Africa data set on GDP at PPP for Canada is:

    DataSets:-Reference("quandl", "ODA/CAN_PPPPC"));

    In this command, the second argument is the Quandl data set code. If you are on Quandl’s website, this is listed near the top of the data set page as well as in the last few characters of the web address itself: https://www.quandl.com/data/ODA/CAN_PPPPC . Deconstructing the code, “ODA” stands for Open Data for Africa and the rest of the string is constructed from the three letter country code for Canada, “CAN”, and the code for the GDP and PPP. Looking at a small sample of other data set codes, I theorized that both of the data sources used a standardized data set name that included the ISO-3166 3-letter country code for available data sets. Based on this theory, I created a simple script to query for available data and discovered that there was data available for many countries using this standardized code. However, not every country had available data, so I needed to filter my list somewhat in order to pick only those countries for which information was available.

    The script that I had constructed required three letter country codes. In order to test all available countries, I created a table to house the country names and three-letter country codes using data from the built-in database for countries:

    ccdata := DataSets:-Builtin:-Reference("country")[.., "3 Letter Country Code"];
    cctable := table([seq(op(GetElementNames(ccdata[i])) = ccdata[i, "3 Letter Country Code"], 
    i = 1 .. CountRows(ccdata))]):

    My script filtered this table, returning a subset of the original table, something like:

    Countries := table( [“Canada” = “CAN”, “Sweden” = “SWE”, … ] );

    You can see the filtered country list in the code edit region of the application below.

    With this shorter list of countries, I was now ready to download some data. I created three vectors to hold the data sets by mapping in the DataSets Reference onto the “standardized” data set names that I pulled from Quandl. Here’s the first vector for the data on GDP at PPP.

    V1 := Vector( [ (x) -> Reference("quandl", cat("ODA/", x, "_PPPPC"))
                       ~([entries(Countries, nolist, indexorder)])]):
    #Open Data for Africa GDP at PPP

    Having created three data vectors consisting of 180 x 3 = 540 data sets, I was finally ready to visualize the large set of data that I had amassed.

    In Maple’s Statistics package, BubblePlots can use the horizontal axis, vertical axis and the relative bubble size to illustrate multidimensional information. Moreover, if incoming data is stored as a TimeSeries object, BubblePlots can generate animations over a common period of time.

    Putting all of this together generated the following animation for 180 available countries.

    This example will be included with the next version of Maple, but for now, you can download a copy here:DataSetsBubblePlot.mw

    *Note: if you try this application at home, it will download 540 data sets. This operation plus the additional BubblePlot construction can take some time, so if you just want to see the finished product, you can simply interact with the animation in the Maple worksheet using the animation toolbar.

    A more advanced example that uses multiple threads for data download can be seen at the bottom of the following page: https://www.maplesoft.com/products/maple/new_features/maple19/datasets_maple2015.pdf You can also interact with this example in Maple by searching for: ?updates,Maple2015,DataSets

    In my next post, I’ll discuss how I used programmatic content generation to construct an interactive application for data retrieval.

     

    Bug_in_integrate.mw

    M_Iwaniuk

    Below is the worksheet with the whole material presented yesterday in the webinar, “Applying the power of computer algebra to theoretical physics”, broadcasted by the “Institute of Physics” (IOP, England). The material was very well received, rated 4.5 out of 5 (around 30 voters among the more than 300 attendants), and generated a lot of feedback. The webinar was recorded so that it is possible to watch it (for free, of course, click the link above, it will ask you for registration, though, that’s how IOP works).

    Anyway, you can reproduce the presentation with the worksheet below (mw file linked at the end, or the corresponding pdf also linked with all the input lines executed). As usual, to reproduce the input/output you need to have installed the latest version of Physics, available in the Maplesoft R&D Physics webpage.

    Why computer algebra?

     

     

     

    ... and why computer algebra?


    We can concentrate more on the ideas instead of on the algebraic manipulations

     

    We can extend results with ease

     

    We can explore the mathematics surrounding a problem

     

    We can share results in a reproducible way

     

    Representation issues that were preventing the use of computer algebra in Physics

     

     


    Notation and related mathematical methods that were missing:


    coordinate free representations for vectors and vectorial differential operators,

    covariant tensors distinguished from contravariant tensors,

    functional differentiation, relativity differential operators and sum rule for tensor contracted (repeated) indices

    Bras, Kets, projectors and all related to Dirac's notation in Quantum Mechanics

     

    Inert representations of operations, mathematical functions, and related typesetting were missing:

     

    inert versus active representations for mathematical operations

    ability to move from inert to active representations of computations and viceversa as necessary

    hand-like style for entering computations and textbook-like notation for displaying results

     

    Key elements of the computational domain of theoretical physics were missing:

     

    ability to handle products and derivatives involving commutative, anticommutative and noncommutative variables and functions

    ability to perform computations taking into account custom-defined algebra rules of different kinds

    (commutator, anticommutator and bracket rules, etc.)

     

     

    Examples

     

    The Maple computer algebra environment

       

    Classical Mechanics

     

    Inertia tensor for a triatomic molecule

       

    Classical Field Theory

     

    *The field equations for the lambda*Phi^4 model

       

    *Maxwell equations departing from the 4-dimensional Action for Electrodynamics

       

    *The Gross-Pitaevskii field equations for a quantum system of identical particles

       

    Quantum mechanics

     

    *The quantum operator components of  `#mover(mi("L",mathcolor = "olive"),mo("→",fontstyle = "italic"))` satisfy "[L[j],L[k]][-]=i `ε`[j,k,m] L[m]"

       

    Quantization of the energy of a particle in a magnetic field

       

    Unitary Operators in Quantum Mechanics

     

    *Eigenvalues of an unitary operator and exponential of Hermitian operators

       

    Properties of unitary operators

     

     

    Consider two set of kets " | a[n] >" and "| b[n] >", each of them constituting a complete orthonormal basis of the same space.


    One can always build an unitary operator U that maps one basis to the other, i.e.: "| b[n] >=U | a[n] >"

    *Verify that "U=(&sum;) | b[k] >< a[k] |" implies on  "| b[n] >=U | a[n] >"

       

    *Show that "U=(&sum;) | b[k] > < a[k] | "is unitary

       

    *Show that the matrix elements of U in the "| a[n] >" and  "| b[n] >" basis are equal

       

    Show that A and `&Ascr;` = U*A*`#msup(mi("U"),mo("&dagger;"))`have the same spectrum

       

    ````

    Schrödinger equation and unitary transform

     

     

    Consider a ket "| psi[t] > " that solves the time-dependant Schrödinger equation:

     

    "i `&hbar;` (&PartialD;)/(&PartialD;t) | psi[t] >=H(t) | psi[t] >"

    and consider

    "| phi[t] > =U(t) | psi[t] >",

     

    where U(t) is a unitary operator.

     

    Does "| phi[t] >" evolves according a Schrödinger equation

     "i*`&hbar;` (&PartialD;)/(&PartialD;t) | phi[t] >=`&Hscr;`(t) | phi[t] >"

    and if yes, which is the expression of `&Hscr;`(t)?

     

    Solution

       

    Translation operators using Dirac notation

     

    In this section, we focus on the operator T[a] = exp((-I*a*P)*(1/`&hbar;`))

    Settings

       

    The Action (translation) of the operator T[a]"=(e)^(-i (a P)/(`&hbar;`))" on a ket

       

    Action of T[a] on an operatorV(X)

       

    General Relativity

     

    *Exact Solutions to Einstein's Equations  Lambda*g[mu, nu]+G[mu, nu] = 8*Pi*T[mu, nu]

       

    *"Physical Review D" 87, 044053 (2013)

     

    Given the spacetime metric,

    g[mu, nu] = (Matrix(4, 4, {(1, 1) = -exp(lambda(r)), (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) = exp(nu(r))}))

    a) Compute the Ricci and Weyl scalars

     

    b) Compute the trace of

     

    "Z[alpha]^(beta)=Phi R[alpha]^(beta)+`&Dscr;`[alpha]`&Dscr;`[]^(beta) Phi+T[alpha]^(beta)"

     

    where `&equiv;`(Phi, Phi(r)) is some function of the radial coordinate, R[alpha, `~beta`] is the Ricci tensor, `&Dscr;`[alpha] is the covariant derivative operator and T[alpha, `~beta`] is the stress-energy tensor

     

    T[alpha, beta] = (Matrix(4, 4, {(1, 1) = 8*exp(lambda(r))*Pi, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 8*r^2*Pi, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = 8*r^2*sin(theta)^2*Pi, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = 8*exp(nu(r))*Pi*epsilon}))

    c) Compute the components of "W[alpha]^(beta)"" &equiv;"the traceless part of  "Z[alpha]^(beta)" of item b)

     

    d) Compute an exact solution to the nonlinear system of differential equations conformed by the components of  "W[alpha]^(beta)" obtained in c)

     

    Background: paper from February/2013, "Withholding Potentials, Absence of Ghosts and Relationship between Minimal Dilatonic Gravity and f(R) Theories", by P. Fiziev.

     

    a) The Ricci and Weyl scalars

       

    b) The trace of "  Z[alpha]^(beta)=Phi R[alpha]^(beta)+`&Dscr;`[alpha]`&Dscr;`[]^(beta) Phi+T[alpha]^(beta)"

       

    b) The components of "W[alpha]^(beta)"" &equiv;"the traceless part of " Z[alpha]^(beta)"

       

    c) An exact solution for the nonlinear system of differential equations conformed by the components of  "W[alpha]^(beta)"

       

    *The Equivalence problem between two metrics

     

     

    From the "What is new in Physics in Maple 2016" page:

      

    In the Maple PDEtools package, you have the mathematical tools - including a complete symmetry approach - to work with the underlying [Einstein’s] partial differential equations. [By combining that functionality with the one in the Physics and Physics:-Tetrads package] you can also formulate and, depending on the metrics also resolve, the equivalence problem; that is: to answer whether or not, given two metrics, they can be obtained from each other by a transformation of coordinates, as well as compute the transformation.

    Example from: A. Karlhede, "A Review of the Geometrical Equivalence of Metrics in General Relativity", General Relativity and Gravitation, Vol. 12, No. 9, 1980

       

    *Equivalence for Schwarzschild metric (spherical and Krustal coordinates)

       

    Tetrads and Weyl scalars in canonical form

     

     

    Generally speaking a canonical form is obtained using transformations that leave invariant the tetrad metric in a tetrad system of references, so that theWeyl scalars are fixed as much as possible (conventionally, either equal to 0 or to 1).

     

    Bringing a tetrad in canonical form is a relevant step in the tackling of the equivalence problem between two spacetime metrics.

    The implementation is as in "General Relativity, an Einstein century survey", edited by S.W. Hawking (Cambridge) and W. Israel (U. Alberta, Canada), specifically Chapter 7 written by S. Chandrasekhar, page 388:

     

     

    `&Psi;__0`

    `&Psi;__1`

    `&Psi;__2`

    `&Psi;__3`

    `&Psi;__4`

    Residual invariance

    Petrov type I

    0

    "<>0"

    "<>0"

    1

    0

    none

    Petrov type II

    0

    0

    "<>0"

    1

    0

    none

    Petrov type III

    0

    0

    0

    1

    0

    none

    Petrov type D

    0

    0

    "<>0"

    0

    0

    `&Psi;__2`  remains invariant under rotations of Class III

    Petrov type N

    0

    0

    0

    0

    1

    `&Psi;__4` remains invariant under rotations of Class II

     

     

    The transformations (rotations of the tetrad system of references) used are of Class I, II and III as defined in Chandrasekar's chapter - equations (7.79) in page 384, (7.83) and (7.84) in page 385. Transformations of Class I can be performed with the command Physics:-Tetrads:-TransformTetrad using the optional argument nullrotationwithfixedl_, of Class II using nullrotationwithfixedn_ and of Class III by calling TransformTetrad(spatialrotationsm_mb_plan, boostsn_l_plane), so with the two optional arguments simultaneously.

     

    The determination of appropriate transformation parameters to be used in these rotations, as well as the sequence of transformations happens all automatically by using the optional argument, canonicalform of TransformTetrad .

     

    restart; with(Physics); 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, PetrovType, SimplifyTetrad, TransformTetrad, e_, eta_, gamma_, l_, lambda_, m_, mb_, n_]

    (7.4.1)

    Petrov type I

       

    Petrov type II

       

    Petrov type III

       

    Petrov type N

       

    Petrov type D

       

     

     

    Physics_2016_IOP_webinar.mw     Physics_2016_IOP_webinar.pdf


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

    Maple 2016.1a now available, fixes issues reported here http://www.mapleprimes.com/questions/211561-Why-Does-Maple-20161-Improperly-Treat-X2

    Thank you Maplesoft for your quick response to this issue.

    Rotational motion mechanism with quasi stops      
    02rep.pdf
    DIMA.mw

    Hello All,

    (I also sent this fact to Maplesoft Support).

    Since I updayed to 2016.1 the F1 key does bring a menu witch send to..F5 only.

    No way to have a "full" Help Menu.(See the attached file)

    I guess a silly bug jumped in :)

    Kind regards,

     

    Jean-Michel

     

    When Maple 2016 hit the road, I finally relegated my printed Mollier charts and steam tables to a filing cabinet, and moved my carefully-curated spreadsheets of refrigerant properties to a distant part of my hard drive. The new thermophysical data engine rendered those obsolete.

    Other than making my desk tidier, what I find exciting is that I can compute with fluid properties in a tool that has numerical integrators, ODE solvers, optimizers, programmatic visualisation and more.

    Here are several small examples that demonstrate how you can use fluid properties with Maple’s math and visualization tools (this worksheet contains the complete examples).

    Work Done in Compressing a Gas

    The work done (per unit mass) in compressing a fluid at constant temperature is

    where V1 and V2 are specific volumes and p is pressure.

    You need a relationship between pressure and specific volume (either theoretical or experimental) to calculate the work done.

    Assuming the ideal gas law, the work done becomes

    where R is the ideal gas constant, T is the temperature (in K) and M is the molecular mass (in kg mol-1), and V is the volume.

     Ideal gas constant

    Molecular mass of propane

    Hence the work done predicted by the Ideal Gas Law is

    Let’s now use real fluid properties instead and numerical integrators to compute the work done.

    Here, the work done predicted with the Ideal Gas Law and real fluid properties is similar. This isn’t, however, always the case for all gases (try experimenting with ammonia – its strong intermolecular forces result in non-ideal behavior).

    Minimum Specific Heat Capacity of Water

    The specific heat capacity of water varies with temperature like so.

    Let's find the temperature at which the specific heat capacity of water is the lowest.

    The lowest specific heat capacity occurs at 309.4 K; this is the temperature at which water requires the least energy to raise or lower its temperature.

    Incidentally, this isn’t that far from the standard human body temperature of 310.1 K (given that the human body is largely water, one might hazard a guess why we have evolved to maintain this temperature).

    Temperature-Entropy Plot for Water

    Maple 2016 generates pressure-enthalpy-temperature charts and psychrometric charts out of the box. However, you can create your own customized thermodynamic visualizations.

    This, for example, is a temperature-entropy chart for water, together with the two-phase vapor dome (the worksheet contains the code to generate this plot).

    I'm also working on a lumped-parameter heat exchanger model with fluid properties (and hence heat transfer coefficients) that change with temperature. That'll be more complex than these simple examples, and will use Maple's numeric ODE solver.

    Formulating and solving the equivalence problem for Schwarzschild metric in a simple case

     

    In connection with the digitizing in Maple 2016 of the database of solutions to Einstein's equations of the book Exact Solutions to Einstein Field Equations. I was recently asked about a statement found in the "What is new in Physics in Maple 2016" page:

      

    In the Maple PDEtools package, you have the mathematical tools - including a complete symmetry approach - to work with the underlying [Einstein’s] partial differential equations. [By combining that functionality with the one in the Physics and Physics:-Tetrads package] you can also formulate and, depending on the metrics also resolve, the equivalence problem; that is: to answer whether or not, given two metrics, they can be obtained from each other by a transformation of coordinates, as well as compute the transformation.

    This question posed is a reasonable one: "could you please provide one example?" This post provides that example.

     

    First of all the existing science behind: in my opinion, the main reference regarding the equivalence problem is at the paper "A Review of the Geometrical Equivalence of Metrics in General Relativity", General Relativity and Gravitation, Vol. 12, No. 9, 1980, by A. Karlhede (University of Stockholm). This approach got refined later by others and, generally speaking, it is currently know as the Cartan-Karlhede method, summarized in chapter 9.2 of the book Exact Solutions to Einstein Field Equations. whose solutions were all digitized within the Physics and DifferentialGeometry packages for Maple 2016. This method of Chapter 9.2 (see also Tetrads and Weyl scalars in canonical form, Mapleprimes post), however, is not the only approach to the problem, and sometimes simpler methods can handle the problem faster, or just in simpler forms.

     

    The example worked out below is actually the example from Karlhede's paper just mentioned, on pages 704 - 706: "Show that the Schwarzschild metric and its form written in terms of isotropic spherical coordinates are equivalent, and derive the transformation that relates them". Because this problem happens to be simple for nowadays computer algebra, below I also tackle it modified, slightly more difficult variants of it. The approach shown works for more complicated cases as well.

     

    Below we tackle Karlhede's paper-problem using: one PDEtools command, the Physics:-TransformCoordinates, the Physics:-Weyl command to compute the Weyl scalars and the Physics:-Tetrads:-PetrovType to see the Petrov type of the metrics involved. The transformation resolving the equivalence is explicitly derived.

     

    Start loading the Physics and Tetrads package. To reproduce the computations below, as usual, update your Physics library with the one available for download at the Maplesoft R&D Physics webpage

    with(Physics); with(Tetrads); Setup(auto = true, tetradmetric = null, signature = `+---`)

    `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

     

    `* Partial match of  'auto' against keyword 'automaticsimplification'`

     

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

    (1)

    To formulate the problem, set first some symbols to represent the changed metric, changed mass and changed coordinates - no mathematics at this point

    gt, mt, tt, rt, thetat, phit := `&gfr;`, `&mfr;`, `&tfr;`, `&rfr;`, `&vartheta;`, `&varphi;`

    `&gfr;`, `&mfr;`, `&tfr;`, `&rfr;`, vartheta, varphi

    (2)

    Set now a new coordinates system, call it Y, involving the new coordinates (in the paper they are represented with a tilde on top of the letters)

    Coordinates(Y = [tt, rt, thetat, phit])

    `Default differentiation variables for d_, D_ and dAlembertian are: `*{Y = (`&tfr;`, `&rfr;`, `&vartheta;`, `&varphi;`)}

     

    `Systems of spacetime Coordinates are: `*{Y = (`&tfr;`, `&rfr;`, `&vartheta;`, `&varphi;`)}

     

    {Y}

    (3)

    According to eq.(7.6) of the paper, the line element of Schwarzschild solution in isotropic spherical coordinates is given by

    `#msup(mi("ds"),mn("2"))` := ((1-mt/(2*rt))/(1+mt/(2*rt)))^2*d_(tt)^2-(1+mt/(2*rt))^4*(d_(rt)^2+rt^2*d_(thetat)^2+rt^2*sin(thetat)^2*d_(phit)^2)

    (-2*`&rfr;`+`&mfr;`)^2*Physics:-d_(`&tfr;`)^2/(2*`&rfr;`+`&mfr;`)^2-(1/16)*(2*`&rfr;`+`&mfr;`)^4*(Physics:-d_(`&rfr;`)^2+`&rfr;`^2*Physics:-d_(vartheta)^2+`&rfr;`^2*sin(vartheta)^2*Physics:-d_(varphi)^2)/`&rfr;`^4

    (4)

    Set this to be the metric

    Setup(metric = `#msup(mi("ds"),mn("2"))`)

    Check it out

    g_[]

    Physics:-g_[mu, nu] = Matrix(%id = 18446744078306516254)

    (5)

    In connection with the transformation used further below, compute now the Petrov type and the Weyl scalars for this metric, just to have an idea of what is behind this metric.

    PetrovType()

    "D"

    (6)

    Weyl[scalars]

    psi__0 = 0, psi__1 = 0, psi__2 = -64*`&rfr;`^3*`&mfr;`/(2*`&rfr;`+`&mfr;`)^6, psi__3 = 0, psi__4 = 0

    (7)

    We see that the Weyl scalars are already in canonical form (see post in Mapleprimes about canonical forms): only `&Psi;__2` <> 0 and the important thing: it depends on only one coordinate, `&rfr;` .

     

    Now: we want to see if this metric (5) is equivalent to Schwarzschild metric in standard spherical coordinates

    g_[sc]

    `Systems of spacetime Coordinates are: `*{X = (t, r, theta, phi), Y = (`&tfr;`, `&rfr;`, `&vartheta;`, `&varphi;`)}

     

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

     

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

     

    `Parameters: `[m]

     

    Physics:-g_[mu, nu] = Matrix(%id = 18446744078795590102)

    (8)

    The equivalence we want to resolve is regarding an arbitrary relationship `&mfr;`(m)between the masses used in (5) and (8) and a generic change of variables from X to Y

    TR := {phi = Phi(Y), r = R(Y), t = Tau(Y), theta = Theta(Y)}

    {phi = Phi(Y), r = R(Y), t = Tau(Y), theta = Theta(Y)}

    (9)

    Using a differential equation mindset, the formulation of the equivalence between (8) and (5) under the transformation (9) is actually simple: change variables in (8), using (9) and the Physics:-TransformCoordinates command (this is the command that changes variables in tensorial expressions), then equate the result to (5), then try to solve the problem for the unknowns `&mfr;`(m), Phi(Y), R(Y), Theta(Y) and Tau(Y).

     

    We note at this point, however, that the Weyl scalars for Schwarzschild metric in this standard form (8) are also in canonical form of Petrov type D and also depend on only one variable, r 

    PetrovType()

    "D"

    (10)

    Weyl[scalars]

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

    (11)

    The fact that the Weyl scalars in both cases ((7) and (11)) are in canonical form (only `&Psi;__2` <> 0 ) and in both cases this scalar depends on only one coordinate is already an indicator that the transformation involved changes only one variable in terms of the other one. So one could just search for a transformation of the form r = R(`&rfr;`) and resolve the problem instantly. Still, to make the problem slightly more general, consider instead a generic transformation for r in terms of all of Y = (`&tfr;`, `&rfr;`, `&vartheta;`, `&varphi;`)

    tr := r = R(Y)

    r = R(Y)

    (12)

    PDEtools:-declare(r = R(Y))

    R(`&tfr;`, `&rfr;`, vartheta, varphi)*`will now be displayed as`*R

    (13)

    Transform the  coordinates in the metric (because of having used PDEtools:-declare, derivatives of the unknowns R are displayed indexed, for compact notation)

    TransformCoordinates(tr, g_[mu, nu])

    Matrix(%id = 18446744078873927542)

    (14)

    Proceed equating (14) to (5) to obtain a set of equations that entirely formulates the problem

    "convert(rhs(?)=? ,setofequations)"

    {0 = (diff(R(Y), `&rfr;`))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), vartheta))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), (-2*`&rfr;`+`&mfr;`)^2/(2*`&rfr;`+`&mfr;`)^2 = ((diff(R(Y), `&tfr;`))^2*R(Y)^2-4*(-(1/2)*R(Y)+m)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+`&mfr;`)^4/`&rfr;`^4 = (diff(R(Y), `&rfr;`))^2*R(Y)/(-R(Y)+2*m), -(1/16)*(2*`&rfr;`+`&mfr;`)^4/`&rfr;`^2 = -(diff(R(Y), vartheta))^2*R(Y)/(R(Y)-2*m)-R(Y)^2, -(1/16)*(2*`&rfr;`+`&mfr;`)^4*sin(vartheta)^2/`&rfr;`^2 = 2*((1/2)*(diff(R(Y), varphi))^2+(cos(vartheta)-1)*R(Y)*(cos(vartheta)+1)*(-(1/2)*R(Y)+m))*R(Y)/(-R(Y)+2*m)}

    (15)

    This problem, shown in Karlhede's paper as the example of the approach he summarized, is solvable using the differential equation commands of PDEtools (in this case casesplit) in one go and no time, obtaining the same solution shown in the paper with equation number (7.10), the problem actually admits two solutions

    PDEtools:-casesplit({0 = (diff(R(Y), `&rfr;`))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), vartheta))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), (-2*`&rfr;`+`&mfr;`)^2/(2*`&rfr;`+`&mfr;`)^2 = ((diff(R(Y), `&tfr;`))^2*R(Y)^2-4*(-(1/2)*R(Y)+m)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+`&mfr;`)^4/`&rfr;`^4 = (diff(R(Y), `&rfr;`))^2*R(Y)/(-R(Y)+2*m), -(1/16)*(2*`&rfr;`+`&mfr;`)^4/`&rfr;`^2 = -(diff(R(Y), vartheta))^2*R(Y)/(R(Y)-2*m)-R(Y)^2, -(1/16)*(2*`&rfr;`+`&mfr;`)^4*sin(vartheta)^2/`&rfr;`^2 = 2*((1/2)*(diff(R(Y), varphi))^2+(cos(vartheta)-1)*R(Y)*(cos(vartheta)+1)*(-(1/2)*R(Y)+m))*R(Y)/(-R(Y)+2*m)}, [R, mt])

    `casesplit/ans`([R(Y) = -(1/4)*(m-2*`&rfr;`)^2/`&rfr;`, `&mfr;` = -m], []), `casesplit/ans`([R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, `&mfr;` = m], [])

    (16)

    By all means this does not mean this differential equation approach is better than the general approach mentioned in the paper (also in section 9.2 of the Exact Solutions book). This presentation above only makes the point of the paragraph mentioned at the beginning of this worksheet "... [in Maple 2016] you can also formulate and, depending on the the metrics also resolve, the equivalence problem; that is: to answer whether or not, given two metrics, they can be obtained from each other by a transformation of coordinates, as well as compute the transformation." 

     

    In any case this problem above is rather easy for the computer. Consider a slightly more difficult problem, where `&mfr;` <> m. For example:

    "subs(mt = 1/(mt^(2)),?)"

    Physics:-g_[mu, nu] = Matrix(%id = 18446744078854733566)

    (17)

    Tackle now the same problem

    "convert(rhs(?)=? ,setofequations)"

    {0 = (diff(R(Y), `&rfr;`))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), vartheta))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), (-2*`&rfr;`+1/`&mfr;`^2)^2/(2*`&rfr;`+1/`&mfr;`^2)^2 = ((diff(R(Y), `&tfr;`))^2*R(Y)^2-4*(-(1/2)*R(Y)+m)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^4 = (diff(R(Y), `&rfr;`))^2*R(Y)/(-R(Y)+2*m), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^2 = -(diff(R(Y), vartheta))^2*R(Y)/(R(Y)-2*m)-R(Y)^2, -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4*sin(vartheta)^2/`&rfr;`^2 = 2*((1/2)*(diff(R(Y), varphi))^2+(cos(vartheta)-1)*R(Y)*(cos(vartheta)+1)*(-(1/2)*R(Y)+m))*R(Y)/(-R(Y)+2*m)}

    (18)

    The solutions to the equivalence between (17) and (5) are then given by

    PDEtools:-casesplit({0 = (diff(R(Y), `&rfr;`))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), varphi))*(diff(R(Y), vartheta))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&rfr;`))*R(Y)/(-R(Y)+2*m), 0 = (diff(R(Y), vartheta))*(diff(R(Y), `&tfr;`))*R(Y)/(-R(Y)+2*m), (-2*`&rfr;`+1/`&mfr;`^2)^2/(2*`&rfr;`+1/`&mfr;`^2)^2 = ((diff(R(Y), `&tfr;`))^2*R(Y)^2-4*(-(1/2)*R(Y)+m)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^4 = (diff(R(Y), `&rfr;`))^2*R(Y)/(-R(Y)+2*m), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^2 = -(diff(R(Y), vartheta))^2*R(Y)/(R(Y)-2*m)-R(Y)^2, -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4*sin(vartheta)^2/`&rfr;`^2 = 2*((1/2)*(diff(R(Y), varphi))^2+(cos(vartheta)-1)*R(Y)*(cos(vartheta)+1)*(-(1/2)*R(Y)+m))*R(Y)/(-R(Y)+2*m)}, [R, mt])

    `casesplit/ans`([R(Y) = -(1/4)*(m-2*`&rfr;`)^2/`&rfr;`, `&mfr;`^2 = -1/m], [`&mfr;` <> 0]), `casesplit/ans`([R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, `&mfr;`^2 = 1/m], [`&mfr;` <> 0])

    (19)

    Moreover, despite that the Weyl scalars suggest that a transformation of only one variable is sufficient to solve the problem, one could also consider a more general transformation, of more variables. Provided we exclude theta (because there is cos(theta) around and that would take us to solve differential equations for Theta(theta), that involve things like cos(Theta(theta))), and also to speed up matters let's remove the change in phi, consider an arbitrary change in r and t

    TR := select(has, {phi = Phi(Y), r = R(Y), t = Tau(Y), theta = Theta(Y)}, {r, t})

    {r = R(Y), t = Tau(Y)}

    (20)

    PDEtools:-declare({r = R(Y), t = Tau(Y)})

    R(`&tfr;`, `&rfr;`, vartheta, varphi)*`will now be displayed as`*R

     

    Tau(`&tfr;`, `&rfr;`, vartheta, varphi)*`will now be displayed as`*Tau

    (21)

    So our transformation now involve two arbitrary variables, each one depending on all the four coordinates, and a more complicated function `&mfr;`(m). Change variables (because of having used PDEtools:-declare, derivatives of the unknowns R and Tau are displayed indexed, for compact notation)

    TransformCoordinates(TR, g_[mu, nu])

    Matrix(%id = 18446744078309268046)

    (22)

    Construct the set of Partial Differential Equations to be tackled

    "convert(rhs(?)=?,setofequations)"

    {0 = (-4*(diff(Tau(Y), `&rfr;`))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))+(diff(R(Y), `&rfr;`))*(diff(R(Y), `&tfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), varphi))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&rfr;`))+(diff(R(Y), varphi))*(diff(R(Y), `&rfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), varphi))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))+(diff(R(Y), varphi))*(diff(R(Y), `&tfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), varphi))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), vartheta))+(diff(R(Y), varphi))*(diff(R(Y), vartheta))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), vartheta))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&rfr;`))+(diff(R(Y), vartheta))*(diff(R(Y), `&rfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), vartheta))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))+(diff(R(Y), vartheta))*(diff(R(Y), `&tfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), (-2*`&rfr;`+1/`&mfr;`^2)^2/(2*`&rfr;`+1/`&mfr;`^2)^2 = (-4*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))^2+(diff(R(Y), `&tfr;`))^2*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^4 = (-4*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&rfr;`))^2+(diff(R(Y), `&rfr;`))^2*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^2 = (diff(Tau(Y), vartheta))^2*(R(Y)-2*m)/R(Y)-(diff(R(Y), vartheta))^2*R(Y)/(R(Y)-2*m)-R(Y)^2, -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4*sin(vartheta)^2/`&rfr;`^2 = (-4*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), varphi))^2+2*((1/2)*(diff(R(Y), varphi))^2+(cos(vartheta)-1)*R(Y)*(cos(vartheta)+1)*(-(1/2)*R(Y)+m))*R(Y)^2)/(R(Y)*(-R(Y)+2*m))}

    (23)

    Solve the problem running a differential elimination (actually without solving any differential equations): there are more than two solutions

    sol := PDEtools:-casesplit({0 = (-4*(diff(Tau(Y), `&rfr;`))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))+(diff(R(Y), `&rfr;`))*(diff(R(Y), `&tfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), varphi))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&rfr;`))+(diff(R(Y), varphi))*(diff(R(Y), `&rfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), varphi))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))+(diff(R(Y), varphi))*(diff(R(Y), `&tfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), varphi))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), vartheta))+(diff(R(Y), varphi))*(diff(R(Y), vartheta))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), vartheta))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&rfr;`))+(diff(R(Y), vartheta))*(diff(R(Y), `&rfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), 0 = (-4*(diff(Tau(Y), vartheta))*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))+(diff(R(Y), vartheta))*(diff(R(Y), `&tfr;`))*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), (-2*`&rfr;`+1/`&mfr;`^2)^2/(2*`&rfr;`+1/`&mfr;`^2)^2 = (-4*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&tfr;`))^2+(diff(R(Y), `&tfr;`))^2*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^4 = (-4*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), `&rfr;`))^2+(diff(R(Y), `&rfr;`))^2*R(Y)^2)/(R(Y)*(-R(Y)+2*m)), -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4/`&rfr;`^2 = (diff(Tau(Y), vartheta))^2*(R(Y)-2*m)/R(Y)-(diff(R(Y), vartheta))^2*R(Y)/(R(Y)-2*m)-R(Y)^2, -(1/16)*(2*`&rfr;`+1/`&mfr;`^2)^4*sin(vartheta)^2/`&rfr;`^2 = (-4*(-(1/2)*R(Y)+m)^2*(diff(Tau(Y), varphi))^2+2*((1/2)*(diff(R(Y), varphi))^2+(cos(vartheta)-1)*R(Y)*(cos(vartheta)+1)*(-(1/2)*R(Y)+m))*R(Y)^2)/(R(Y)*(-R(Y)+2*m))}, [R, mt])

    `casesplit/ans`([R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, `&mfr;`^2 = 1/m, diff(Tau(Y), `&tfr;`) = -1, diff(Tau(Y), `&rfr;`) = 0, diff(Tau(Y), vartheta) = 0, diff(Tau(Y), varphi) = 0], [`&mfr;` <> 0]), `casesplit/ans`([R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, `&mfr;`^2 = 1/m, diff(Tau(Y), `&tfr;`) = 1, diff(Tau(Y), `&rfr;`) = 0, diff(Tau(Y), vartheta) = 0, diff(Tau(Y), varphi) = 0], [`&mfr;` <> 0]), `casesplit/ans`([R(Y) = -(1/4)*(m-2*`&rfr;`)^2/`&rfr;`, `&mfr;`^2 = -1/m, diff(Tau(Y), `&tfr;`) = -1, diff(Tau(Y), `&rfr;`) = 0, diff(Tau(Y), vartheta) = 0, diff(Tau(Y), varphi) = 0], [`&mfr;` <> 0]), `casesplit/ans`([R(Y) = -(1/4)*(m-2*`&rfr;`)^2/`&rfr;`, `&mfr;`^2 = -1/m, diff(Tau(Y), `&tfr;`) = 1, diff(Tau(Y), `&rfr;`) = 0, diff(Tau(Y), vartheta) = 0, diff(Tau(Y), varphi) = 0], [`&mfr;` <> 0])

    (24)

    Consider for instance the first one

    sol[1]

    `casesplit/ans`([R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, `&mfr;`^2 = 1/m, diff(Tau(Y), `&tfr;`) = -1, diff(Tau(Y), `&rfr;`) = 0, diff(Tau(Y), vartheta) = 0, diff(Tau(Y), varphi) = 0], [`&mfr;` <> 0])

    (25)

    Compute the actual solution behind this case :

    pdsolve(`casesplit/ans`([R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, `&mfr;`^2 = 1/m, diff(Tau(Y), `&tfr;`) = -1, diff(Tau(Y), `&rfr;`) = 0, diff(Tau(Y), vartheta) = 0, diff(Tau(Y), varphi) = 0], [`&mfr;` <> 0]), {R, Tau, mt})

    {`&mfr;` = -1/m^(1/2), R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, Tau(Y) = -`&tfr;`+_C1}, {`&mfr;` = 1/m^(1/2), R(Y) = (1/4)*(2*`&rfr;`+m)^2/`&rfr;`, Tau(Y) = -`&tfr;`+_C1}

    (26)

    The fact that the time t appears defined in terms of the transformed time Tau(Y) = -`&tfr;`+_C1 involving an arbitrary constant is expected: the time does not enter the metric, it only enters through derivatives of Tau(Y) entering the Jacobian of the transformation used to change variables in tensorial expressions (the metric) in (22).

     

    Summary: the approach shown above, based on formulating the problem for the transformation functions of the equivalence and solving for them the differential equations using the commands in PDEtools, after restricting the generality of the transformation functions by looking at the form of the Weyl scalars, works well for other cases too, specially now that, in Maple 2016, the Weyl scalars can be expressed also in canonical form in one go (see previous Mapleprimes post on "Tetrads and Weyl scalars in canonical form").  Also important: in Maple 2016 it is present the functionality necessary to implement the approach of section 9.2 of the Exact solutions book as well.

      

     

     

    Download Equivalence_-_Schwarzschild.mw

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

    Tetrads and Weyl scalars in canonical form

     

    The material below is about a new development that didn't arrive in time for the launch of Maple 2016 (March) and that complements in a relevant way the ones introduced in Physics in Maple 2016. It is at topic in general relativity, the computation of a canonical form of a tetrad, so that, generally speaking (skipping a technical description) the Weyl scalars are fixed as much as possible (either equal to 0 or to 1) regarding transformations that leave invariant the tetrad metric in a tetrad system of references. Bringing a tetrad in canonical form is a relevant step in the tackling of the equivalence problem between two spacetime metrics (Mapleprimes post), and it is relevant in connection with the digitizing in Maple 2016 of the database of solutions to Einstein's equations of the book Exact Solutions to Einstein Field Equations.

    The reference for this development is the book "General Relativity, an Einstein century survey", edited by S.W. Hawking (Cambridge) and W. Israel (U. Alberta, Canada), specifically Chapter 7 written by S. Chandrasekhar, and more specifically exploring what is said in page 388 about the Petrov classification.


    A canonical form for the tetrad and Weyl scalars admits alternate forms; the implementation is as implicit in page 388:

     

    `&Psi;__0`

    `&Psi;__1`

    `&Psi;__2`

    `&Psi;__3`

    `&Psi;__4`

    Residual invariance

    Petrov type I

    0

    "<>0"

    "<>0"

    1

    0

    none

    Petrov type II

    0

    0

    "<>0"

    1

    0

    none

    Petrov type III

    0

    0

    0

    1

    0

    none

    Petrov type D

    0

    0

    "<>0"

    0

    0

    `&Psi;__2`  remains invariant under rotations of Class III

    Petrov type N

    0

    0

    0

    0

    1

    `&Psi;__4` remains invariant under rotations of Class II

     

    The transformations (rotations of the tetrad system of references) used are of Class I, II and III as defined in Chandrasekar's chapter - equations (7.79) in page 384, (7.83) and (7.84) in page 385. Transformations of Class I can be performed with the command Physics:-Tetrads:-TransformTetrad using the optional argument nullrotationwithfixedl_, of Class II using nullrotationwithfixedn_ and of Class III by calling TransformTetrad(spatialrotationsm_mb_plan, boostsn_l_plane), so with the two optional arguments simultaneously.

     

    In this development, a new optional argument, canonicalform got implemented to TransformTetrad so that the whole sequence of three transformations of Classes I, II and III is performed automatically, in one go. Regarding the canonical form of the tetrad, the main idea is that from the change in the Weyl scalars one can derive the parameters entering tetrad transformations that result in a canonical form of the tetrad. 

     

    with(Physics); 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, PetrovType, SimplifyTetrad, TransformTetrad, e_, eta_, gamma_, l_, lambda_, m_, mb_, n_]

    (1)

    (Note the Tetrads:-PetrovType command, unfinished in the first release of Maple 2016.) To run the following computations you need to update your Physics library to the latest version from the Maplesoft R&D Physics webpage, so with this datestamp or newer:

    Physics:-Version()

    "/Users/ecterrab/Maple/lib/Physics2016.mla", `2016, April 20, 12:56 hours`

    (2)

    An Example of Petrov type I

    There are six Petrov types: I, II, III, D, N and O. Start with a spacetime metric of Petrov type "I"  (the numbers always refer to the equation number in the "Exact solutions to Einstein's field equations" textbook)

    g_[[12, 21, 1]]

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

     

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

     

    `The McLenaghan, Tariq (1975), Tupper (1976) metric in coordinates `[t, x, y, phi]

     

    `Parameters: `[a, k, kappa0]

     

    "`Comments: `_k parametrizes the most general electromagnetic invariant with respect to the last 3 Killing vectors"

     

    `Resetting the signature of spacetime from "+ - - -" to \`- + + +\` in order to match the signature in the database of metrics:`

     

    g[mu, nu] = (Matrix(4, 4, {(1, 1) = -1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 2*y, (2, 1) = 0, (2, 2) = a^2/x^2, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = a^2/x^2, (3, 4) = 0, (4, 1) = 2*y, (4, 2) = 0, (4, 3) = 0, (4, 4) = x^2-4*y^2}))

    (3)

    The Weyl scalars

    Weyl[scalars]

    psi__0 = (1/4)*((4*I)*x^3*abs(x)^3-abs(x)^6+abs(x)^4*x^2+abs(x)^2*x^4-x^6)/(a^2*abs(x)^4*x^2), psi__1 = 0, psi__2 = -(1/4)*(x^2+abs(x)^2)*(x^4+abs(x)^4)/(a^2*abs(x)^4*x^2), psi__3 = 0, psi__4 = (1/4)*((4*I)*x^3*abs(x)^3-abs(x)^6+abs(x)^4*x^2+abs(x)^2*x^4-x^6)/(a^2*abs(x)^4*x^2)

    (4)

    ... there is abs around. Let's assume everything is positive to simplify formulas, use Capital Physics:-Assume  (the lower case assume  command redefines the assumed variables, so it is not compatible with Physics, DifferentialGeometry and VectorCalculus among others).

    Assume(x > 0, y > 0, a > 0)

    {a::(RealRange(Open(0), infinity))}, {x::(RealRange(Open(0), infinity))}, {y::(RealRange(Open(0), infinity))}

    (5)

    The scalars are now simpler, although still not in "canonical form" because `&Psi;__4` <> 0 and `&Psi;__3` <> 1.

    Weyl[scalars]

    psi__0 = I/a^2, psi__1 = 0, psi__2 = -1/a^2, psi__3 = 0, psi__4 = I/a^2

    (6)

    The Petrov type

    PetrovType()

    "I"

    (7)

    The  call to Tetrads:-TransformTetrad two lines below transforms the current tetrad ,

    e_[]

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

    (8)

    into another tetrad such that the Weyl scalars are in canonical form, which for Petrov "I" type happens when `&Psi;__0` = 0, `&Psi;__4` = 0 and `&Psi;__3` = 1.

    TransformTetrad(canonicalform)

    Matrix(%id = 18446744078500192254)

    (9)

    Despite the fact that the result is a much more complicated tetrad, this is an amazing result in that the resulting Weyl scalars are all fixed (see below).  Let's first verify that this is indeed a tetrad, and that now the Weyl scalars are in canonical form

    "IsTetrad(?)"

    `Type of tetrad: null `

     

    true

    (10)

    Set (9) to be the tetrad in use and recompute the Weyl scalars

    "Setup(tetrad = ?):"

    Inded we now have `&Psi;__0` = 0, `&Psi;__4` = 0 and `&Psi;__3` = 1 

    simplify([Weyl[scalars]])

    [psi__0 = 0, psi__1 = (-1/2-(3/2)*I)/a^4, psi__2 = (-1+I)/a^2, psi__3 = 1, psi__4 = 0]

    (11)

    So Weyl scalars computed after setting the canonical tetrad (9) to be the tetrad in use are in canonical form. Great! NOTE: computing the canonicalWeyl scalars is not really the difficult part, and within the code, these scalars (11) are computed before arriving at the tetrad (9). What is really difficult (from the point of view of computational complexity and simplifications) is to compute the actual canonical form of the tetrad (9).

     

    An Example of Petrov type II

    Consider this other solution to Einstein's equation (again, the numbers in g_[[24,37,7]] always refer to the equation number in the "Exact solutions to Einstein's field equations" textbook)

    g_[[24, 37, 7]]

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

     

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

     

    `The Stephani metric in coordinates `[u, v, x, y]

     

    `Parameters: `[f(x), a, Psi1(u, x, y)]

     

    "`Comments: `Case 6 from Table 24.1:_Psi1(u,x,y): diff(_Psi1(u,x,y),x,x)+diff(_Psi1(u,x,y),y,y)=0, diff(x*diff(_M(u,x,y),x),x)+x*diff(_M(u,x,y),y,y)=_kappa0*(diff(_Psi(u,x,y),x)^2+diff(_Psi(u,x,y),y)^2)"

     

    g[mu, nu] = (Matrix(4, 4, {(1, 1) = -2*x*(f(x)+y*a), (1, 2) = -x, (1, 3) = 0, (1, 4) = 0, (2, 2) = 0, (2, 3) = 0, (2, 4) = 0, (3, 3) = 1/x^(1/2), (3, 4) = 0, (4, 4) = 1/x^(1/2)}, storage = triangular[upper], shape = [symmetric]))

    (12)

    Check the Petrov type

    PetrovType()

    "II"

    (13)

    The starting tetrad

    e_[]

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

    (14)

    results in Weyl scalars not in canonical form:

    Weyl[scalars]

    psi__0 = 0, psi__1 = 0, psi__2 = (1/8)/x^(3/2), psi__3 = 0, psi__4 = -((3*I)*a-2*x*(diff(diff(f(x), x), x))-3*(diff(f(x), x)))/(x^(1/2)*(4*y*a+4*f(x)))

    (15)

    For Petrov type "II", the canonical form is as for type "I" but in addition `&Psi;__1` = 0. Again let's assume positive, not necessary, but to get simpler formulas around

    Assume(f(x) > 0, x > 0, y > 0, a > 0)

    {a::(RealRange(Open(0), infinity))}, {x::(RealRange(Open(0), infinity)), (-f(x))::(RealRange(-infinity, Open(0))), (f(x))::(RealRange(Open(0), infinity))}, {y::(RealRange(Open(0), infinity))}

    (16)

    Compute now a canonical form for the tetrad, to be used instead of (14)

    TransformTetrad(canonicalform)

    Matrix(%id = 18446744078835949430)

    (17)

    Set this tetrad and check the Weyl scalars again

    "Setup(tetrad = ?):"

    Weyl[scalars]

    psi__0 = 0, psi__1 = 0, psi__2 = (1/8)/x^(3/2), psi__3 = 1, psi__4 = 0

    (18)

    This result (18) is fantastic. Compare these Weyl scalars with the ones (15) before transforming the tetrad.

     

    An Example of Petrov type III

    g_[[12, 35, 1]]

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

     

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

     

    `The Kaigorodov (1962), Cahen (1964), Siklos (1981), Ozsvath (1987) metric in coordinates `[u, x, y, z]

     

    `Parameters: `[Lambda]

     

    g[mu, nu] = (Matrix(4, 4, {(1, 1) = 0, (1, 2) = exp(-2*z), (1, 3) = 0, (1, 4) = 0, (2, 2) = exp(4*z), (2, 3) = 2*exp(z), (2, 4) = 0, (3, 3) = 2*exp(-2*z), (3, 4) = 0, (4, 4) = 3/abs(Lambda)}, storage = triangular[upper], shape = [symmetric]))

    (19)

    Assume(z > 0, Lambda > 0)

    {Lambda::(RealRange(Open(0), infinity))}, {z::(RealRange(Open(0), infinity))}

    (20)

    The Petrov type and the original tetrad

    PetrovType()

    "III"

    (21)

    e_[]

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

    (22)

    This tetrad results in the following scalars

    Weyl[scalars]

    psi__0 = -2*Lambda*2^(1/2)+(11/4)*Lambda, psi__1 = -(1/2)*Lambda*2^(1/2)+(3/4)*Lambda, psi__2 = (1/4)*Lambda, psi__3 = -(1/2)*Lambda*2^(1/2)-(3/4)*Lambda, psi__4 = 2*Lambda*2^(1/2)+(11/4)*Lambda

    (23)

    that are not in canonical form, which for Petrov type III is as in Petrov type II but in addition we should have `&Psi;__2` = 0.

    Compute now a canonical form for the tetrad

    TransformTetrad(canonicalform)

    Matrix(%id = 18446744078500057566)

    (24)

    Set this one to be the tetrad in use and recompute the Weyl scalars

    "Setup(tetrad = ?):"

    Weyl[scalars]

    psi__0 = 0, psi__1 = 0, psi__2 = 0, psi__3 = 1, psi__4 = 0

    (25)

    Great!``

    An Example of Petrov type N

    g_[[12, 6, 1]]

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

     

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

     

    `The Defrise (1969) metric in coordinates `[u, v, y, z]

     

    `Parameters: `[Lambda, kappa0]

     

    "`Comments: `_Lambda < 0 required for a pure radiation solution"

     

    g[mu, nu] = (Matrix(4, 4, {(1, 1) = 0, (1, 2) = -(3/2)/(y^2*Lambda), (1, 3) = 0, (1, 4) = 0, (2, 2) = -3/(y^4*Lambda), (2, 3) = 0, (2, 4) = 0, (3, 3) = 3/(y^2*Lambda), (3, 4) = 0, (4, 4) = 3/(y^2*Lambda)}, storage = triangular[upper], shape = [symmetric]))

    (26)

    Assume(y > 0, Lambda > 0)

    {Lambda::(RealRange(Open(0), infinity))}, {y::(RealRange(Open(0), infinity))}

    (27)

    PetrovType()

    "N"

    (28)

    The original tetrad and related Weyl scalars are not in canonical form:

    e_[]

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

    (29)

    Weyl[scalars]

    psi__0 = -(1/4)*Lambda, psi__1 = -((1/4)*I)*Lambda, psi__2 = (1/4)*Lambda, psi__3 = ((1/4)*I)*Lambda, psi__4 = -(1/4)*Lambda

    (30)

    For Petrov type "N", the canonical form has `&Psi;__4` <> 0 and all the other `&Psi;__n` = 0.

    Compute a canonical form, set it to be the tetrad in use and recompute the Weyl scalars

    TransformTetrad(canonicalform)

    Matrix(%id = 18446744078518486190)

    (31)

    "Setup(tetrad = ?):"

    Weyl[scalars]

    psi__0 = 0, psi__1 = 0, psi__2 = 0, psi__3 = 0, psi__4 = 1

    (32)

    All as expected.

    An Example of Petrov type D

     

    g_[[12, 8, 4]]

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

     

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

     

    `The  metric in coordinates `[t, x, y, z]

     

    `Parameters: `[A, B]

     

    "`Comments: `k = 0, kprime = 1, not an Einstein metric"

     

    g[mu, nu] = (Matrix(4, 4, {(1, 1) = -B^2*sin(z)^2, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 2) = A^2, (2, 3) = 0, (2, 4) = 0, (3, 3) = A^2*x^2, (3, 4) = 0, (4, 4) = B^2}, storage = triangular[upper], shape = [symmetric]))

    (33)

    Assume(A > 0, B > 0, x > 0, 0 <= z and z <= (1/4)*Pi)

    {A::(RealRange(Open(0), infinity))}, {B::(RealRange(Open(0), infinity))}, {x::(RealRange(Open(0), infinity))}, {z::(RealRange(0, (1/4)*Pi))}

    (34)

    PetrovType()

    "D"

    (35)

    The default tetrad and related Weyl scalars are not in canonical form, which for Petrov type "D" is with `&Psi;__2` <> 0 and all the other `&Psi;__n` = 0

    e_[]

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

    (36)

    Weyl[scalars]

    psi__0 = (1/4)/B^2, psi__1 = 0, psi__2 = (1/12)/B^2, psi__3 = 0, psi__4 = (1/4)/B^2

    (37)

    Transform the  tetrad, set it and recompute the Weyl scalars

    TransformTetrad(canonicalform)

    Matrix(%id = 18446744078814996830)

    (38)

    "Setup(tetrad=?):"

    Weyl[scalars]

    psi__0 = 0, psi__1 = 0, psi__2 = -(1/6)/B^2, psi__3 = 0, psi__4 = 0

    (39)

    Again the expected canonical form of the Weyl scalars, and `&Psi;__2` <> 0 remains invariant under transformations of Class III.

     

    An Example of Petrov type O

     

    Finally an example of type "O". This corresponds to a conformally flat spacetime, for which the Weyl tensor (and with it all the Weyl scalars) vanishes. So the code just interrupts with "not implemented for conformally flat spactimes of Petrov type O"

    g_[[8, 33, 1]]

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

     

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

     

    `The  metric in coordinates `[t, x, y, z]

     

    `Parameters: `[K]

     

    "`Comments: `_K=3*_Lambda, _K>0 de Sitter, _K<0 anti-de Sitte"

     

    g[mu, nu] = z

    (40)

    PetrovType()

    "O"

    (41)

    The Weyl tensor and its scalars all vanish:

    Weyl[nonzero]

    Physics:-Weyl[mu, nu, alpha, beta] = {}

    (42)

    simplify(evala([Weyl[scalars]]))

    [psi__0 = 0, psi__1 = 0, psi__2 = 0, psi__3 = 0, psi__4 = 0]

    (43)

    TransformTetrad(canonicalform)

    Error, (in Tetrads:-CanonicalForm) canonical form is not implemented for flat or conformally flat spacetimes of Petrov type "O"

     

    NULL

     

    Download TetradsAndWeylScalarsInCanonicalForm.mw

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

    An update to Maple 2016 is now available. Maple 2016.1 provides:

    • Updated translations for Simplified and Traditional Chinese,  French, Greek, Japanese, Brazilian Portuguese, and Spanish
    • Updates to the new Maple Workbook
    • Enhancements to Maple’s context-sensitive menus
    • A variety of improvements to the math engine and interface

     

    To get this update, use Tools>Check for Updates from within Maple, or visit the Maple 2016.1 downloads page.

     

    eithne

     

    MapleSim 2016 is here!

    MapleSim 2016 provides variety of improvements to streamline the user experience, expand modeling scope, and enhance connectivity with other tools. Here are some highlights:

    • Collapsible task panes provide a larger model workspace, so you can see more of your model at once.
    • Improved layout ensures the tools you need for your current task are available at your fingertips.
    • The expanded Multibody component library now supports contact modeling.
    • A new add-on library, the MapleSim Pneumatics Library from Modelon, supports the modeling and simulation of pneumatic systems.
    • The MapleSim CAD Toolbox has been extended to support the latest versions of Inventor®, NX®, SOLIDWORKS®, CATIA® V5, Solid Edge®, PTC® Creo Parametric™, and more.
    • The MapleSim Connector, which provides connectivity to Simulink®, now supports single precision export of S-functions so you can run your MapleSim models on hardware that only supports single precision.

    See What’s New in MapleSim 2016 for more information about these and other improvements.

     

    eithne

    New color schemes for plotting have been added to Maple 2016. They are summarized here. You can also see more details on the plot/colorscheme help pages, which have been reworked (hopefully in a way that makes them more useful to you).

    We released a new video a few weeks ago describing one of these features: coloring by value. The worksheet I used for the video is available here: ColorByValueWebinar.mw

     

    According to Sphere Packing Solved in Higher Dimensions, the best way, i.e., most compact way, to pack spheres in dimensions 8 and 24 are done with the E8 lattice and Leech lattice, respectively. According to the Wikipedia article Leech lattice, the number of spheres that can be packed around any one sphere is 240 and 196,560 (!), respectively, the latter number of spheres counter-intuitively large. It inspired me to try to check that there is indeed room in these lattices for (at least) this number of spheres.

    Starting with the E8 lattice: It is generated by the sum (over the integers) of all the 240 roots of E8. Following the prescription given in the subsection 'Construction' in the Wikipedia article E8 (mathematics), these roots may be constructed as follows:

    ROOTS := map(x -> Vector(x),[
       # Coordinates all integers: 112 roots
       combinat[permute]([+1,+1,0,0,0,0,0,0])[],
       combinat[permute]([+1,-1,0,0,0,0,0,0])[],
       combinat[permute]([-1,-1,0,0,0,0,0,0])[],
       # Coordinates all half-integers: 128 roots
       seq(combinat[permute]([
          (+1/2)$(  2*n),   # Even number of +1/2
          (-1/2)$(8-2*n)    # Even number of -1/2
       ])[],n = 0..4)
    ]):

    This Maple code gives a list of 240 eight-dimensional vectors. All these roots have the same length (the lattice thus being simply laced):

    convert(map(x -> Norm(x,2),ROOTS),set)[];

    If the distance between any pair of different roots is at least this length, then there will be room for 240 spheres of radius equal to this length around any one single sphere. And that is indeed the case:

    DIST_ROOTS := Matrix(nops(ROOTS)$2,(i,j) ->
       Norm(ROOTS[i] - ROOTS[j],2)
    ,shape = symmetric):
    min(convert(DIST_ROOTS,set) minus {0});

    Using the above method for the Leech lattice will fail on grounds of hopeless performance, not the least because DIST_ROOTS will take ages to calculate, if at all possible. So any reader is welcome to weigh in with ideas on how to check the Leech lattice case.

    PS: By the way, I was surprised to find that the three exceptional Lie algebras E6, E7, and E8 are seemingly not accessible through the Maple command SimpleLieAlgebraData, see its help page. Only the four infinite families A,B,C,D, as well as the two exceptional Lie algebras G2 and F4 are. Using Maple 17, I would like to know if that has been changed in Maple 17+, and if not, why not.

    First 8 9 10 11 12 13 14 Last Page 10 of 247