Maple 2025 Questions and Posts

These are Posts and Questions associated with the product, Maple 2025

I am looking to do some gravitational perturbations around a generic background spacetime. But before doing that, I wanted to look at just linearized gravity, and make sure all the standard calculations work with Physics before throwing something a little more complicated at it. I went to ?Physics,Library and found the Linearize command, and I thought this was great! When I was reading through it however, I found that the sign infront of the perturbation in the inverse metric is incorrect. Now, this does not give any invalid results for the Ricci tensor as displayed in the worksheet, since we are only going to linear order, but if we want to go beyond linear order, this will start to cause issues. 

Is there a way that Maple can handle this? Or do I have to do some sort of double Define for the metric: one with all downstairs indices, and one with all upstairs indices? If so, how do I do that? 

Any help would be greatly appreciated!

restart: with(Physics): with(Library):

Setup(coordinates = cartesian,signature=`-+++`):

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

 

_______________________________________________________

(1)

g_[];

g_[mu, nu] = (Matrix(4, 4, {(1, 1) = -1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = 1, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = 1}))

(2)
  

 

Define(h[mu, nu],symmetric)

`Defined objects with tensor properties`

 

{Physics:-Dgamma[mu], Physics:-Psigma[mu], Physics:-d_[mu], Physics:-g_[mu, nu], h[mu, nu], Physics:-LeviCivita[alpha, beta, mu, nu], Physics:-SpaceTimeVector[mu](X)}

(3)
  

 

Define(eta[mu,nu]=rhs((2)))

`Defined objects with tensor properties`

 

{Physics:-Dgamma[mu], Physics:-Psigma[mu], Physics:-d_[mu], eta[mu, nu], Physics:-g_[mu, nu], h[mu, nu], Physics:-LeviCivita[alpha, beta, mu, nu], Physics:-SpaceTimeVector[mu](X)}

(4)

g_[mu,nu]=eta[mu,nu]+epsilon*h[mu,nu]

Physics:-g_[mu, nu] = epsilon*h[mu, nu]+eta[mu, nu]

(5)

Lets "define" the inverse metric as it appears from the Library:-Linearize worksheet.

g_[~mu,~alpha]=eta[~mu,~alpha]+epsilon*h[~mu,~alpha]

Physics:-g_[`~alpha`, `~mu`] = epsilon*h[`~mu`, `~alpha`]+eta[`~alpha`, `~mu`]

(6)

If we multiply the metric and its inverse together, we should expact that we return the KroneckerDelta by definition -- if we consider only to linear order.  

(5)*(6)

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = (epsilon*h[mu, nu]+eta[mu, nu])*(epsilon*h[`~mu`, `~alpha`]+eta[`~alpha`, `~mu`])

(7)

expand((7))

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = epsilon^2*h[mu, nu]*h[`~mu`, `~alpha`]+epsilon*eta[mu, nu]*h[`~mu`, `~alpha`]+epsilon*eta[`~alpha`, `~mu`]*h[mu, nu]+eta[mu, nu]*eta[`~alpha`, `~mu`]

(8)

Substitute(eta=g_,(8))

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = epsilon^2*h[mu, nu]*h[`~mu`, `~alpha`]+epsilon*Physics:-g_[mu, nu]*h[`~mu`, `~alpha`]+epsilon*Physics:-g_[`~alpha`, `~mu`]*h[mu, nu]+Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`]

(9)

subs(epsilon^2=0,(9))

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = epsilon*Physics:-g_[mu, nu]*h[`~mu`, `~alpha`]+epsilon*Physics:-g_[`~alpha`, `~mu`]*h[mu, nu]+Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`]

(10)

Simplify(%)

Physics:-g_[nu, `~alpha`] = 2*epsilon*h[nu, `~alpha`]+Physics:-g_[nu, `~alpha`]

(11)

 

As we can see, we do not get delta alone on the right-hand-side, but instead we still have the perturbation still.

If we instead, use the proper way the inverse should look, which of course comes from the definition of the inverse, it should have minus sign.

g_[~mu,~alpha]=eta[~mu,~alpha]-epsilon*h[~mu,~alpha]

Physics:-g_[`~alpha`, `~mu`] = -epsilon*h[`~mu`, `~alpha`]+eta[`~alpha`, `~mu`]

(12)

subs(epsilon^2=0,expand((5)*(12)))

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = -epsilon*eta[mu, nu]*h[`~mu`, `~alpha`]+epsilon*eta[`~alpha`, `~mu`]*h[mu, nu]+eta[mu, nu]*eta[`~alpha`, `~mu`]

(13)

Simplify(Substitute(eta=g_,(13)))

