ecterrab

12964 Reputation

24 Badges

17 years, 325 days

MaplePrimes Activity


These are answers submitted by ecterrab

Hi,

Suppose a set of N vectors where there may be one of them parallel to one another: their cross product is zero. So, in Maple, for j to N-1, for k from j+1 to N, if V[j] &x V[k] = 0 then V[j] is parallel to V[k]. You can perform this loop operation either using VectorCalculus or Physics:-Vectors.

Edgardo S. Cheb-Terrab 
Physics, Maplesoft

 

Hi,
Yes, in Maple 17 you can do substitutions of tensors of the form you mention, taking into account free and dummy indices the same way we do when computing with paper and pencil. You need to update your Physics library with the latest one, available for download at the Maplesoft Physics: Research & Development webpage. The command you use to do these substitutions, SubstituteTensor, is currently a Physics:-Library command, part of an upcomming more general Physics:-Substitute command, to handle also tensorial subexpressions within noncommutative products similar to what algsubs and simplify/siderels do with commutative nontensorial products.

 

with(Physics); with(Library)

Define(A, B, C, F, G)

`Defined objects with tensor properties`

 

{A, B, C, F, G, Physics:-Dgamma[mu], Physics:-Psigma[mu], Physics:-d_[mu], Physics:-g_[mu, nu], Physics:-KroneckerDelta[mu, nu], Physics:-LeviCivita[alpha, beta, mu, nu]}

(1)

A[mu] = Physics:-`*`(Physics:-`*`(G[nu, alpha], A[`~alpha`]), F[mu, `~nu`])

A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`]

(2)

The repeated and free indices of the lhs and rhs of (2)

Check(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`], all)

`The repeated indices per term are: `[{`...`}, {`...`}, `...`]*`; the free indices are: `*{`...`}

 

([{}], {mu}) = ([{alpha, nu}], {mu})

(3)

The easy case

SubstituteTensor(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`], A[mu])

G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`]

(4)

The free index in the target expression is not mu but nu

SubstituteTensor(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`], A[nu])

G[beta, alpha]*A[`~alpha`]*F[nu, `~beta`]

(5)

Distinction between covariant and contravariant indices

SubstituteTensor(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`], A[`~nu`])

G[beta, alpha]*A[`~alpha`]*F[`~nu`, `~beta`]

(6)

The index nu found repeated in the rhs of the substitution equation (2) apears also repeated in the following target expression

Physics:-`*`(A[nu], A[`~nu`])

A[nu]*A[`~nu`]

(7)

SubstituteTensor(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`], A[nu]*A[`~nu`])

G[beta, alpha]*A[`~alpha`]*F[nu, `~beta`]*G[lambda, kappa]*A[`~kappa`]*F[`~nu`, `~lambda`]

(8)

Check(%, all)

`The repeated indices per term are: `[{`...`}, {`...`}, `...`]*`; the free indices are: `*{`...`}

 

[{alpha, beta, kappa, lambda, nu}], {}

(9)

Substitute (2) in the rhs of (2) itself

SubstituteTensor(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`], rhs(A[mu] = G[nu, alpha]*A[`~alpha`]*F[mu, `~nu`]))

G[nu, alpha]*G[kappa, beta]*A[`~beta`]*F[`~alpha`, `~kappa`]*F[mu, `~nu`]

(10)

Check(%, all)

`The repeated indices per term are: `[{`...`}, {`...`}, `...`]*`; the free indices are: `*{`...`}

 

[{alpha, beta, kappa, nu}], {mu}

(11)

The example you posted as a question

Physics:-`*`(A[mu], B[`~mu`])

A[mu]*B[`~mu`]

(12)

A[alpha] = Physics:-`*`(Physics:-`*`(C[alpha], C[mu]), C[`~mu`])

A[alpha] = C[alpha]*C[mu]*C[`~mu`]

(13)

SubstituteTensor(A[alpha] = C[alpha]*C[mu]*C[`~mu`], A[mu]*B[`~mu`])

C[mu]*C[nu]*C[`~nu`]*B[`~mu`]

(14)

``


Download SubstituteTensor.mw

Edgardo S. Cheb-Terrab
Physics, Maplesoft

Hi
allvalues is the natural command to use in that - when solve can rewrite the RootOf expression free of RootOf - you will get rid of it.

