acer

32303 Reputation

29 Badges

19 years, 309 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are answers submitted by acer

The maximize command can handle this example,

maximize( (x-4*y)^9+3*z, x=0..3, y=0..14, z=0..17 );

             19734

You could get that output if lessthan had been given its own alias, earlier.

In the sixth bullet point on the Help-page for topic alias, there is the sentence, "Finally, a sequence of all existing aliases is returned as the function value."

(You've added a .mw file Document, since I answered. If I open and rexecute it then I don't see that same output. Perhaps you had an original with prior commmands?)

Your code for it currently attempts it like,

Grading:-Quiz("Calculer la limite :",
   proc(Resp, Ans)
      evalb(limit(Ans, x = 0) = Resp);
   end proc,
   proc() local r;
      r := rand(1 .. 7)();
      sin(r()*x)/(3 + r());
   end proc);

A serious weakness of that is that it doesn't actually typeset it as a limit, and it doesn't indicate the limit point (ie, x=0).

Perhaps you could start with this adjustment to your code,

Grading:-Quiz(
   "Calculer la limite :",
   proc(Resp, Ans)
      evalb(value(Ans) - Resp = 0);
   end proc,
   proc() local r;
      r := rand(1 .. 7)();
      Limit(sin(r()*x)/(3 + r()), x = 0);
   end proc)

I presume that you plan on trying to come up with more inspired examples whose answers are not all zero.

There is a tricky issue, to many such quizzes: what are you willing to accept as the answer? Is it only the identical expression?

Suppose the answer is exact zero. Would you accept the float 0.00? What about 12^(1/2)/2 - 3^(1/2) ? What about sin(2)^2+cos(2)^2-1 ?

If the answer to another example were sqrt(3) would you accept 12^(1/2)/2 ?

If the answer to another example were x-1, would you accept (x^2-1)/(x+1) ?

There are more insidious examples of seemingly harmless variations that could get the wrong grade.

Note that it's not generally practical to attempt any simplification as strong as, say,
   evalb(simplify( limit(Ans, x = 0) = Resp ));
because for various classes of problem (integration, say) that could give the response "Correct" even if one merely entered the unsolved problem as the response!

Also unsatisfactory is, say,
   evalb(limit(Ans, x = 0) = simplify(Resp));
because there may be more than one acceptable form, and (more seriously) different accpectable forms might not simplify to the same simplified form.

Given a particular validation scheme, it's often possible to come up with an innocuous looking example for which the grading is not right.

Is this the kind of thing that you are trying to do?

note: here, you may compare,
   CharacteristicPolynomial(A,lambda);
   Determinant(A-lambda);

restart;

with(LinearAlgebra):

 

A := <<3|2>,<-1|4>>;
CharacteristicPolynomial(A,lambda);
Determinant(A-lambda);
eval(%,lambda=A);

Matrix(2, 2, {(1, 1) = 3, (1, 2) = 2, (2, 1) = -1, (2, 2) = 4})

lambda^2-7*lambda+14

lambda^2-7*lambda+14

Matrix(%id = 36893628834902374868)

A:= <<2|1>,<-3|-1>>;
CharacteristicPolynomial(A,lambda);
eval(%,lambda=A);

Matrix(2, 2, {(1, 1) = 2, (1, 2) = 1, (2, 1) = -3, (2, 2) = -1})

lambda^2-lambda+1

Matrix(%id = 36893628834902364276)

A := <<2|1|-1>,<0|1|0>,<-1|0|1>>;
CharacteristicPolynomial(A,lambda);
eval(%,lambda=A);

Matrix(3, 3, {(1, 1) = 2, (1, 2) = 1, (1, 3) = -1, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (3, 1) = -1, (3, 2) = 0, (3, 3) = 1})

lambda^3-4*lambda^2+4*lambda-1

Matrix(%id = 36893628834902356084)

A := <<-2|1|-1>,<0|1|5>,<-1|5|2>>;
CharacteristicPolynomial(A,lambda);
eval(%,lambda=A);

Matrix(3, 3, {(1, 1) = -2, (1, 2) = 1, (1, 3) = -1, (2, 1) = 0, (2, 2) = 1, (2, 3) = 5, (3, 1) = -1, (3, 2) = 5, (3, 3) = 2})

