Items tagged with expand expand Tagged Items Feed

A wealth of knowledge is on display in MaplePrimes as our contributors share their expertise and step up to answer others’ queries. This post picks out one such response and further elucidates the answers to the posted question. I hope these explanations appeal to those of our readers who might not be familiar with the techniques embedded in the original responses.

Before I begin, a quick note that the content below was primarily created by one of our summer interns, Pia, with guidance and advice from me.

The Question: Rearranging the expression of equations

SY G wanted to be able to re-write an equation in terms of different variables.  SY G presented this example: 

I have the following two equations:

x1 = a-y1-d*y2;
x2 = a-y2-d*y1;

I wish to express the first equation in terms of y1 and x2, so that

x1 = c - b*y1+d*x2;

where c=a-a*d and b=1-d^2. How can I get Maple to rearrange the original equation x1 in term of y1, x2, c and b?

This question was answered by nm who provided code with a systematic approach:


On the other hand, Carl Love answered this enquiry using a more direct and simple code:

simplify(x1=a-y1-d*y2, {a-y2-d*y1= x2, 1-d^2= b, a-a*d= c});

Let’s talk more about the expand, algsubs, subs, and simplify commands

First let’s take a look at the method nm used to solve the problem using the commands expand, subs, solve and algsubs.

The expand command, expand(expr, expr1, expr2, ..., exprn), distributes products over sums. This is done for all polynomials. For quotients of polynomials, only sums in the numerator are expanded; products and powers are left alone.

The solve command, solve(equations, variables), solves one or more equations or inequalities for their unknowns.

The subs command, subs(x=a,expr), substitutes a for x in the expression expr.

The function algsubs, algsubs(a = b, f),performs an algebraic substitution, replacing occurrences of a with b in the expression f.  It is a generalization of the subs command, which only handles syntactic substitution.

Let’s tackle the Maple code written by nm step by step:

1) restart;
The restart command is used to clear Maple’s internal memory

2)  eq1:=x1=a-y1-d*y2:
The names eq1 and eq2 were assigned to the equations SY G provided.

3) z:=expand(subs(y2=solve(eq2,y2),eq1)):
A new variable, z, was created, which will end up being x1 written in the terms SY G wanted.

  • solve(eq2,y2)
    • the solve command was used to solve the expression eq2 for the variable y2.

  • subs(y2=solve(eq2,y2),eq1)
    • The subs command was used to replace in expression eq1, y2 as determined by the solve step. 

  • expand(subs(y2=solve(eq2,y2),eq1))
    • The expand command was used to distribute products over sums. Note: this step served to ensure that the final output looked exactly how SY G wanted.

4) z:=algsubs((a-a*d)=c,z):
First, nm equated a-a*d to c, so later the algsubs command could be applied to substitute the new variable c into the expression z.

5) algsubs((1-d^2)=b,z);
Again, nm equated 1-d^2 to b, so later the algsubs command could be applied to substitute the new variable b into the expression z.

An alternate approach

Now let us check out Carl Love’s approach. Carl Love uses the simplify command in conjunction with side relations.

The simplify command has many calling sequences and one of them is the simplify(expr,eqns), that is known as simplify/siderels. A simplification of expr with respect to the side relations eqns is performed. The result is an expression which is mathematically equivalent toexpr but which is in normal form with respect to the specified side relations. Basically you are telling Maple to simplify the expression (expr) using the parameters (eqns) you gave to it.


I hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please let me know. 

Why does the collect command work for some expressions and not for others. Here is a screen shot

 The collect command is supposed to rewrite the expression in terms of the variable descending order.

p := expand((a^2+2*x)*(a^2+2*x));
                        4      2        2   2
                       a  + 4 a  x + 4 x

collect(p, x);
                        4      2        2   2
                       a  + 4 a  x + 4 x

Does not work.

But if you look at the screenshot , it works for other expressions.

hi  for example to calculate the following

residue((Psi(-z)+Eulergamma)^2*h(z), z = 2)



but it possible to write 

as( Psi(2)+Eulergamma(z))*h(2)+(D(h))(2)

so that 

and Psi(z)+Eulergamma== harmonicNumber(z-1)

the result must be


it is possible that Maple gives explit form of the values function avoid to calculate automatic.


I am trying to expand out the terms  of equation 13.  The expand command causes the lhs to be zero?

Initialize the metric and tetrad


restart; with(Physics); with(Tetrads); with(PDETools)

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


X = [zetabar, zeta, v, u]

X = [zetabar, zeta, v, u]