There are other situations though, where you would like to understand the RootOf expression without RootOfs around, or allvalues is of no help because solve cannot rewrite the expression without them. This is a typical situation when working with differential equations. A command helpful in these cases, not so well known, is DEtools[remove_RootOf].

Edgardo S. Cheb-Terrab
Physics, Maplesoft

You can try other commands of PDEtools as PolynomialSolutions, FunctionFieldSolutions and mainly InvariantSolutions combined with its optional arguments. It would also help seeing the PDE you want to solve - sometimes one can see a change of variables that helps.

Edgardo S. Cheb-Terrab
Physics, Maplesoft


Hi. My suggestion was for you to do these computations using the Physics package, not the old 'tensor' package. Here it is how.

with(Physics):

Example with the Schwarzschild metric in spherical coordinates: instead of using Setup (you can, but you do not need to), set the spacetime metric directly from the the metric command g_

g_[sc]

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

 

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

 

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

 

`Parameters: `[m]

 

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

(1)

The Kretschmann scalar is given by

K := Riemann[alpha, beta, gamma, delta]^2

Physics:-Riemann[alpha, beta, delta, gamma]*Physics:-Riemann[`~alpha`, `~beta`, `~delta`, `~gamma`]

(2)

Simplify(K);

48*m^2/r^6

(3)

The above concerns your fist post, and to see the Ricci tensor you can always

Ricci[]

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

(4)

Now in your second post, however, you do not use the Physics package as suggested but the old 'tensor' package. The computations with the old 'tensor' are overly complicated and that package is by now obsolete.

 

My suggestion in the previous replies were computing this using Physics, it is really simpler.

 

Copying the metric info from the worksheet attached in your last reply and pasting here:

g00 := (1-2*m/r)^(1+q)

(1-2*m/r)^(1+q)

(5)

g11 := -(1-2*m/r)^(-q)*(1-sin(theta)^2*m^2)^(-q*(2+q))/(1-2*m/r)

-(1-2*m/r)^(-q)*(1-sin(theta)^2*m^2)^(-q*(2+q))/(1-2*m/r)

(6)

g22 := -(1-2*m/r)^(-q)*(1-sin(theta)^2*m^2)^(-q*(2+q))*r^2

-(1-2*m/r)^(-q)*(1-sin(theta)^2*m^2)^(-q*(2+q))*r^2

(7)

g33 := -(1-2*m/r)^(-q)*(1-sin(theta)^2*m^2)^(-q*(2+q))*r^2*sin(theta)^2

-(1-2*m/r)^(-q)*(1-sin(theta)^2*m^2)^(-q*(2+q))*r^2*sin(theta)^2

(8)

Noticing now that your coordinates [t, r, theta, phi] are the same introduced above with the Schwarzschild metric where x[0] = x[4] = t, you can now re-enter the metric in different ways, see Physics:-Setup  .For instance, to avoid disquisitions about the ordering of the coordinates, enter the metric directly as the square of the line element

ds2 := g00*d_(t)^2+g11*d_(r)^2+g22*d_(theta)^2+g33*d_(phi)^2

Setup(metric = ds2)

 

That is all.

 

To compute the Kretschmann scalar for this metric, just Simplify(K) again, and no need to re-enter, re-construct or re-define the Riemann tensor or anything else.

KScalar := Simplify(K)

 

Regarding the Schwarzschild limit when q = 0 mentioned in your worksheet, this is the metric with q <> 0

g_[]

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

(9)

(If you want to see the inversse of the metric, just enter g_[~mu, ~nu, matrix]. )

This is the value of g[mu, nu] at q = 0 :

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

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

(10)

This is the value of the K scalar when q = 0

simplify(eval(KScalar, q = 0))

48*m^2/r^6

(11)

And this is the KScalar for q <> 0 (a bit of a wallpaper even after simplifying in size)

simplify(KScalar, size)