lambda^3-lambda^2-30*lambda-40

Matrix(%id = 36893628834902348252)

Download cpoly.mw

(check for typos)

restart;

ps := PolyhedralSets:-PolyhedralSet([[1,1,0],[-1,1,0],[-1,-1,0],
                                     [-1/2,0,1],[1/2,-1/2,0]],[x,y,z]):

 

PolyhedralSets:-Volume(ps);

1

PolyhedralSets:-Plot(ps);

Relations(ps);

[-z <= 0, y+z <= 1, (1/2)*z-x <= 1, x+(5/2)*z-3*y <= 2, -(1/3)*y+(7/6)*z+x <= 2/3]

Download ps_volume.mw

It's not clear whether you want, say, one of the edges of the result to be along a common ray as one of the edges of the original.

It's also unclear whether you want to produce only the transformed result directly, or whether you want to produce both (transforming the original into the result).

For example, using an orientation so as to get a view down onto the triangles,

restart;

P := plot3d(v^3,u=0..1-v, v=0..1,
            orientation=[-90,0,0], style=surface);

plots:-display(
  plottools:-transform((x,y,z)->[x+y/2,y*sqrt(3)/2,z])(P),
  view=[0..1,0..1,0..1], labels=[u,v,""],
  orientation=[-90,0,0], style=surface);

 

Download 3d_tri_transf.mw

Of course you can still rotate those; they are 3d plots of surfaces.

What you've stated about reading in names containing such characters is not true. Code with assignments to such can be read in via .mpl files.

But you can run into difficulties when you try to refer to them in new input lines in the GUI. In a roundabout way you can access those assigned names, and their values, via anames(user).

However, what will usually happen is that if you copy&paste such a name into the GUI what will actually be input are more like the names,
   `&zeta;X1``&zeta;X2`

So, when you write, "...shows as unassigned" be careful that you're actually using/entering the name you intend to access. Having difficult entering the intended names does not mean that the names are unassigned.

Now, those specially formed ASCII names also happen to both pretty-print in output in the manner you've shown, in the GUI, with typeset Greek prefixes.

You can even enter those in the GUI without having to make all those extra keystrokes, by using the appropriate GUI palette for the Greek letter while in 2D Input mode.

So, one solution is to use the names like `&zeta;X1` for your plaintext .mpl files, instead of utf-8 unicode.

In other words, use the intended mechanisms that the GUI supports and is designed for.

In the following worksheet, I read in the code you showed from a plaintext file which I named "foo.mpl". This is just an illustration of the fact that the names you originally gave can indeed (contrary to your claim) be read in via .mpl text format and assigned to.

restart;

read "foo.mpl";

nms := anames(user);

`&zeta;X2`, `&zeta;X1`

nms;

(1/3)*Pi, 0

lprint(eval(nms,1));

`ζX2`, `ζX1`

`&zeta;X2`, `&zeta;X1`

`&zeta;X2`, `&zeta;X1`

eval(nms,1)[1];

`&zeta;X2`

These are not the same thing.

`&zeta;X2` - eval(nms,1)[1];

`&zeta;X2`-`&zeta;X2`

Download uni_nms.mw

Some earlier postings by you indicated that you might still be using Maple 2022.

The following works in Maple 2022.2 (and several earlier versions as well, including Maple 2018.2 and Maple 16.02).

expr := sin(theta)^(A - 2)*cos(theta)^2
        - sin(theta)^(A - 2) + sin(theta)^A:

 

simplify(expand(expr));

0

Download trig_simp_ex2.mw

In Maple 2023.0 your example is handled directly by the simplify command.

If it's of interest, one can observe why expanding wrt powers helps here. After the expand, the result can be factored, with one of the factors being zero by simple Pythagorean trig identity.

expr := sin(theta)^(A - 2)*cos(theta)^2
        - sin(theta)^(A - 2) + sin(theta)^A:

expand(expr);

sin(theta)^A*cos(theta)^2/sin(theta)^2-sin(theta)^A/sin(theta)^2+sin(theta)^A

factor(%);

sin(theta)^A*(sin(theta)^2+cos(theta)^2-1)/sin(theta)^2

You could make the following kinds of checks, using the is command.