Physics:-g_[nu, `~alpha`] = Physics:-g_[nu, `~alpha`]

(14)

Which is the desired result we want. So, my question: is there a way that Maple can produce the correct inverse metric not only to linear order, but to say quadratic, without explicitly deriving it ourselves?

Here is the Physics:-Library(Linearize) Worksheet/Example with some comments

restart: with(Physics): with(Library):

Setup(coordinates = cartesian);

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

 

_______________________________________________________

 

[coordinatesystems = {X}]

(1)
  

The default metric when Physics is loaded is the Minkowski metric, representing a flat (no curvature) spacetime

g_[];

g_[mu, nu] = (Matrix(4, 4, {(1, 1) = -1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = -1, (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = -1, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = 1}))

(2)
  

Suppose you want to define a small perturbation around this metric. For that purpose, define a perturbation tensor h[mu, nu], that in the general case depends on the coordinates and is not diagonal, the only requirement is that it is symmetric (to have it diagonal, change symmetric by diagonal; to have it constant, change delta[i, j](X) by delta[i, j])

h[mu, nu] = Matrix(4, (i, j) -> delta[i, j](X), shape = symmetric);

h[mu, nu] = (Matrix(4, 4, {(1, 1) = delta[1, 1](x, y, z, t), (1, 2) = delta[1, 2](x, y, z, t), (1, 3) = delta[1, 3](x, y, z, t), (1, 4) = delta[1, 4](x, y, z, t), (2, 1) = delta[1, 2](x, y, z, t), (2, 2) = delta[2, 2](x, y, z, t), (2, 3) = delta[2, 3](x, y, z, t), (2, 4) = delta[2, 4](x, y, z, t), (3, 1) = delta[1, 3](x, y, z, t), (3, 2) = delta[2, 3](x, y, z, t), (3, 3) = delta[3, 3](x, y, z, t), (3, 4) = delta[3, 4](x, y, z, t), (4, 1) = delta[1, 4](x, y, z, t), (4, 2) = delta[2, 4](x, y, z, t), (4, 3) = delta[3, 4](x, y, z, t), (4, 4) = delta[4, 4](x, y, z, t)}))

(3)
  

In the above it is understood that delta[i, j] are small quantities, so that quadratic or higher powers of it can be approximated to 0 (i.e., discarded). Define the components of h[mu, nu] accordingly

Define((3));

`Defined objects with tensor properties`

 

{Physics:-Dgamma[mu], Physics:-Psigma[mu], Physics:-d_[mu], Physics:-g_[mu, nu], h[mu, nu], Physics:-LeviCivita[alpha, beta, mu, nu], Physics:-SpaceTimeVector[mu](X)}

(4)
  

Define also a tensor eta[mu, nu] representing the unperturbed Minkowski metric

eta[mu, nu] = rhs((2));

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

(5)

Define((5));

`Defined objects with tensor properties`

 

{Physics:-Dgamma[mu], Physics:-Psigma[mu], Physics:-d_[mu], eta[mu, nu], Physics:-g_[mu, nu], h[mu, nu], Physics:-LeviCivita[alpha, beta, mu, nu], Physics:-SpaceTimeVector[mu](X)}

(6)
  

The weakly perturbed metric is given by

g_[mu, nu] = eta[mu, nu] + h[mu, nu];

Physics:-g_[mu, nu] = eta[mu, nu]+h[mu, nu]

(7)
  

Make this be the definition of the metric

Define((7));

_______________________________________________________

 

`Coordinates: `[x, y, z, t]*`. Signature: `(`- - - +`)

 

_______________________________________________________

 

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

 

_______________________________________________________

 

`Setting `*lowercaselatin_is*` letters to represent `*space*` indices`

 

`Defined objects with tensor properties`

 

{Physics:-D_[mu], Physics:-Dgamma[mu], Physics:-Psigma[mu], Physics:-Ricci[mu, nu], Physics:-Riemann[mu, nu, alpha, beta], Physics:-Weyl[mu, nu, alpha, beta], Physics:-d_[mu], eta[mu, nu], Physics:-g_[mu, nu], Physics:-gamma_[i, j], h[mu, nu], Physics:-Christoffel[mu, nu, alpha], Physics:-Einstein[mu, nu], Physics:-LeviCivita[alpha, beta, mu, nu], Physics:-SpaceTimeVector[mu](X)}

(8)
  

The linearized form of the Ricci tensor is computed by introducing this weakly perturbed metric in the expression of the Ricci  tensor as a function of the metric. This can be accomplished in different ways, the simpler being to use the conversion network between tensors, but for illustration purposes, showing steps one at time, a substitution of definitions one into the other one is used

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]