4*((r-2*m)/r)^(2*q)*((cos(theta)+1)*((2+q)*m-r)^2*(cos(theta)^2*m^2-m^2+1)^4*(-(1/2)*r+m)*(cos(theta)-1)*(2+q)^2*cos(theta)^2*m^2*q^2*r*(cos(theta)^2*m^2-m^2+1)^(2*q^2+4*q-2)+(cos(theta)+1)*(cos(theta)^2*m^2-m^2+1)^3*(1+q)^2*(-(1/2)*r+m)*(cos(theta)-1)*(2+q)^2*cos(theta)^2*m^4*q^2*r*(cos(theta)^2*m^2-m^2+1)^(2*q^2+4*q-1)+(7/4)*(((2+q)^2*(q^2+(16/7)*q+12/7)*m^4-(4/7)*r*(2+q)*(q^2+2*q+2)*(q^2+3*q+3)*m^3+(4/7)*(q^8+8*q^7+22*q^6+(43/2)*q^5+(5/2)*q^4+(19/2)*q^3+26*q^2+10*q+3)*r^2*m^2-(4/7)*(q^6+6*q^5+10*q^4+(1/2)*q^3-(9/2)*q^2+(11/2)*q+1/2)*(2+q)*q*r^3*m+(1/7)*q^2*r^4*(q^4+4*q^3+2*q^2-4*q+2)*(2+q)^2)*m^6*cos(theta)^8-4*((2+q)^2*(q^2+(16/7)*q+12/7)*m^6-(3/7)*(q^4+(16/3)*q^3+(40/3)*q^2+16*q+8)*(2+q)*r*m^5+(((89/14)*q^5+(48/7)*q^3+(16/7)*q^4+(88/7)*q^2+12/7+(16/7)*q^7+(2/7)*q^8+(44/7)*q^6+(40/7)*q)*r^2-(2+q)^2*(q^2+(16/7)*q+12/7))*m^4-(2/7)*((q^6+6*q^5+10*q^4+(3/4)*q^3-(11/4)*q^2+(17/2)*q+1)*q*r^2-q^4-25*q-(13/2)*q^3-(39/2)*q^2-12)*(2+q)*r*m^3+(1/14)*(q^2*(q^4+4*q^3+2*q^2-4*q+3)*(2+q)^2*r^2+4*q^6+18*q^5-5*q^4-123*q^3-190*q^2-88*q-24)*r^2*m^2-(2/7)*(2+q)*(q^4+(7/2)*q^3-(3/2)*q^2-(41/4)*q-5/4)*q*r^3*m+(1/14)*q^2*r^4*(q^2+2*q-4)*(2+q)^2)*m^4*cos(theta)^6+6*((2+q)^2*(q^2+(16/7)*q+12/7)*m^8-(2/7)*r*(2+q)*(q^4+6*q^3+18*q^2+24*q+12)*m^7+(((232/21)*q^2+(16/21)*q^7+(158/21)*q^3+(44/21)*q^6+(18/7)*q^4+(40/7)*q+(7/3)*q^5+(2/21)*q^8+12/7)*r^2-2*(2+q)^2*(q^2+(16/7)*q+12/7))*m^6-(2/21)*((q^6+6*q^5+10*q^4+(3/2)*q^3+(9/2)*q^2+22*q+3)*q*r^2-4*q^4-29*q^3-103*q^2-146*q-72)*(2+q)*r*m^5+((1/42)*q^2*(q^4+4*q^3+2*q^2-4*q+8)*(2+q)^2*r^4+(-24/7+(4/7)*q^5+(4/21)*q^6-(331/21)*q^3-(478/21)*q^2-(248/21)*q-(23/7)*q^4)*r^2+(2+q)^2*(q^2+(16/7)*q+12/7))*m^4-(4/21)*(q*(q^4+3*q^3-9*q^2-(101/4)*q-13/4)*r^2+37*q+(11/2)*q^3+(1/2)*q^4+18+(49/2)*q^2)*(2+q)*r*m^3+(1/21)*r^2*(q^2*(q^2+2*q-10)*(2+q)^2*r^2+3*q^5+51*q^4+189*q^3+262*q^2+128*q+36)*m^2-(1/21)*q*r^3*(2+q)*(q^3+31*q^2+65*q+7)*m+(1/3)*q^2*r^4*(2+q)^2)*m^2*cos(theta)^4-4*((2+q)^2*(q^2+(16/7)*q+12/7)*m^7-(1/7)*r*(2+q)*(q^4+8*q^3+32*q^2+48*q+24)*m^6+((12/7+(3/14)*q^5+(16/7)*q^4+(52/7)*q^3+(72/7)*q^2+(40/7)*q)*r^2-2*(2+q)^2*(q^2+(16/7)*q+12/7))*m^5-(1/14)*((q^4+15*q^3+30*q^2+4*q)*r^2-2*q^4-22*q^3-114*q^2-188*q-96)*(2+q)*r*m^4+((3/14)*q^2*r^4*(2+q)^2+(-(76/7)*q-(43/14)*q^4-(121/7)*q^2-24/7-(3/14)*q^5-(157/14)*q^3)*r^2+(2+q)^2*(q^2+(16/7)*q+12/7))*m^3+(1/14)*((q^4+23*q^3+49*q^2+7*q)*r^2-6*q^3-50*q^2-92*q-48)*(2+q)*r*m^2-(5/14)*(q^2*(2+q)^2*r^2-(3/5)*(1+q)*(q^3+6*q^2+16*q+8))*r^2*m-(3/14)*q*r^3*(2+q)*(1+q))*(m-1)*(m+1)*m*cos(theta)^2+((2+q)^2*(q^2+(16/7)*q+12/7)*m^6-(4/7)*r*(2+q)*(1+q)*(q^2+6*q+6)*m^5+(((10/7)*q^4+(40/7)*q+12/7+(46/7)*q^3+(72/7)*q^2)*r^2-2*(2+q)^2*(q^2+(16/7)*q+12/7))*m^4-(8/7)*(((1/4)*q+q^3+(9/4)*q^2)*r^2-(11/2)*q^2-11*q-(1/2)*q^3-6)*(2+q)*r*m^3+((2/7)*q^2*r^4*(2+q)^2-(2/7)*(1+q)*(q^3+6*q^2+20*q+12)*r^2+(2+q)^2*(q^2+(16/7)*q+12/7))*m^2+(2/7)*r*(2+q)*(1+q)*(q*r^2-8*q-12)*m+(12/7)*r^2*(1+q)^2)*(m-1)^2*(m+1)^2)*(cos(theta)^2*m^2-m^2+1)^(2*q*(2+q)))*m^2/((cos(theta)^2*m^2-m^2+1)^4*(-(1/2)*r+m)^2*r^6)