restart;

is( -7.5 in RealRange(Open(-10),-5) )

true

is( -7.5 in RealRange(Open(-6),infinity) )

false

is( -7.5 in Or(RealRange(Open(-6),infinity),
               RealRange(Open(-10),-5)) );

true

is( A in Or(RealRange(Open(-6),infinity),
               RealRange(Open(-10),-5)) )
  assuming A>-9;

true

is( A in Or(RealRange(Open(-6),infinity),
               RealRange(Open(-10),-5)) )
  assuming A>-11;

false

coulditbe( A in Or(RealRange(Open(-6),infinity),
               RealRange(Open(-10),-5)) )
  assuming A>-11;

true

coulditbe( A in Or(RealRange(Open(-6),infinity),
               RealRange(Open(-10),-5)) )
  assuming A<-11;

false

Download RR_is.mw

You could also assign your disjunction (or other logical operator construction) to a name, and re-use it. Eg,

Dis := Or(RealRange(Open(-6),infinity),
          RealRange(Open(-10),-5)):

 

is( -7 in Dis );

true

is( A in Dis ) assuming A<-11;

false

is( A::Dis ) assuming A>-9;

true

 

It is unfortunate that Maple 2023.0 does not have cross-reference links from the Help page for topic RealRange to the Help pages with topics assume (is) and property.

Let's suppose that you have a worksheet with some Startup Code.

The "Maple Code Editor Diagnostics" panel shows syntax errors and some basic kinds of potential issues that might arise when the code is executed. A syntax error is different from an error raised when the code is executed.

If the code is executed using the Startup Code region's menu then runtime errors get reported to the "Maple Code Editor Console".

Those distinctions are why these appear in two separate bullet points in the Startup Code documentation; they relate to two different kinds of messages.

• 

The Diagnostics panel at the bottom of the Startup Code Editor window displays the output from code analysis done on any Maple code entered into the code editor.

• 

The Console panel displays output from the code entered in the Startup Code Editor. The Console can be used for prototyping and testing your code. To clear the Console, from the View menu, select Clear Console.


A simple (single, say) pass through the code may allow the code analyzer (here, mint, underneath) to deduce a few common and simple kinds of potential runtime problems -- procedure locals used before being initialized, unattainable code blocks, locals assigned values but then not used, etc. These kinds of issue are reported to the Diagnostics panel.

But these diagnostics don't execute the code in full. And hence they will certainly not find all kinds of future runtime error, since doing so without actual execution is logically impossible. Runtime error message get reported to the Console panel, if executed by the Startup Code's menu.

Code can be run under the debugger. Doing so can require learning its techniques.

I would prefer to pass {x} rather than unadorned x as the second argument to solve, for consistency of output, and then fix up the conversions to RealRange.

I don't know whether you'd prefer sets or Or to be used to denote logical disjunction. Having it be denoted by mere sequences seems dodgy to me, because more involved multiple solutions could become wrongly conflated. (I don't much like T1 below returning a mere sequence...)

I also don't know whether you'd want to handle univariate examples with names other than x. It's hardcoded in T3 at present. (Also, you can't sensibly have nameless RealRanges for multivariate examples, naturally.)

I also don't know what other, future, less trivial examples you'd want to handle.

restart;

#interface(prettyprint=0):

 

with(RealDomain):

 

RealRange(-infinity,infinity):='RealRange(-infinity,infinity)':

 

T1 := ()->subsindets([args],`<>`,u->(lhs(u)<rhs(u),lhs(u)>rhs(u)))[]:

T2 := ()->subsindets([args],And(name=name,':-satisfies'(evalb)),
                    RealRange(-infinity,infinity))[]:

T3 := ()->subsindets([args],`::`(identical(x),anything),rhs)[]:

A := ()->T3(convert(T2(T1([args])), RealRange)[]):

 

A( solve(x-1 > 0, {x}) );

{RealRange(Open(1),infinity)}

A( solve(1/x^2 > 0, {x}) );

{RealRange(-infinity,Open(0)), RealRange(Open(0),infinity)}

A( solve(1/(x^2-1) > 0, {x}) );

{RealRange(-infinity,Open(-1))}, {RealRange(Open(1),infinity)}

A( solve(x^2+1 > 0, {x}) );