ds2 := Physics:-`*`(Physics:-`*`(2, dzeta), dzetabar)+Physics:-`*`(Physics:-`*`(2, du), dv)+Physics:-`*`(Physics:-`*`(2, H(zetabar, zeta, v, u)), (du+Physics:-`*`(Ybar(zetabar, zeta, v, u), dzeta)+Physics:-`*`(Y(zetabar, zeta, v, u), dzetabar)-Physics:-`*`(Physics:-`*`(Y(zetabar, zeta, v, u), Ybar(zetabar, zeta, v, u)), dv))^2)

2*dzeta*dzetabar+2*du*dv+2*H(zetabar, zeta, v, u)*(du+Ybar(zetabar, zeta, v, u)*dzeta+Y(zetabar, zeta, v, u)*dzetabar-Y(zetabar, zeta, v, u)*Ybar(zetabar, zeta, v, u)*dv)^2



Ybar(zetabar, zeta, v, u)*`will now be displayed as`*Ybar



vierbien = Matrix([[1, 0, -Ybar(zetabar, zeta, v, u), 0], [0, 1, -Y(zetabar, zeta, v, u), 0], [Physics:-`*`(H(zetabar, zeta, v, u), Y(zetabar, zeta, v, u)), Physics:-`*`(H(zetabar, zeta, v, u), Ybar(zetabar, zeta, v, u)), 1-Physics:-`*`(Physics:-`*`(H(zetabar, zeta, v, u), Y(zetabar, zeta, v, u)), Ybar(zetabar, zeta, v, u)), H(zetabar, zeta, v, u)], [Y(zetabar, zeta, v, u), Ybar(zetabar, zeta, v, u), -Physics:-`*`(Y(zetabar, zeta, v, u), Ybar(zetabar, zeta, v, u)), 1]])

vierbien = (Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = -Ybar(zetabar, Zeta, v, u), (1, 4) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = -Y(zetabar, Zeta, v, u), (2, 4) = 0, (3, 1) = H(zetabar, Zeta, v, u)*Y(zetabar, Zeta, v, u), (3, 2) = H(zetabar, Zeta, v, u)*Ybar(zetabar, Zeta, v, u), (3, 3) = 1-H(zetabar, Zeta, v, u)*Y(zetabar, Zeta, v, u)*Ybar(zetabar, Zeta, v, u), (3, 4) = H(zetabar, Zeta, v, u), (4, 1) = Y(zetabar, Zeta, v, u), (4, 2) = Ybar(zetabar, Zeta, v, u), (4, 3) = -Y(zetabar, Zeta, v, u)*Ybar(zetabar, Zeta, v, u), (4, 4) = 1}))




Setup(tetrad = rhs(vierbien = Matrix(%id = 18446744078213056502)), metric = ds2, mathematicalnotation = true, automaticsimplification = true, coordinatesystems = (X = [zetabar, zeta, v, u]), signature = "+++-")

[automaticsimplification = true, coordinatesystems = {X}, mathematicalnotation = true, metric = {(1, 1) = 2*H(X)*Y(X)^2, (1, 2) = 1+2*H(X)*Y(X)*Ybar(X), (1, 3) = -2*H(X)*Y(X)^2*Ybar(X), (1, 4) = 2*H(X)*Y(X), (2, 2) = 2*H(X)*Ybar(X)^2, (2, 3) = -2*H(X)*Ybar(X)^2*Y(X), (2, 4) = 2*H(X)*Ybar(X), (3, 3) = 2*H(X)*Y(X)^2*Ybar(X)^2, (3, 4) = 1-2*H(X)*Y(X)*Ybar(X), (4, 4) = 2*H(X)}, signature = `+ + + -`, tetrad = {(1, 1) = 1, (1, 3) = -Ybar(X), (2, 2) = 1, (2, 3) = -Y(X), (3, 1) = H(X)*Y(X), (3, 2) = H(X)*Ybar(X), (3, 3) = 1-H(X)*Y(X)*Ybar(X), (3, 4) = H(X), (4, 1) = Y(X), (4, 2) = Ybar(X), (4, 3) = -Y(X)*Ybar(X), (4, 4) = 1}]


gamma_[4, 1, 1] = 0

diff(Ybar(X), zeta)-(diff(Ybar(X), u))*Ybar(X) = 0


gamma_[4, 2, 2] = 0

diff(Y(X), zetabar)-(diff(Y(X), u))*Y(X) = 0


gamma_[1, 4, 4] = 0

(diff(Ybar(X), u))*Y(X)*Ybar(X)-Y(X)*(diff(Ybar(X), zeta))-Ybar(X)*(diff(Ybar(X), zetabar))-(diff(Ybar(X), v)) = 0