(9)

Christoffel[~alpha, mu, nu, definition];

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

(10)

Substitute((10), (9));

Physics:-Ricci[mu, nu] = Physics:-d_[alpha]((1/2)*Physics:-g_[`~alpha`, `~kappa`]*(Physics:-d_[nu](Physics:-g_[kappa, mu], [X])+Physics:-d_[mu](Physics:-g_[kappa, nu], [X])-Physics:-d_[kappa](Physics:-g_[mu, nu], [X])), [X])-Physics:-d_[nu]((1/2)*Physics:-g_[`~alpha`, `~tau`]*(Physics:-d_[mu](Physics:-g_[tau, alpha], [X])+Physics:-d_[alpha](Physics:-g_[tau, mu], [X])-Physics:-d_[tau](Physics:-g_[alpha, mu], [X])), [X])+(1/4)*Physics:-g_[`~beta`, `~iota`]*(Physics:-d_[nu](Physics:-g_[iota, mu], [X])+Physics:-d_[mu](Physics:-g_[iota, nu], [X])-Physics:-d_[iota](Physics:-g_[mu, nu], [X]))*Physics:-g_[`~alpha`, `~lambda`]*(Physics:-d_[beta](Physics:-g_[lambda, alpha], [X])+Physics:-d_[alpha](Physics:-g_[lambda, beta], [X])-Physics:-d_[lambda](Physics:-g_[alpha, beta], [X]))-(1/4)*Physics:-g_[`~beta`, `~omega`]*(Physics:-d_[mu](Physics:-g_[omega, alpha], [X])+Physics:-d_[alpha](Physics:-g_[omega, mu], [X])-Physics:-d_[omega](Physics:-g_[alpha, mu], [X]))*Physics:-g_[`~alpha`, `~chi`]*(Physics:-d_[nu](Physics:-g_[chi, beta], [X])+Physics:-d_[beta](Physics:-g_[chi, nu], [X])-Physics:-d_[chi](Physics:-g_[beta, nu], [X]))

(11)
  

Introducing the perturbed metric, and the inert form of Ricci for simplification purposes

Substitute((7), Ricci = %Ricci, (11));

%Ricci[mu, nu] = (1/2)*Physics:-d_[alpha](eta[`~alpha`, `~kappa`]+h[`~alpha`, `~kappa`], [X])*(Physics:-d_[nu](eta[kappa, mu]+h[kappa, mu], [X])+Physics:-d_[mu](eta[kappa, nu]+h[kappa, nu], [X])-Physics:-d_[kappa](eta[mu, nu]+h[mu, nu], [X]))+(1/2)*(eta[`~alpha`, `~kappa`]+h[`~alpha`, `~kappa`])*(Physics:-d_[alpha](Physics:-d_[nu](eta[kappa, mu]+h[kappa, mu], [X]), [X])+Physics:-d_[alpha](Physics:-d_[mu](eta[kappa, nu]+h[kappa, nu], [X]), [X])-Physics:-d_[alpha](Physics:-d_[kappa](eta[mu, nu]+h[mu, nu], [X]), [X]))-(1/2)*Physics:-d_[nu](eta[`~alpha`, `~tau`]+h[`~alpha`, `~tau`], [X])*(Physics:-d_[mu](eta[alpha, tau]+h[alpha, tau], [X])+Physics:-d_[alpha](eta[mu, tau]+h[mu, tau], [X])-Physics:-d_[tau](eta[alpha, mu]+h[alpha, mu], [X]))-(1/2)*(eta[`~alpha`, `~tau`]+h[`~alpha`, `~tau`])*(Physics:-d_[mu](Physics:-d_[nu](eta[alpha, tau]+h[alpha, tau], [X]), [X])+Physics:-d_[alpha](Physics:-d_[nu](eta[mu, tau]+h[mu, tau], [X]), [X])-Physics:-d_[nu](Physics:-d_[tau](eta[alpha, mu]+h[alpha, mu], [X]), [X]))+(1/4)*(eta[`~beta`, `~iota`]+h[`~beta`, `~iota`])*(Physics:-d_[nu](eta[iota, mu]+h[iota, mu], [X])+Physics:-d_[mu](eta[iota, nu]+h[iota, nu], [X])-Physics:-d_[iota](eta[mu, nu]+h[mu, nu], [X]))*(eta[`~alpha`, `~lambda`]+h[`~alpha`, `~lambda`])*(Physics:-d_[beta](eta[alpha, lambda]+h[alpha, lambda], [X])+Physics:-d_[alpha](eta[beta, lambda]+h[beta, lambda], [X])-Physics:-d_[lambda](eta[alpha, beta]+h[alpha, beta], [X]))-(1/4)*(eta[`~beta`, `~omega`]+h[`~beta`, `~omega`])*(Physics:-d_[mu](eta[alpha, omega]+h[alpha, omega], [X])+Physics:-d_[alpha](eta[mu, omega]+h[mu, omega], [X])-Physics:-d_[omega](eta[alpha, mu]+h[alpha, mu], [X]))*(eta[`~alpha`, `~chi`]+h[`~alpha`, `~chi`])*(Physics:-d_[nu](eta[beta, chi]+h[beta, chi], [X])+Physics:-d_[beta](eta[chi, nu]+h[chi, nu], [X])-Physics:-d_[chi](eta[beta, nu]+h[beta, nu], [X]))