{RealRange(-infinity,infinity)}

A( solve(x^2+1 < 0, {x}) ); # NULL

 

Download solve_RR.mw

You are trying to use an exact solving methodology on an expression containing float exponents. (That can make solving fully over the complex numbers be quite a demand.)

Using fsolve is more suitable here.

fsolve(.2894606222 = .4090662520/((1+0.1481289280e-2*x)^5.034901366
                                  *(1/(1+0.1481289280e-2*x)^5.034901366)^.1986136226),
       x);

          60.41863487

Also note that converting to rationals (even "exactly") and forcing it through solve doesn't really help much to getting an accurate floating-point  result here.

expr := .2894606222 = .4090662520/((1+0.1481289280e-2*x)^5.034901366
                                  *(1/(1+0.1481289280e-2*x)^5.034901366)^.1986136226):

 

eval(solve(subsindets(expr,float,__K),
           {x}),
     __K=(x->x));

{x = (3125000000/4629029)*exp(.2478375329*ln(2045331260/1447303111))-675.0875832}

evalf(%);
evalf[10](evalf[50](%%));

{x = 60.4186348}

{x = 60.41863484}

eval(solve(subsindets(expr,float,
                      u->__K(convert(u,rational,exact))),
           {x}),
     __K=(x->x));

{x = (3125000000/6699608072609219)*2045331260^(2500000000000000000/10087253415662628821)*1447303111^(7587253415662628821/10087253415662628821)-3125000000/4629029}

evalf(%);
evalf[10](evalf[50](%%));

{x = 60.4186350}

{x = 60.41863487}

fsolve(expr);

60.41863487

evalf[10](evalf[50](fsolve(expr)));

60.41863487

Download fs_1.mw

Here is a brief way to do that.

   L := [seq(cos(x), x=0.1 .. 10.0, 0.1)];
   S := sort(L);
   S[35];

which produces -0.5885011173 as its last result.

Here's a slightly longer way, that shows a bit more. (figured that you're trying to learn some Maple. You could try and work out for yourself what these commands do...)

L := [seq([x,cos(x)], x=0.1 .. 10.0, 0.1)]:


Here is the list of 100 entries, cos(0.1) to cos(10.0)

L[..,2];

[.9950041653, .9800665778, .9553364891, .9210609940, .8775825619, .8253356149, .7648421873, .6967067093, .6216099683, .5403023059, .4535961214, .3623577545, .2674988286, .1699671429, 0.7073720167e-1, -0.2919952230e-1, -.1288444943, -.2272020947, -.3232895669, -.4161468365, -.5048461046, -.5885011173, -.6662760213, -.7373937155, -.8011436155, -.8568887534, -.9040721420, -.9422223407, -.9709581651, -.9899924966, -.9991351503, -.9982947758, -.9874797699, -.9667981926, -.9364566873, -.8967584163, -.8481000317, -.7909677119, -.7259323042, -.6536436209, -.5748239465, -.4902608213, -.4007991721, -.3073328700, -.2107957994, -.1121525269, -0.1238866346e-1, 0.8749898344e-1, .1865123694, .2836621855, .3779777427, .4685166713, .5543743362, .6346928759, .7086697743, .7755658785, .8347127848, .8855195169, .9274784307, .9601702867, .9832684384, .9965420970, .9998586364, .9931849188, .9765876257, .9502325920, .9143831482, .8693974903, .8157251001, .7539022543, .6845466664, .6083513145, .5260775174, .4385473276, .3466353178, .2512598426, .1533738620, 0.5395542056e-1, -0.4600212564e-1, -.1455000338, -.2435441537, -.3391548610, -.4313768450, -.5192886541, -.6020119027, -.6787200473, -.7486466456, -.8110930141, -.8654352092, -.9111302619, -.9477216021, -.9748436214, -.9922253255, -.9996930420, -.9971721562, -.9846878558, -.9623648798, -.9304262721, -.8891911526, -.8390715291]

S := sort( L, key=(u->op(2,u)) ):


Here is the sorted list.

S[..,2];