gamma_[2, 4, 4] = 0

(diff(Y(X), u))*Y(X)*Ybar(X)-Y(X)*(diff(Y(X), zeta))-(diff(Y(X), zetabar))*Ybar(X)-(diff(Y(X), v)) = 0


gamma_[3, 4, 4] = 0

0 = 0


gamma_[4, 4, 4] = 0

0 = 0


shearconditions := {diff(Y(X), zetabar)-(diff(Y(X), u))*Y(X) = 0, diff(Ybar(X), zeta)-(diff(Ybar(X), u))*Ybar(X) = 0, (diff(Y(X), u))*Y(X)*Ybar(X)-Y(X)*(diff(Y(X), zeta))-(diff(Y(X), zetabar))*Ybar(X)-(diff(Y(X), v)) = 0, (diff(Ybar(X), u))*Y(X)*Ybar(X)-Y(X)*(diff(Ybar(X), zeta))-Ybar(X)*(diff(Ybar(X), zetabar))-(diff(Ybar(X), v)) = 0}:



RicciT := proc (a, b) options operator, arrow; SumOverRepeatedIndices(Ricci[mu, nu]*e_[a, `~mu`]*e_[b, `~nu`]) end proc

proc (a, b) options operator, arrow; Physics:-SumOverRepeatedIndices(Physics:-`*`(Physics:-`*`(Physics:-Ricci[mu, nu], Physics:-Tetrads:-e_[a, `~mu`]), Physics:-Tetrads:-e_[b, `~nu`])) end proc


SlashD := proc (f, a) options operator, arrow; SumOverRepeatedIndices(D_[b](f)*e_[a, `~b`]) end proc

proc (f, a) options operator, arrow; Physics:-SumOverRepeatedIndices(Physics:-`*`(Physics:-D_[b](f), Physics:-Tetrads:-e_[a, `~b`])) end proc


SlashD(f(X), 1)

diff(f(X), zeta)-Ybar(X)*(diff(f(X), u))


SlashD(f(X), 2)

diff(f(X), zetabar)-Y(X)*(diff(f(X), u))


SlashD(f(X), 3)

(1+H(X)*Y(X)*Ybar(X))*(diff(f(X), u))-H(X)*((diff(f(X), zeta))*Y(X)+Ybar(X)*(diff(f(X), zetabar))+diff(f(X), v))


SlashD(f(X), 4)

-Y(X)*Ybar(X)*(diff(f(X), u))+Ybar(X)*(diff(f(X), zetabar))+(diff(f(X), zeta))*Y(X)+diff(f(X), v)



  simplify(RicciT(1, 2), shearconditions) = 0

H(X)*(diff(diff(Y(X), zeta), zetabar))*Ybar(X)-H(X)*Ybar(X)*Y(X)*(diff(diff(Ybar(X), u), zetabar))-H(X)*Ybar(X)^2*(diff(diff(Y(X), u), zetabar))-H(X)*Y(X)^2*(diff(diff(Ybar(X), u), zeta))-2*H(X)*Y(X)*Ybar(X)*(diff(diff(Y(X), u), zeta))+H(X)*Y(X)^2*Ybar(X)*(diff(diff(Ybar(X), u), u))-H(X)*Y(X)*(diff(diff(Ybar(X), u), v))+H(X)*Y(X)*Ybar(X)^2*(diff(diff(Y(X), u), u))-H(X)*(diff(diff(Y(X), u), v))*Ybar(X)+H(X)*(diff(Ybar(X), zetabar))^2+(-3*H(X)*Y(X)*(diff(Ybar(X), u))-(diff(H(X), u))*Y(X)*Ybar(X)+(diff(H(X), zeta))*Y(X)+(diff(H(X), zetabar))*Ybar(X)+diff(H(X), v))*(diff(Ybar(X), zetabar))+H(X)*(diff(Y(X), zeta))^2+(-4*H(X)*(diff(Y(X), u))*Ybar(X)-(diff(H(X), u))*Y(X)*Ybar(X)+(diff(H(X), zeta))*Y(X)+(diff(H(X), zetabar))*Ybar(X)+diff(H(X), v))*(diff(Y(X), zeta))+2*H(X)*Y(X)^2*(diff(Ybar(X), u))^2-Y(X)*(-(diff(H(X), u))*Y(X)*Ybar(X)+(diff(H(X), zeta))*Y(X)+(diff(H(X), zetabar))*Ybar(X)+diff(H(X), v))*(diff(Ybar(X), u))+2*(diff(Y(X), u))*Ybar(X)*(H(X)*(diff(Y(X), u))*Ybar(X)+(1/2)*(diff(H(X), u))*Y(X)*Ybar(X)-(1/2)*(diff(H(X), zeta))*Y(X)-(1/2)*(diff(H(X), zetabar))*Ybar(X)-(1/2)*(diff(H(X), v))) = 0