(12)
  

The sign infront of the perturbation in the inverse metric is wrong, it should be minus.

  

This expression contains several terms quadratic in the small perturbation h[mu, nu]. The routine to filter out those terms is Linearize, that takes as second argument the symbol representing the small quantities (perturbation)

Lets look at the metric times inverse in this setup

g_[mu,nu,definition]*g_[~mu,~alpha,definition]

Physics:-g_[mu, nu]*Physics:-g_[`~mu`, `~alpha`] = (eta[mu, nu]+h[mu, nu])*(eta[`~mu`, `~alpha`]+h[`~mu`, `~alpha`])

(13)

Linearize((13),h)

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = eta[mu, nu]*eta[`~alpha`, `~mu`]+eta[mu, nu]*h[`~alpha`, `~mu`]+eta[`~alpha`, `~mu`]*h[mu, nu]

(14)

Simplify(subs(eta=g_,(14)))

Physics:-g_[nu, `~alpha`] = Physics:-g_[nu, `~alpha`]+2*h[nu, `~alpha`]

(15)

The result is not correct, left-hand-side does not match right-hand-side, this is because the inverse metric has the wrong. If it were a minus, we would get:

g_[mu, nu]*g_[~alpha, ~mu] = eta[mu, nu]*eta[~alpha, ~mu] - eta[mu, nu]*h[~alpha, ~mu] + eta[~alpha, ~mu]*h[mu, nu]

Physics:-g_[mu, nu]*Physics:-g_[`~alpha`, `~mu`] = eta[mu, nu]*eta[`~alpha`, `~mu`]-eta[mu, nu]*h[`~alpha`, `~mu`]+eta[`~alpha`, `~mu`]*h[mu, nu]

(16)

Simplify(subs(eta=g_,(16)))

Physics:-g_[nu, `~alpha`] = Physics:-g_[nu, `~alpha`]

(17)

Which is correct. The continued calculation from the Help page is below.

 

Linearize((12), h);

%Ricci[mu, nu] = (1/2)*eta[`~alpha`, `~tau`]*Physics:-d_[nu](Physics:-d_[tau](h[alpha, mu], [X]), [X])-(1/2)*eta[`~alpha`, `~tau`]*Physics:-d_[mu](Physics:-d_[nu](h[alpha, tau], [X]), [X])-(1/2)*eta[`~alpha`, `~kappa`]*Physics:-d_[alpha](Physics:-d_[kappa](h[mu, nu], [X]), [X])+(1/2)*eta[`~alpha`, `~kappa`]*Physics:-d_[alpha](Physics:-d_[nu](h[kappa, mu], [X]), [X])+(1/2)*eta[`~alpha`, `~kappa`]*Physics:-d_[alpha](Physics:-d_[mu](h[kappa, nu], [X]), [X])-(1/2)*eta[`~alpha`, `~tau`]*Physics:-d_[alpha](Physics:-d_[nu](h[mu, tau], [X]), [X])

(18)
 
  

In this result, eta[mu, nu] is the flat Minkowski metric. To further simplify this expression using the internal algorithms for a flat metric it is practical to reintroduce g[mu, nu] representing that Minkowski metric

g_[min];

_______________________________________________________

 

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

 

`Signature: `(`- - - +`)

 

_______________________________________________________

 

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

(19)
  

Replace in the expression for the Ricci tensor the intermediate Minkowski eta[mu, nu]by g[mu, nu]

subs(eta = g_, (18));