[-.9996930420, -.9991351503, -.9982947758, -.9971721562, -.9922253255, -.9899924966, -.9874797699, -.9846878558, -.9748436214, -.9709581651, -.9667981926, -.9623648798, -.9477216021, -.9422223407, -.9364566873, -.9304262721, -.9111302619, -.9040721420, -.8967584163, -.8891911526, -.8654352092, -.8568887534, -.8481000317, -.8390715291, -.8110930141, -.8011436155, -.7909677119, -.7486466456, -.7373937155, -.7259323042, -.6787200473, -.6662760213, -.6536436209, -.6020119027, -.5885011173, -.5748239465, -.5192886541, -.5048461046, -.4902608213, -.4313768450, -.4161468365, -.4007991721, -.3391548610, -.3232895669, -.3073328700, -.2435441537, -.2272020947, -.2107957994, -.1455000338, -.1288444943, -.1121525269, -0.4600212564e-1, -0.2919952230e-1, -0.1238866346e-1, 0.5395542056e-1, 0.7073720167e-1, 0.8749898344e-1, .1533738620, .1699671429, .1865123694, .2512598426, .2674988286, .2836621855, .3466353178, .3623577545, .3779777427, .4385473276, .4535961214, .4685166713, .5260775174, .5403023059, .5543743362, .6083513145, .6216099683, .6346928759, .6845466664, .6967067093, .7086697743, .7539022543, .7648421873, .7755658785, .8157251001, .8253356149, .8347127848, .8693974903, .8775825619, .8855195169, .9143831482, .9210609940, .9274784307, .9502325920, .9553364891, .9601702867, .9765876257, .9800665778, .9832684384, .9931849188, .9950041653, .9965420970, .9998586364]

S[35];

[2.2, -.5885011173]


The 35th term of the sorted list is -.5885011173, which
comes from cos(2.2)

cos(2.2);

-.5885011173

plots:-display(
  plots:-listplot(S[..,2], size=[500,200]),
  plots:-pointplot([[35,S[35][2]]],color=red,
                   symbol=solidcircle,symbolsize=15),
  axis[1]=[tickmarks=[seq(10..100,10)],
           gridlines=[[seq(5..100,10)]]]);

Download sort_cos_list.mw

You may have noticed that lists L and S each contain both the x-values as well as the cos(x) values. I only did it that way because I thought that it'd be fun/interesting to be able to immediately get the corresponding x-value which produced the 35th greatest cos-value, without doing any additional computation.

You've already assigned ics itself as a set., ie.
   ics := {V(0) = -65, h(0) = 0.6, m(0) = 0.05, n(0) = 0.32}

Having done that, you could pass either,
    {eq1, eq2, eq3, eq4} union ics
or,
    {eq1, eq2, eq3, eq4, op(ics)}
to dsolve.

That merges the differential equations and initial conditions together into a single (flat) set. 

Or you could assign only the expression sequence of conditions to ics (and not itself a set), ie,
   ics := V(0) = -65, h(0) = 0.6, m(0) = 0.05, n(0) = 0.32;
and then pass your original formulation to dsolve, ie.,
   {eq1, eq2, eq3, eq4, ics}

Adjust the rest, as desired. I didn't look to see if your system and the results made sense.

restart

Cm := 1.0; ENa := 50.0; EK := -77.0; ELeak := -54.387; gNa := 120.0; gK := 36.0; gLeak := .3

1.0

50.0

-77.0

-54.387

120.0

36.0

.3

II := piecewise(`and`(t >= 10, t <= 40), 10.0, 0.); alpha_m := proc (V) .1*(V+40.0)/(1.0-exp((-1)*(V+40.0)/10.0)) end proc; beta_m := proc (V) 4.0*exp((-1)*(V+65.0)/18.0) end proc; alpha_h := proc (V) 0.7e-1*exp((-1)*(V+65.0)/20.0) end proc; beta_h := proc (V) 1.0/(1.0+exp((-1)*(V+35.0)/10.0)) end proc; alpha_n := proc (V) 0.1e-1*(V+55.0)/(1.0-exp((-1)*(V+55.0)/10.0)) end proc; beta_n := proc (V) .125*exp((-1)*(V+65.0)/80.0) end proc

piecewise(10 <= t and t <= 40, 10.0, 0.)

proc (V) .1*(V+40.0)/(1.0-exp((-1)*(V+40.0)/10.0)) end proc