(12)

For more information please check the help pages for g_, Ricci, Riemann and Setup.

``

 

Download KretschmannScalar.mw


Edgardo S. Cheb-Terrab
Physics, Maplesoft

Hi
Note that in Maple 16 you have the same functionality (and furthermore) within the distributed Physics package.

Edgardo S. Cheb-Terrab
Physics, Maplesoft

Hi
Note also there is now access to the version of Physics under development, available for download at http://www.maplesoft.com/products/maple/features/physicsresearch.aspx, with adjustments and fixes as they are ready, including the one I mentioned in my previous reply for this problem you posted.

Edgardo S. Cheb-Terrab
Physics, Maplesoft

Hi
Note also tthere is now access to the version of Physics under development, available for download at http://www.maplesoft.com/products/maple/features/physicsresearch.aspx, including adjustments and fixes as they are ready.

Edgardo S. Cheb-Terrab
Physics, Maplesoft

Hi Peter137
A fix to the problem you posted is now in place, and new: now there is access to the version of Physics under development, available for download at http://www.maplesoft.com/products/maple/features/physicsresearch.aspx. This version includes post 17.01 material, adjustments, fixes, and novelties as they are ready. In the page you can also present your suggestions, etc

Edgardo S. Cheb-Terrab
Physics, Maplesoft


dsolve's solution is correct:

ode := [diff(u(t),t)-f(t)=0, diff(f(t),t)+t*f(t)=0, diff(f(t),t$2)+(t*sin(a)*sin(b))^2*f(t)=0];

[diff(u(t), t)-f(t) = 0, diff(f(t), t)+t*f(t) = 0, diff(diff(f(t), t), t)+t^2*sin(a)^2*sin(b)^2*f(t) = 0]

(1)

dsolve(ode);

{f(t) = 0, u(t) = _C1}

(2)

This simplification (see ?PDEtools/casesplit) explains dsolve's solution:

PDEtools:-casesplit(ode);

`casesplit/ans`([diff(u(t), t) = 0, f(t) = 0], [])

(3)

You can arrive at the same result by hand. Take the first equation, and you have the solution for f(t) as a function of u(t)

isolate(ode[1], f(t));

f(t) = diff(u(t), t)

(4)

Remove now f(t) from the system

eval(ode, %);

[0 = 0, diff(diff(u(t), t), t)+t*(diff(u(t), t)) = 0, diff(diff(diff(u(t), t), t), t)+t^2*sin(a)^2*sin(b)^2*(diff(u(t), t)) = 0]

(5)

Take the second equation

isolate(%[2], diff(u(t),t,t));