%Ricci[mu, nu] = (1/2)*Physics:-g_[`~alpha`, `~tau`]*Physics:-d_[nu](Physics:-d_[tau](h[alpha, mu], [X]), [X])-(1/2)*Physics:-g_[`~alpha`, `~tau`]*Physics:-d_[mu](Physics:-d_[nu](h[alpha, tau], [X]), [X])-(1/2)*Physics:-g_[`~alpha`, `~kappa`]*Physics:-d_[alpha](Physics:-d_[kappa](h[mu, nu], [X]), [X])+(1/2)*Physics:-g_[`~alpha`, `~kappa`]*Physics:-d_[alpha](Physics:-d_[nu](h[kappa, mu], [X]), [X])+(1/2)*Physics:-g_[`~alpha`, `~kappa`]*Physics:-d_[alpha](Physics:-d_[mu](h[kappa, nu], [X]), [X])-(1/2)*Physics:-g_[`~alpha`, `~tau`]*Physics:-d_[alpha](Physics:-d_[nu](h[mu, tau], [X]), [X])

(20)
  

Simplifying, results in the linearized form of the Ricci tensor

Simplify((20));

%Ricci[mu, nu] = -(1/2)*Physics:-d_[mu](Physics:-d_[nu](h[tau, `~tau`], [X]), [X])-(1/2)*Physics:-dAlembertian(h[mu, nu], [X])+(1/2)*Physics:-d_[nu](Physics:-d_[tau](h[mu, `~tau`], [X]), [X])+(1/2)*Physics:-d_[mu](Physics:-d_[tau](h[nu, `~tau`], [X]), [X])

(21)

This is correct result, because we are going to linear order only the +/- does not have an effect on the end result.

Download LinearizedWorksheet-Comments.mw

Download LinearQuestion.mw

The title says it all. Nevertheless, I am doing some symbolic computation/manipulations with tensors in the Physics pacakge. When I type out my expressions and execute it changes some positions of the indices -- example below. Why? 
**Sorry, contents will not post. 

Download IndexQuestion.mw

The below problem has already occured several times to me. In all such instances Maple did not realise that extracting a factor from a square root is the key for further simplification. Doing this by hand is obvious and often easy when extracted factors are positive.  

Did I overlook something? Are there other ways avoid disassembling an expression with the op command?
Should simplify or other commands be improved to adress such problems?

restart

How to transform the left-hand side by commands that it matches the right-hand side

sqrt(x__0+1)*sqrt(-2*beta^2*x__0-2*beta^2+4)*sqrt(-(x__0+1)*(beta^2-1))/((beta^2*x__0+beta^2-2)*(beta^2*x__0+beta^2-x__0-1)) = 2/(sqrt(-beta^2+1)*sqrt(-2*beta^2*x__0-2*beta^2+4))

(x__0+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)*(-(x__0+1)*(beta^2-1))^(1/2)/((beta^2*x__0+beta^2-2)*(beta^2*x__0+beta^2-x__0-1)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2))

(1)

assumptions := 0 < x__0 and x__0 < 1, 0 < beta and beta < 1

0 < x__0 and x__0 < 1, 0 < beta and beta < 1

(2)

`assuming`([simplify(lhs((x__0+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)*(-(x__0+1)*(beta^2-1))^(1/2)/((beta^2*x__0+beta^2-2)*(beta^2*x__0+beta^2-x__0-1)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2))))], [assumptions])

-(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(-2+(x__0+1)*beta^2))

(3)

I have tried the usual simplify and combine commands to remove the square root from the numerator.
Extracting a factor for -2 from the square root would probably make further simplification possible but there is no simple command to do so.

Factor_ := -2

-2

(4)

old := simplify([op(denom(-(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(-2+(x__0+1)*beta^2))))])

[(-beta^2+1)^(1/2), -2+(x__0+1)*beta^2]

(5)

new := old; new[1] := old[1]/Factor_; new[2] := old[2]*Factor_

[-(1/2)*(-beta^2+1)^(1/2), 4-2*(x__0+1)*beta^2]

(6)

subs(1/old[1] = 1/new[1], 1/old[2] = 1/new[2], -(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(-2+(x__0+1)*beta^2)))

2*(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(4-2*(x__0+1)*beta^2))

(7)

expand(simplify(2*(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(4-2*(x__0+1)*beta^2))))

2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2))

(8)

2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)) = rhs((x__0+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)*(-(x__0+1)*(beta^2-1))^(1/2)/((beta^2*x__0+beta^2-2)*(beta^2*x__0+beta^2-x__0-1)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)))

2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2))

(9)

is(2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)))

true

(10)

Second approach after "discovering" that content works also on square roots

[op(-(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(-2+(x__0+1)*beta^2)))]

[-1, 1/(-beta^2+1)^(1/2), (4+(-2*x__0-2)*beta^2)^(1/2), 1/(-2+(x__0+1)*beta^2)]

(11)