proc (V) 4.0*exp((-1)*(V+65.0)/18.0) end proc

proc (V) 0.7e-1*exp((-1)*(V+65.0)/20.0) end proc

proc (V) 1.0/(1.0+exp((-1)*(V+35.0)/10.0)) end proc

proc (V) 0.1e-1*(V+55.0)/(1.0-exp((-1)*(V+55.0)/10.0)) end proc

proc (V) .125*exp((-1)*(V+65.0)/80.0) end proc

eq1 := diff(V(t), t) = (II-gNa*m(t)^3*h(t)*(V(t)-ENa)-gK*n(t)^4*(V(t)-EK)-gLeak*(V(t)-ELeak))/Cm; eq2 := diff(m(t), t) = alpha_m(V(t))*(1-m(t))-beta_m(V(t))*m(t); eq3 := diff(h(t), t) = alpha_h(V(t))*(1-h(t))-beta_h(V(t))*h(t); eq4 := diff(n(t), t) = alpha_n(V(t))*(1-n(t))-beta_n(V(t))*n(t); ics := {V(0) = -65, h(0) = .6, m(0) = 0.5e-1, n(0) = .32}

diff(V(t), t) = 1.000000000*piecewise(10 <= t and t <= 40, 10.0, 0.)-120.0000000*m(t)^3*h(t)*(V(t)-50.0)-36.00000000*n(t)^4*(V(t)+77.0)-.3000000000*V(t)-16.31610000

diff(m(t), t) = .1*(V(t)+40.0)*(1-m(t))/(1.0-exp(-.1000000000*V(t)-4.000000000))-4.0*exp(-0.5555555556e-1*V(t)-3.611111111)*m(t)

diff(h(t), t) = 0.7e-1*exp(-0.5000000000e-1*V(t)-3.250000000)*(1-h(t))-1.0*h(t)/(1.0+exp(-.1000000000*V(t)-3.500000000))

diff(n(t), t) = 0.1e-1*(V(t)+55.0)*(1-n(t))/(1.0-exp(-.1000000000*V(t)-5.500000000))-.125*exp(-0.1250000000e-1*V(t)-.8125000000)*n(t)

{V(0) = -65, h(0) = .6, m(0) = 0.5e-1, n(0) = .32}

sol := dsolve(`union`({eq1, eq2, eq3, eq4}, ics), {V(t), h(t), m(t), n(t)}, numeric)

plots:-odeplot(sol, [t, h(t)], t = 0 .. 60)

plots:-odeplot(sol, [t, m(t)], t = 0 .. 60)

plots:-odeplot(sol, [t, n(t)], t = 0 .. 60)

plots:-odeplot(sol, [t, V(t)], t = 0 .. 60)

Download Question1_ac.mw

Here's one way, collecting wrt the global :-diff.

The colon-minus prefix makes it refer to the global name diff rather than the Physics export going by the similar name.

restart;

Run the code with Physics loaded and it does not collect in diff but if you put a # infront of physics it works fine.

with(Physics):

CompactDisplay(varphi(X),psi(X))

varphi(X)*`will now be displayed as`*varphi

psi(X)*`will now be displayed as`*psi

X:=tau,x,y,z

tau, x, y, z

expr := (6*alpha)*varphi(X)*A^4*1/a(tau)^2 + (-12*diff(Phi(X), tau) - 12*diff(psi(X), tau))*alpha*A^3*1/a(tau)^2 + (-4*diff(diff(Phi(X), x), x) - 4*diff(diff(Phi(X), y), y) - 4*diff(diff(Phi(X), z), z) - 4*diff(diff(psi(X), x), x) - 4*diff(diff(psi(X), y), y) - 4*diff(diff(psi(X), z), z))*alpha*A^2*1/a(tau)^2 + (-(6*varphi(X))*H(tau)^4 - (12*H(tau)^3)*diff(psi(X), tau) + (4*H(tau)^2)*diff(diff(psi(X), x), x) + (4*H(tau)^2)*diff(diff(psi(X), y), y) + (4*H(tau)^2)*diff(diff(psi(X), z), z))*alpha*1/a(tau)^2 - (6*H(tau))*diff(psi(X), tau) + 2*diff(diff(psi(X), x), x) + 2*diff(diff(psi(X), y), y) + 2*diff(diff(psi(X), z), z)

