Items tagged with subs subs Tagged Items Feed



I am unable to use subs() command when using subscript : I'd like to replace YP__1 with dGx in the equation :

"Eq:= YP__1 = Y__2" (Eq:= YP1=Y2)


 so I have tried : subs({YP__1=dGx},Eq)


But it doesn't work... It give me : YP__1 = Y__2 and I would like to have dGx = Y__2


I have tried also with subs({YP[1]=dGx},Eq) but doesn't work too.


If I am not using subscript, for exemple : Eq:= YP1 = Y2


And do : subs({YP1=dGx},Eq)


That works great...


But I must use subscript __ because Eq is a result from ODEtools (convertsys).


Can you help me please ?


Thanks you very much.




I look for a maple function / or a piece of code which enable to do repeated substitutions. In other words, repeat substitutions until there is no more possible substitution.

How can I do to make repeated substitutions ?

Here a example I would like to solve with maple

Equation on which I would like to conduct variables changements: 

eq := sin(psi[1](t)+gamma0(t))*cf+sin(gamma0(t)+theta[1](t)+psi[1](t))*mf-sin(gamma0(t))*hf-cos(gamma0(t))*lf+xp[1](t) = sin(psi[2](t)+gamma0(t))*cf+sin(gamma0(t)+theta[2](t)+psi[2](t))*mf-sin(gamma0(t))*hf-cos(gamma0(t))*lf+xp[2](t)

Definition of variables changement :

ChgtVariables:=psi[1](t)=Psi[1](t) - theta[1](t) + gamma[1](t),psi[2](t)=Psi[2](t) - theta[2](t) + gamma[2](t);psi[3](t)=Psi[3](t) - theta[3](t) + gamma[3](t),psi[4](t)=Psi[4](t) - theta[4](t) + gamma[4](t),theta[1](t)=Theta[1](t)+gamma[1](t),theta[2](t)=Theta[2](t)+gamma[2](t),theta[3](t)=Theta[3](t)+gamma[3](t),theta[4](t)=Theta[4](t)+gamma[4](t);

Application of subs function:


The problem is that only one step of substitutions is conducted.

Here the expected result :