mul(`~`[`*`](`~`[content]([-1, 1/(-beta^2+1)^(1/2), (4+(-2*x__0-2)*beta^2)^(1/2), 1/(-2+(x__0+1)*beta^2)]), `~`[primpart]([-1, 1/(-beta^2+1)^(1/2), (4+(-2*x__0-2)*beta^2)^(1/2), 1/(-2+(x__0+1)*beta^2)])))

-2^(1/2)*(-beta^2*x__0-beta^2+2)^(1/2)/((-beta^2+1)^(1/2)*(beta^2*x__0+beta^2-2))

(12)

simplify(-2^(1/2)*(-beta^2*x__0-beta^2+2)^(1/2)/((-beta^2+1)^(1/2)*(beta^2*x__0+beta^2-2))) = rhs((x__0+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)*(-(x__0+1)*(beta^2-1))^(1/2)/((beta^2*x__0+beta^2-2)*(beta^2*x__0+beta^2-x__0-1)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2)))

2^(1/2)/((2+(-x__0-1)*beta^2)^(1/2)*(-beta^2+1)^(1/2)) = 2/((-beta^2+1)^(1/2)*(-2*beta^2*x__0-2*beta^2+4)^(1/2))

(13)

is(%)

true

(14)

NULL

Context: The left-hand side in an integrand which was produced by a change of variables in a elliptic integral. Maple simplifies only halfway which makes validation of the result of the variable change difficult.  

NULL

Related functional programming question: Is a onliner `...`(-(4+(-2*x__0-2)*beta^2)^(1/2)/((-beta^2+1)^(1/2)*(-2+(x__0+1)*beta^2)))from the above content-primpart construct possible?NULL

Download Simplify_radical_02.mw

Help me rewrite the code to create visible Bar chart of different colors. I can't figure out why this code is not giving me a visible bar graph

restart; with(Statistics); with(plots); Data := [45, 38, 51, 67, 74, 91]; P := BarChart(Data, tickmarks = [[1 = "Chemical Vector Control", 2 = "Resistant Cultivars", 3 = "Roguing & Sanitation", 4 = "u1+u2", 5 = "u1+u3", 6 = "Integrated"], default], width = .75); T := textplot([[1, 48, "45%"], [2, 41, "38%"], [3, 54, "51%"], [4, 70, "67%"], [5, 77, "74%"], [6, 94, "91%"]], font = ["TIMES", "BOLD", 12]); display([P, T], title = "Figure 20: Comparative Effectiveness of Optimal Control Strategies", labels = ["Control Strategies", "Reduction in Coinfection Burden (%)"], labelfont = ["TIMES", "BOLD", 14], titlefont = ["TIMES", "BOLD", 16], axes = boxed, gridlines = true, view = [.5 .. 6.5, 0 .. 100], size = [1000, 650])

 
 

NULL

Download Bargraph.mw

The HTML characters in the attached document cause problems here on MaplePrimes. You have to open the worksheet

Download HTML_characters_in_math_mode.mw

I am trying to plot a function where one of the variables is determind via a procedure that uses fsolve and depends on some parameters. When I go to try and make a plot using Explore to vary the parameters I get the following error:
"in fsolve  S  is in the equation, and is not solved for"
My worksheet is seen below:

restart;

 

T := 2^(2/3)*(16*CC(S,mu,Z,Pr)^2*Pi^2 + 2*Pi^2*Z^2 + 16*Pi*S*CC(S,mu,Z,Pr) + 3*S^2)*Pr^(1/3)/(4*(4*CC(S,mu,Z,Pr)*Pi + S)^(2/3)*(2*Pi^2*Z^2 + 4*Pi*S*CC(S,mu,Z,Pr) + S^2)^(2/3)*CC(S,mu,Z,Pr)^(1/3)*Pi^(2/3))

(1/4)*2^(2/3)*(16*CC(S, mu, Z, Pr)^2*Pi^2+2*Pi^2*Z^2+16*Pi*S*CC(S, mu, Z, Pr)+3*S^2)*Pr^(1/3)/((4*CC(S, mu, Z, Pr)*Pi+S)^(2/3)*(2*Pi^2*Z^2+4*Pi*S*CC(S, mu, Z, Pr)+S^2)^(2/3)*CC(S, mu, Z, Pr)^(1/3)*Pi^(2/3))

(1)

 

mu = 2^(2/3)*S*(16*C^2*Pi^2 - 2*Pi^2*Z^2 - S^2)*Pr^(1/3)/(4*(4*C*Pi + S)^(2/3)*(2*Pi^2*Z^2 + 4*C*Pi*S + S^2)^(2/3)*C^(4/3)*Pi^(2/3))