6*alpha*varphi(tau, x, y, z)*A^4/a(tau)^2+(-12*(diff(Phi(tau, x, y, z), tau))-12*(diff(psi(tau, x, y, z), tau)))*alpha*A^3/a(tau)^2+(-4*(diff(diff(Phi(tau, x, y, z), x), x))-4*(diff(diff(Phi(tau, x, y, z), y), y))-4*(diff(diff(Phi(tau, x, y, z), z), z))-4*(diff(diff(psi(tau, x, y, z), x), x))-4*(diff(diff(psi(tau, x, y, z), y), y))-4*(diff(diff(psi(tau, x, y, z), z), z)))*alpha*A^2/a(tau)^2+(-6*varphi(tau, x, y, z)*H(tau)^4-12*H(tau)^3*(diff(psi(tau, x, y, z), tau))+4*H(tau)^2*(diff(diff(psi(tau, x, y, z), x), x))+4*H(tau)^2*(diff(diff(psi(tau, x, y, z), y), y))+4*H(tau)^2*(diff(diff(psi(tau, x, y, z), z), z)))*alpha/a(tau)^2-6*H(tau)*(diff(psi(tau, x, y, z), tau))+2*(diff(diff(psi(tau, x, y, z), x), x))+2*(diff(diff(psi(tau, x, y, z), y), y))+2*(diff(diff(psi(tau, x, y, z), z), z))

map(simplify, collect(expr, :-diff));

-12*alpha*A^3*(diff(Phi(tau, x, y, z), tau))/a(tau)^2-4*alpha*A^2*(diff(diff(Phi(tau, x, y, z), x), x))/a(tau)^2-4*alpha*A^2*(diff(diff(Phi(tau, x, y, z), y), y))/a(tau)^2-4*alpha*A^2*(diff(diff(Phi(tau, x, y, z), z), z))/a(tau)^2-4*(diff(diff(psi(tau, x, y, z), x), x))*(alpha*A^2-H(tau)^2*alpha-(1/2)*a(tau)^2)/a(tau)^2-4*(diff(diff(psi(tau, x, y, z), y), y))*(alpha*A^2-H(tau)^2*alpha-(1/2)*a(tau)^2)/a(tau)^2-4*(diff(diff(psi(tau, x, y, z), z), z))*(alpha*A^2-H(tau)^2*alpha-(1/2)*a(tau)^2)/a(tau)^2-12*(diff(psi(tau, x, y, z), tau))*(alpha*A^3+H(tau)^3*alpha+(1/2)*H(tau)*a(tau)^2)/a(tau)^2+6*alpha*varphi(tau, x, y, z)*A^4/a(tau)^2-6*varphi(tau, x, y, z)*H(tau)^4*alpha/a(tau)^2

collect(expr, :-diff, simplify);

-12*alpha*A^3*(diff(Phi(tau, x, y, z), tau))/a(tau)^2-4*alpha*A^2*(diff(diff(Phi(tau, x, y, z), x), x))/a(tau)^2-4*alpha*A^2*(diff(diff(Phi(tau, x, y, z), y), y))/a(tau)^2-4*alpha*A^2*(diff(diff(Phi(tau, x, y, z), z), z))/a(tau)^2+(-4*alpha*A^2/a(tau)^2+4*H(tau)^2*alpha/a(tau)^2+2)*(diff(diff(psi(tau, x, y, z), x), x))+(-4*alpha*A^2/a(tau)^2+4*H(tau)^2*alpha/a(tau)^2+2)*(diff(diff(psi(tau, x, y, z), y), y))+(-4*alpha*A^2/a(tau)^2+4*H(tau)^2*alpha/a(tau)^2+2)*(diff(diff(psi(tau, x, y, z), z), z))+(-12*alpha*A^3/a(tau)^2-12*H(tau)^3*alpha/a(tau)^2-6*H(tau))*(diff(psi(tau, x, y, z), tau))+6*alpha*varphi(tau, x, y, z)*(A^4-H(tau)^4)/a(tau)^2

Download CollectDiff_ac.mw

First 43 44 45 46 47 48 49 Last Page 45 of 336