(sin(theta[1](t))-theta[2](t))*cf - (sin(gamma[1](t)-sin(gamma[2](t)))*mf  + xp[2](t) - xp[1](t) = 0

Thanks a lot for your hemp

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.

The Question: How to sketch a line in space?

vahid65 wanted to know how to sketch the line with equation (x-2)/3 = (y-1)/4 = (z-3)/3 in a three-dimensional space.

This question was answered using two different approaches that we will discuss.

The first approach, given by Preben Alsholm, suggested using these commands: solve, subs, and plots:-spacecurve.

Preben provided the following lines of code:

  1. {(x-2)/3 , (y-1)/4 , (z-3)/3} =~t;
  2. solve(%,{x,y,z});
  3. L:=subs(%,[x,y,z]);
  4. plots:-spacecurve(L,t=-5..5,thickness=3,color=red);

The first line sets the three expressions equal to t using the element wise operator =~.  This distributes the operation of equality over the elements of the set of expressions, forming a set of equations.

Result-1: {(x-2)/3=t, (y-1)/4=t, (z-3)/3=t}

The second line invokes the solve command. The solve command, solve(equations, variables), solves one or more equations or inequalities for their unknowns. So in this line, this command was used to solve each expression for its corresponding unknown.

Result-2: {(x= 2+3t, y=1+4t, z= 3+3t}

You may have noticed that the % symbol is used within the command. This symbol is referring to the equation label that was created chronologically last. 

The third line uses the subs command. The subs command, subs(x=a,expr), substitutes “a” for “x” in the expression expr. In this case, “a” is the reference to the equation label referenced by (%) and expr is the sequence of variables x,y,z. The square brackets around expr forms a list, and the replacement imposed by the subs command replaces each of the three names x, y, and z with their equivalents in the set of equations returned by the solve command.

Result-3: [2+3t,1+4t, 3+3t ]

Finally the last line uses the plots:-spacecurve function.  This function, spacecurve(sc,r,opts),  graphs a parametrically defined curve in three-dimensional Cartesian space. 

In this example the first parameter, sc, is replaced by L since L has the properties of a list. The parameter  r is an equation containing the parameter name and the parameter range; here it is the equation t=-5..5. Last but not least, the opts parameter (which is optional) gives the user the opportunity to specify the optional properties of the graph, properties such as thickness and color of the space curve. 

Result 4: 


Another contributer, Carl Love, suggested that these commands could be combined using the zip function, zip( f, u, v), which is an unusual application of it. The zip command applies elementwise to corresponding members of the two lists u and v, the binary function f, creating a new list r, whose members are f(uk,vk).

Carl provided the following code:

plots:-spacecurve(  zip(solve, [(x-2)/3 , (y-1)/4 , (z-3)/3] =~ t, [x,y,z]),  t= -5..5, thickness= 3, color= red, axes= normal);


In this case zip is applying solve to u, a list of equations, and v, a list of variables. The equations in u are those in Result-1. The zip function returns the solution of each equation for the indicated variable, that is, the new list r is the list in Result-3. This list is the first argument of plots:-spacecurve. Finally, the parameter range and opts are up to the user’s preferences.

A second approach was suggested by Kitonum. The difference between this approach and the first one is that here we are not using the solve command. Instead, we are treating the line as an intersection of two planes.

Kitonum's code is as follows:

  1. L := [(x-2)*(1/3), (y-1)*(1/4), (z-3)*(1/3)]:
  2. plots[intersectplot](L[1]-L[2], L[2]-L[3], x = -4 .. 4, y = -4 .. 4, z = -4 .. 4, linestyle = 1, thickness = 3, axes = normal, orientation = [60, 75], view = [-1 .. 3, -4 .. 2, -1 .. 4]);

The first statement initializes a list L that contains all the desired expressions in the given symmetric form of the line.

In the second statement Kionum used the plots[intersectplot] command. This command graphs, in three-dimensional Cartesian space, the intersection of a pair of surfaces. This example uses the calling sequence: intersectplot(expr1, expr2, x=a..b, y=c..d, z= e..f, options)

What are expr1 and expr2 used in Kitonum’s solution? The pairwise differences of L[1] and L[2], and L[2] and L[3] are planes, the intersection of which is the desired line in space.

expr1 = L[1] – L[2] = (x-2)*(1/3)- (y-1)*(1/4)

expr2= L[2] - L[3] = (y-1)*(1/4)-(z-3)*(1/3)

The variables x,y, and z are the coordinate names and define the axes, whereas a, b, c, d, e, f define the ranges. In this case they were taken as -4 or 4.

In the options parameter Kitonum used linestyle, thickness, axes, orientation, and  view. The help page “plot3d,option” details these and other options that apply.


This blog was written by our intern Pia under the supervision of Dr. Robert Lopez. We both hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please let us know. 

question1 := b(t)*(diff(c(t), t))*(diff(a(t), t))+a(t)*(diff(b(t), t))

how to subs(b(t)=0, question1) result in a(t)*(diff(b(t), t)) ?

in fact b(t) = 0 but diff(b(t), t) != 0 

f=x^2.  It's easy to compute the fouier transform. F(y)=fourier(f,x,y).

However, I want to do more. replace the variable y with a new formula g(z)=z^2.

I tried  "subs(y=g,F)". But failed. Need your help.


f := x^2



F := fourier(f, x, y)

-2*Pi*Dirac(2, y)


g := z^2



subs(y = g, F)

-2*Pi*Dirac(2, y) = z^2







I have an expression like this:

a:= b(t)+diff(b(t),t)+diff(b(t),t$2)+diff(b(t),t$3)+...:


I want to substitute diff(b(t),t) with b_symbol_diff. I dont know how many more differentials are in the expression.

If I use subs(diff(b(t),t)=b_symbolic_diff,a)

maple also substitutes in diff(b(t),t$2). Because b_symbol_diff is not a function of t the higher order differentials are zero.

Is there a way to tell maple not to substitute those expressions that are enclosed in diff()?

I need this because I want to calculate the Jacobian of a vector and VectorCalculus[Jacobian]() does not accept functions.

Thanks in advance!

how to transform this differential equation with a substitution?

f := diff(u(x),x$2) + p(x)*diff(u(x),x)+q(x)*u(x)=0;
transformed := subs(x=1/t, f);


f := diff(u(x),t$2)*diff(t,x$2) + p(x)*diff(u(x),t)*diff(t,x)+q(x)*u(x)=0;



x = 1/t
dx/dt = -1/t^2
d2x/dt2 = 2/t^3

diff(u(t),t$2)*1/(2/t^3) + p(t)*diff(u(t),t)*1/(-1/t^2)+q(t)*u(t)

f := u2*1/(2/t^3) + p(t)*u1*1/(-1/t^2)+q(t)*u;
f2 := collect(f/t^3*2, {u2, u1, u});
subs(u2 = diff(u(t),t$2), subs(u1 = diff(u(t), t), subs(u=u(t), f2)));

but not equal to below which is in book, is this equation wrong in book?

f := diff(u(t), t$2) + (2/t-1/t^2*p(1/t))*diff(u(t),t) + 1/t^4*q(1/t)*u(t) = 0;


a1:= f(x) :
> T1 :=simplify((taylor(a1,x=alpha,N+3))):
> E1:=subs([seq(((D@@i)(f))(alpha) = 0,i=1..m-1),f(alpha)=0,x=e[n]+alpha],T1):
> g1 :=(convert(simplify(series((E1,e[n]=0,N))),polynom));



I would like to plot coupled elliptic parametric curves.

I have a problem in the for loop in my code. The index i of the phi variable is not incremented.

Here my code:

for i to 4
end do;

The result looks like this :

u[1](t) -> - L cos(w t)
v[1](t) -> H sin(w t + phi[i])

u[2](t) -> - L cos(w t)
v[2](t) -> H sin(w t + phi[i])

u[3](t) -> - L cos(w t)
u[3](t) -> H sin(w t + phi[i])

u[4](t)  -> - L cos(w t)
u[4](t)  -> H sin(w t + phi[i])

And i would have prefered :

u[1](t) -> - L cos(w t)
v[1](t) -> H sin(w t + phi[1])

u[2](t) -> - L cos(w t)
v[2](t) -> H sin(w t + phi[2])

u[3](t) -> - L cos(w t)
v[3](t) -> H sin(w t + phi[3])

u[4](t)  -> - L cos(w t)
v[4](t)  -> H sin(w t + phi[4])

Do you have ideas how I can obtain iteration on my phi variable ?

Thank you for your help.

To check one of the MythBusters TV episodes, i.e., the fall of a mannequin (80 Kg) from a plane at an altitude of 1200 m in 31 s, with Maple13 (Windows Vista) I solved the following differential equation with initial conditions:

> de:= m*(D@@2)(x)(t) = m*g - k*(D(x)(t))^2:

> ini:= (x(0) = 0, D(x)(0) = 0):

> X:= unapply(rhs(expand(dsolve({de,ini}))),t);

     X := proc (t) options operator, arrow; -m^(1/2)*g^(1/2)*t/k^(1/2)-m*ln(2)/k+m*ln(exp(2*g^(1/2)*k^(1/2)*t/m^(1/2))+1)/k end proc

1) Posing: V0 = sqrt(m * g / k),  T = sqrt(m/(g*k)) one has  V0*T = m/k. I want to have:

   > Xxb:= t -> V0*(- t + T * ln((exp(2*t/T) + 1)/2) ); # m.

 How to obtain this equivalent equation  Xxb(t), without retyping the equation of  X(t) ? With subs , convert or simplify  applied to  X(t), Maple 13 gives error messages.

2) Taking the derivative of  Xxb(t), one find :

     V := proc (t) options operator, arrow; V0*(exp(2*t/T)-1)/(exp(2*t/T)+1) end proc.