0 = 0

0 = 0



Why does the expand command cause the lhs to be zero?



When I write in maple the following:



What do I need to write to make maple make the operation that will evaluate the expression and show the following?




simplify(%) or evaluate(%) only shows it the same way it was inputted to start with.

I am trying separation of variables in Maple. I get an equation that has the form   

And now I want to tell Maple to assign the terms with 1/R in them to one variable, say eq21, and the term with 1/Z to second variable, say eq22 The idea is that I can later more easily work with each separate ode. 

I do not know to separate those apart. I could offcourse copy and paste by hand, but I want to automate this.

I tried match() and patmatch() but I am not seeing the way. Here is the code:

T:=  (r,z)-> Z(z)*R(r);
eq1:= diff(T(r,z),r$2)+1/r*diff(T(r,z),r)+diff(T(r,z),z$2);

#need now way to break the above into 2 different variables.

ps. I know I can do this:

T:=  (r,z)-> Z(z)*R(r);
eq1:= diff(T(r,z),r$2)+1/r*diff(T(r,z),r)+diff(T(r,z),z$2);

But this for me is not the right way to do it. I think there should be more algebraic way.


AOA... How are you all. I need the answer of the following question.


input in Maple: expand(exp(a+b)+exp(c+b))

output:  exp(a)*exp(b)+exp(c)*exp(b)


input in Maple: expand(exp(2a+b)+exp(3c+b))

output:  (exp(a))^2*exp(b)+(exp(c))^3*exp(b)

but i need exp(2a)*exp(b)+exp(3c)*exp(b)


PhD (Scholar)
Department of Mathematics

Hi Maple friends.

expand( (a+b)^2 );


expand( (a+b)^3 );


expand( (a+4)^4 )

a^4+16*a^3+96*a^2+256*a+256 (???)

Pascal's triangle shows that 'expand( (a+4)^4 )' should have resulted in a^4+4*a^3*b+6*a^2*b^2+4*a*b^3+b^4

Where are the b variables in Maple's solution?

Thanks in advance.

expand( (a+b)^n)




none  expands in  binomial  form.  Is there any way for Maple to generate  binomial  expansion of (a+b)^n  without


entering  manually.



Please tell me how to do about the following problem to me.




Then, what I obtained was (b*y)^k*k*y, not (b^k)*k*y^(k+1).

expand of the command brought the same answer not (b^k)*k*y^(k+1).

Please tell me what was wrong to my calculation.


Thank you in advance.





f:=Intat(1.0000000000000000000*(1.7969454312181156991*_f^1.2+1.80)^1.2/sqrt(-1.4974545260150964159*(8.9847271560905784954*_f^3+14.640368911168931285*_f^2+30.220202497712627297)^1.2), _f = 0);


I tried to use  value(f);  eval(f); simplify(f); expand(f), but non provide an answer, but return an integral unevaluated.


Is there a command to produce a  numerical result ?

I am trying to expand  a rational function that is in the form:

P(z) = (1 + z1)2 (1 + z)2· (r1z + r0 + r1z1)

to the form:


P(z) = r1z3 + (4r1 + r0)z2 + (7r1 + 4r0)z + (8r1 + 6r0)


+(7r1 + 4r0)z1 + (4r1 + r0)z2 + r1z3

Can someone show me how to do this please?



This is just a question on terminology. The name "combine" implies pulling terms together. Yet, when applied to something like sin(x)^2 it has the effect of expanding it:



Which seems counter-intutive to me. I tried first expand(r) but that did not expand it.

Fyi, in Mathematica the function to do the above is called


    1/2 (1 - Cos[2 x])

As Mathematica does not have a Combine[] function.

So, I am just wondering about the naming, that is all. I would never have thought first that a command called combine() will expand sin(x)^2.



Dear All,

I need your help, what function in Maple must be used to find the different form of this function

f := product((p*beta[1]*(t[i]/theta[1])^(beta[1]-1)*exp(-(t[i]/theta[1])^beta[1])/theta[1])^Y[i]*((1-p)*beta[2]*(t[i]/theta[2])^(beta[2]-1)*exp(-(t[i]/theta[2])^beta[2])/theta[2])^(1-Y[i]), i = 1 .. n)

into this function

1 2 3 Page 1 of 3