mu = (1/4)*2^(2/3)*S*(16*C^2*Pi^2-2*Pi^2*Z^2-S^2)*Pr^(1/3)/((4*C*Pi+S)^(2/3)*(2*Pi^2*Z^2+4*C*Pi*S+S^2)^(2/3)*C^(4/3)*Pi^(2/3))

(2)

CC:=proc(S,mu,Z,Pr)
fsolve((2),C,C=0.01..100)
end proc;

proc (S, mu, Z, Pr) fsolve(mu = (1/4)*2^(2/3)*S*(16*C^2*Pi^2-2*Pi^2*Z^2-S^2)*Pr^(1/3)/((4*C*Pi+S)^(2/3)*(2*Pi^2*Z^2+4*C*Pi*S+S^2)^(2/3)*C^(4/3)*Pi^(2/3)), C, C = 0.1e-1 .. 100) end proc

(3)

CC(1,0,0.5,0.2)

.1938622552

(4)

Explore(plot(T,0..15),parameters=[[mu=0 .. 1,minorticks=0.25],[Z=0..0.5,minorticks=0.1],[Pr=0..1,minorticks=0.25]])


When I try to move the sliders on my parameters this is where I get the error. I want to plot over S, but I can only get CC once I have all the other values including S. I assume it has something to do with the fact that my plotting variable is in the procedure?

Any help would be greatly appreciated, thanks. 

Download Explore_Plot_Problem.mw

Greetings, Friends.

I have a function f(t) which is a density function. It has a [0,2] interval and integrates to unity. I convolve f(t) with itself to get g(t). It has a [0,4] interval and integrates to unity. All is well with that and I understand.

BUT, the boundary of g(t) shouild be on the interval [0,4/sqrt(3)]. This is based upon both my simulation and other analyses.

At present, the area of the g(t) function on the [4/sqrt(3), 4] interval accounts for 1.408701% of the area under the curve. Not a "trivial" nor "throwaway" amount.

Does anyone know of a way to "re-scale" or modify my convolved result g(t) so that all of the resultant area under the curve is on the [0,4/sqrt(3)] interval?

My work is attached.

restart

with(Statistics)

f := proc (t) options operator, arrow; piecewise(t <= 0, 0, t <= 2, 6/5-(3/2)*t^2+(3/4)*t^3-(3/80)*t^5, 2 <= t, 0) end proc

proc (t) options operator, arrow; piecewise(t <= 0, 0, t <= 2, 6/5-(3/2)*t^2+(3/4)*t^3-(3/80)*t^5, 2 <= t, 0) end proc

(1)

plot(f(t), t = 0 .. 2)

 

int(f(t), t = 0 .. 2)

1

(2)

simplify(int(f(tau)*f(t-tau), tau = -infinity .. infinity))

(1/1971200)*piecewise(t <= 0, 0, t <= 2, t^11-220*t^9+1320*t^8+7920*t^7-103488*t^6+147840*t^5+887040*t^4-2365440*t^3+2838528*t, t <= 4, -(t^4+28*t^3+228*t^2+536*t+80)*(t-4)^7, 4 < t, 0)

(3)

g := unapply(simplify(int(f(tau)*f(t-tau), tau = -infinity .. infinity)), t)

proc (t) options operator, arrow; (1/1971200)*piecewise(t <= 0, 0, t <= 2, t^11-220*t^9+1320*t^8+7920*t^7-103488*t^6+147840*t^5+887040*t^4-2365440*t^3+2838528*t, t <= 4, -(t^4+28*t^3+228*t^2+536*t+80)*(t-4)^7, 4 < t, 0) end proc

(4)

plot(g(t), t = 0 .. 4)

 

int(g(t), t = 0 .. 4)

1

(5)

evalf(int(g(t), t = 0 .. 4/sqrt(3)))

.98591299

(6)

evalf(int(g(t), t = 4/sqrt(3) .. 4))

0.1408701e-1

(7)
 

NULL

Download SphereConvolution.mw

Hi mapleprimes, and all,

did a little exploration with the Matrix() and ifactor() Maple commands.

prime_factorization_of_one_digit_numbers.mw

have a look
no warnings, and no errors

Regards,
Matt

Note that Maple 2026 is not an available option on the product list above. This operation was used in Maple 2026.

I obtained code for the shuffle product of two lists from the AI Assistant. Included in the code was the following list operation to extract a sublist.:

 defined list  u:=[a,b,c]:  extract the sublist using the operation u[2..-1] which gives correct result [b.c]

Normally, I would have expected this operation would be encoded as [op(2..-1),u] . 

Is the shortcut notion reliable or should the operation have been encoded using op() to be safe.