How to transform it to V = V0 tanh(t/T) ?

Again, subs , convert or simplify  seem not working, even with  assume(t, real), assume(T, real) ! I know simplify is a difficult task, but Maple should recognize a tanh !

Thank you in advance for any suggestion.

( Note that with m = 80 Kg, g = 9.81 m/s^2 and k = 0.267482 Kg/m, which correspond to a speed limit of V0 =195 km/h, on find t(1200m) = 26 s, instead of 31 s ).

i am new on maple while usig maple i have to substitute a general value in an equation but could not do it like

> restart;
> taylor(f(x), x = gamma);

i typed this and want to replace x-gamma with e[n] which is easy and i did it but whn i want to substitute D(f)(gamma),(D@@2)(f)(gamma) and so on by (D@@k)(f)(gamma)=k!*c[k]*f(gamma) then i could not understand how can i do 2nd part 
pls help in this i m very thanlful to you


after following a example , got error


               1   / d      \    1        2     2
               - m |--- x(t)|  - - m omega  x(t)
               2   \ dt     /    2              
Error, (in Mechanics:-LagrangeEqs) invalid input: subs received subst1, which is not valid for its 1st argument
Error, invalid input: Mechanics:-GeneralSol expects its 1st argument, eqs, to be of type list, but received eqs
Error, invalid input: rhs received sol, which is not valid for its 1st argument, expr


Mechanics := module()
export SetVariables, LagrangeEqs, GeneralSol;
option package;
local subst1, subst2, varN, t;

SetVariables = proc( vars:: list, time )
local i;
t := time;
varN := nops( vars );
subst1 := {};
subst2 := {};
for i from 1 to var N do
subst1 := subst1 union
{vars[i](t) = q[i], diff(vars[i](t), t) = v[i]};
subst2 := subst2 union
{q[i] = vars[i](t), v[i] = diff(vars[i](t), t)};
end do;
print( subst1 );
print( subst2 );
end proc;

LagrangeEqs := proc (L)
local i, l1, term1, term2;
l1 := subs(subst1, L):
for i to varN do
term1 := [seq(diff(subs(subst2, diff(l1, v[i])), t), i = 1..varN)]:
term2 := [seq(subs(subst2, diff(l1, q[i])), i = 1..varN)]:
end do;
[ seq(simplify(term1[i]-term2[i]) = 0, i = 1..varN) ];
end proc;