diff(diff(u(t), t), t) = -t*(diff(u(t), t))

(6)

Substitute into the third equation

factor(PDEtools:-dsubs(%, %%[3]));

(diff(u(t), t))*(t^2*sin(a)^2*sin(b)^2+t^2-1) = 0

(7)

So, the solution for u(t) is

dsolve(%);

u(t) = _C1

(8)

Then from (4) the solution for f(t) is 0.

 

Download dsolve_solution_is_c.mw

Edgardo S. Cheb-Terrab
Physics, Maplesoft

The copy and paste issue you mention got resolved in Maple 16. Regarding your other question, ?algsubs and ?simplify,siderels can do what you want.

Edgardo S. Cheb-Terrab
Physics, Maplesoft

Hi

Quoting wikipedia, "In quantum field theory a product of quantum fields, or equivalently their creation and annihilation operators, is usually said to be normal ordered (also called Wick order) when all creation operators are to the left of all annihilation operators in the product.". That is what Maple does if you call Physics:-Normal, and Physics:-Expand calls Physics:-Normal, and expand calls Physics:-Expand. Hence Normal(am1*ap2) -> ap2*am1.

Besides QFT, the reason for normalizing in computer algebra is zero recognition, for example am1*ap2 - ap2*am1 does not return zero, because the normalization (it could but it) is not happening through `*`, so that you can work with them in the order you want, but then there must be a way to normalize this expression noting that it is equal to zero, and that is what you achieve with all of Normal, Expand, expand, Simplify, simplify.

All this makes sense to me.

As you say you can also program your own operators but If all you want is to expand expressions without normalizing them (ie without identifying subexpressions that are qual to zero) it may be simpler for you to program the expansion of products of sums of these operators instead of programming the operators themselves.

Edgardo S. Cheb-Terrab
Physics, Maplesoft 


Yes you can perform functional differentiation with anticommutative functions, or with tensor quantum operators for instance, anticommutative or not.

 

Now your example had some invalid input as pointed in another reply. So assuming you meant product,

with(Physics):

Setup(anticommutativeprefix = {Q});

Fix your input say taking the product of two anticommutative functions

G := Intc(Q2(x) * Q1(y),x,y);

Int(Int(-Physics:-`*`(Q1(y), Q2(x)), x = -infinity .. infinity), y = -infinity .. infinity)

(1)

Fundiff(G, Q1(u));

-(Int(Q2(x), x = -infinity .. infinity))

(2)

 

Edgardo S. Cheb-Terrab
Physics, Maplesoft

Download FundiffAnticommutati.mw

Hi

I only read your post now - note you can always send me an email through this forum. I revised now my posts of years ago in connection with an email I received today from people working in Orsay - same question. Then gave a look on the web. 

I understand there is no solving method whatsoever in what this guy presented in these papers. The paper also presents a claim about a new method to solve a problem not solved before, but then does not show one single example of the method working. 

Abel equations are a difficult problem. Progress happened between 1998 and 2004  (see the page ?dsolve,references) but I've seen nothing beyond what we presented there, that is mainly the AIR class and an algorithm to solve it systematically that is implemented in Maple within its dsolve command. In recent years we added some new solvable classes that are of type AIA (as explained in the papers listed in ?dsolve,references), typically one or two at each new Maple release, but that is it.


Edgardo S. Cheb-Terrab
Physics, Maplesoft 

Hi

I believe the solution to your problem may be found either in the readme files of GRTensor or asking Kayl directly.

But another question brings me here: are you aware that Maple provides (native) support for computation with tensors in curved spaces? It's true that GRTensor has been a magnificent package for years. I have the impression, however, that what you find in Maple nowadays goes beyond that. The Maple Physics package has builtin commands for performing most of the computations you do in General Relativity (GR), using tensor notation in curved spacetimes, and I'd say in a more natural way than GRTensor, appart from providing functionality not available in GRTensor. And for the less standard functionality you'd eventually need, you still have Maple DifferentialGeometry package (differential forms notation), a vaste and wide range package specialized in GR among other things. The Physics and DifferentialGeometry packages share the same library of solutions to Einstein's equations (metrics, this is equivalent to loading a metric in GRTensor); in turn this library found within Maple is already noticeably larger than the library of metrics (solutions to Einstein's equations) found in GRTensor. 

Edgardo S. Cheb-Terrab
Physics, Maplesoft

First 48 49 50 51 52 53 Page 50 of 53