In the Maple dock i am having problems finding the explicit value for x, for my equation. I need it, to find the value for r later.

so i will be kindly asking for Maple wizards to help me.

i thank of you in advance for your help, any comment is appreciated.

Hi Maple community, and all,

My intrest in prime numbers continues.

Made a quick example file.

3_tuple_admissible_example.mw

3_tuple_admissible_example.pdf

also, see my webpage for similar content
https://mattanderson.fun
and Norman, in Germany
prime k-tuplets & Primzahlen

Enjoy

Matt

 

 

 

 

when getting sequence of RealRange, I'd like to convert this to normal list. Currently I have to use map twice on the result, but I think there should be simpler way.

Below is what I do. I was wondering if there is a better way in Maple to do this, may be a built in command?

Basically, if the input is

RealRange(-2*Pi,Open(-7/4*Pi)), RealRange(Open(-5/4*Pi),Open(-3/4*Pi)), 
RealRange(Open(-1/4*Pi),Open(1/4*Pi)), RealRange(Open(3/4*Pi),Open(5/4*Pi)), 
RealRange(Open(7/4*Pi),2*Pi)

I want to change the above to normal list like this (without any Open, etc.. in it) to make it easier to post process (say for plotting and so on)

[[-2*Pi, -7/4*Pi], [-5/4*Pi, -3/4*Pi], [-1/4*Pi, 1/4*Pi], [3/4*Pi, 5/4*Pi], [7/4*Pi, 2*Pi]]

This is what I do now on an example that generates sequence of RealRange

restart;

f:=x->2*x-tan(x);
the_intervals:=solve(diff(f(x),x)>0 and x>=-2*Pi and x<= 2*Pi,x);

proc (x) options operator, arrow; 2*x-tan(x) end proc

RealRange(-2*Pi, Open(-(7/4)*Pi)), RealRange(Open(-(5/4)*Pi), Open(-(3/4)*Pi)), RealRange(Open(-(1/4)*Pi), Open((1/4)*Pi)), RealRange(Open((3/4)*Pi), Open((5/4)*Pi)), RealRange(Open((7/4)*Pi), 2*Pi)

lprint(the_intervals);

RealRange(-2*Pi,Open(-7/4*Pi)), RealRange(Open(-5/4*Pi),Open(-3/4*Pi)),
RealRange(Open(-1/4*Pi),Open(1/4*Pi)), RealRange(Open(3/4*Pi),Open(5/4*Pi)),
RealRange(Open(7/4*Pi),2*Pi)

map(X->convert(X,list),[the_intervals]);
map(X1->map(X2->`if`(has(X2,Open),op(X2),X2),X1),%);

[[-2*Pi, Open(-(7/4)*Pi)], [Open(-(5/4)*Pi), Open(-(3/4)*Pi)], [Open(-(1/4)*Pi), Open((1/4)*Pi)], [Open((3/4)*Pi), Open((5/4)*Pi)], [Open((7/4)*Pi), 2*Pi]]

[[-2*Pi, -(7/4)*Pi], [-(5/4)*Pi, -(3/4)*Pi], [-(1/4)*Pi, (1/4)*Pi], [(3/4)*Pi, (5/4)*Pi], [(7/4)*Pi, 2*Pi]]

lprint(%);

[[-2*Pi, -7/4*Pi], [-5/4*Pi, -3/4*Pi], [-1/4*Pi, 1/4*Pi], [3/4*Pi, 5/4*Pi], [7/
4*Pi, 2*Pi]]

 

 

Download convert_realrange_to_list.mw

Any idea why plot fail when adding legend and using {1} instead of [1] ? Since both have one curve.

Maple 2026 and 2025.2. searched help but do not see anything on this so far.

restart;

plot({1},x = -10 .. 10,'legend'="A");

Error, (in plot) the legend option cannot be used when plotting a set of objects

plot([1],x = -10 .. 10,'legend'="A");

 

 

Download plot_legend_problem_march_25_2026.mw

Can someone explain what the meaning of "visible character width" for e.g. TextArea components is?

My understanding is that the width should correspond to the number of characters that are visible in the TextArea. But apparently this is not the case.

A definition of 4 allows at least 8 characters. A definition of 6 at least 12, 8 gives 16 and 10 gives 20.

Test_visible_character_width.mw

I defined two tensors (vectors) U and D and their components in Maple 2025 using the Physics package. I enter U[~alpha]*U[alpha] and get a symbolic result. SumOverRepeatedIndices expands this but does not substitutes the expressions of the components I gave. How to force Maple to use the values of the components?

Thank you!

1 2 3 4 5 6 7 Last Page 1 of 19