RayleighEqs := proc(L, R)
local i, l1, r1, term1, term2, term3;
l1 := subs( subst1, L ):
r1 := subs( subst1, R ):
for i from 1 to varN do
term1:=[seq(diff(subs(subst2, diff(l1, v[i])), t), i=1..varN)]:
term2:=[seq(subs(subst2, diff(l1, q[i])), i=1..varN)]:
term3:=[seq(subs(subst2, diff(r1, v[i])), i=1..varN)]:
end do:
[ seq(simplify(term1[i]-term2[i]+term3[i]), i=1..varN) ];
end proc;

LagrEqsII := proc( L, Q::list )
local i, l1, term1, term2;
l1 := subs(subst1, L):
for i to varN do
term1 := [seq(diff(subs(subst2, diff(l1, v[i])), t), i = 1 .. varN)]:
term2 := [seq(subs(subst2, diff(l1, q[i])), i = 1 .. varN)]:
end do;
[seq(simplify(term1[i]-term2[i]) = Q[i], i = 1 .. varN)];
end proc;

LagrEqsIII := proc (L, R, Q::list)
local i, l1, r1, term1, term2, term3;
l1 := subs(subst1, L):
r1 := subs(subst1, R):
for i to varN do
term1 := [seq(diff(subs(subst2, diff(l1, v[i])), t), i = 1 .. varN)]:
term2 := [seq(subs(subst2, diff(l1, q[i])), i = 1 .. varN)]:
term3 := [seq(subs(subst2, diff(r1, v[i])), i = 1 .. varN)]:
end do;
[seq(simplify(term1[i]-term2[i]+term3[i]) = Q[i], i = 1 .. varN)];
end proc;

GeneralSol := proc (eqs::list)
local i, initconds, eqs2;
initconds := NULL:
eqs2 := eqs[][]:
for i to varN do
initconds:=VarNames[i](0)=q[i], (D(VarNames[i]))(0)=v[i], initconds:
end do;
dsolve({initconds, eqs2});
end proc;

end module;

LibLocation := cat("c:\\Temp");
Save(Mechanics, LibLocation);
save(Mechanics, "c:\\Temp\\Mechanics.m");
read "c:\\Temp\\Mechanics.m";


SetVariables([x], t);
L := (1/2)*m*diff(x(t), t)^2 - (1/2)*m*omega^2 * x(t)^2;
eqs := LagrangeEqs(L);
sol := GeneralSol( eqs );
X := unapply( rhs(sol), t );



dsol := dsolve([eq2=diff(s(t),t), eq3=diff(s(t),t), eq4=diff(s(t),t)], [a(t),b(t),c(t)]);
eval(subs(t(t)=t,subs(_C1(t) = _C1, subs(_C2(t) = _C2, subs(_C3(t) = _C3, sol1)))));


after subs t(t) = t , it still  have t(t)

in harmonic ocillator version, why it has error after it dsolve?

Setup(mathematicalnotation = true):

Qs is Qss*cos(m*t+phi);

H := 1/(8*Pi*c^2)*Summation(Commutator(diff(Qs*cos(w*t+phi),t)*diff(conjugate(Qs*cos(w*t+phi)),t)+w^2*Qs*cos(w*t+phi)*conjugate(Qs*cos(w*t+phi))),ks=1..3)-1/c*(Summation(conjugate(Qs*cos(w*t+phi)),ks=1..3));


H := 1/(8*Pi*c^2)*Summation(Commutator(diff(Qs,t)*diff(conjugate(Qs),t)+w^2*Qs*conjugate(Qs)),ks=1..3);

#Qs = p, Ps := Pss*sin(m*t+phi) Ps = qs

i use

H := 1/(8*Pi*c^2)*Summation(Commutator(diff(Qs*cos(w*t+phi),t)*diff(conjugate(Qs*cos(w*t+phi)),t)+w^2*Qs*cos(w*t+phi)*conjugate(Qs*cos(w*t+phi))),ks=1..3)-1/c*(Summation(conjugate(Qs*cos(w*t+phi)),ks=1..3));

 HJ := subs(Qs= diff(f(q,P,t), q), H);

H:=subs( f(q,P,t) = f1(q) + f2(t), HJ);

Hello to you all,

I have this DE

but when I try to change the variable

I get this

>algsubs(r(t) = 1/u(t), diff(diff(r(t), t), t)-k/r(t) = -K/r(t)^2);

Why is it not done for the rest of the terms.  Is there a more easy way to do it.  Take into account that I cannot use dsolve because it is in an course in integral.


Thank in advance for your help.


Mario Lemelin
Maple 2015 Ubuntu 14.04 - 64 bits
Maple 2015 Win 10 Pro - 64 bits messagerie : téléphone :  (819) 376-0987
1 2 3 4 5 6 Page 1 of 6