acer

32747 Reputation

29 Badges

20 years, 107 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are answers submitted by acer

The left-quotes are not necessary.

The 2D Input can be done just be using a single right-quote (apostrophe) for the prime.

One can even change a setting so that the derivatives appear in prime-notation in 2D Output.

restart


Prime notation can be used directly in 2D Input mode, without
needing any single left-ticks (aka name-quotes).

It parses this as containing derivatves, by default.

diff(y(x), x, x) = diff(y(x), x)+y(x)+sin(x)

diff(diff(y(x), x), x) = diff(y(x), x)+y(x)+sin(x)


The independent variable is presumed on the y-prime.

But, see above, we can also write the application to "x"
explicitly, without getting an unwanted double application.

diff(f(x), x, x)+diff(g(x), x)

diff(diff(f(x), x), x)+diff(g(x), x)

Typesetting:-Settings(prime)

x

Typesetting:-Settings(prime = s)

diff(f(x), x, x)+diff(g(x), x)

diff(diff(f(s), s), s)+diff(g(s), s)

restart


We can also change a setting so that the prime notation gets
used for pretty-printing, ie. 2D Output.

Typesetting:-Settings(typesetprime = true)

diff(y(x), x, x) = diff(y(x), x)+sin(x)

diff(diff(y(x), x), x) = diff(y(x), x)+sin(x)

lprint(%)

diff(diff(y(x),x),x) = diff(y(x),x)+sin(x)

dsolve([%, y(0) = 0, (D(y))(0) = 0])

y(x) = (1/2)*exp(x)-(1/2)*sin(x)+(1/2)*cos(x)-1

restart


The reason it works by default for input is because of this default setting.

If we turn it off then it doesn't parse this as derivatives.

Typesetting:-Settings(useprime)

true

Typesetting:-Settings(useprime = false)

diff(y(x), x, x) = diff(y(x), x)+y(x)+sin(x)

`y''`(x) = `y'`(x)+y(x)+sin(x)

lprint(%)

`y''`(x) = `y'`(x)+y(x)+sin(x)


Download typeset_prime_2D.mw

Yes, when simplify manipulates an active (non-inert) limit call then transformations it makes produce new active limit calls -- which evaluate as usual.

That's not unusual. It happens (sometimes very productively) for active int calls as well.

Here limit might not be able to handle an expression with, say, tan&sec forms. That's a limit weakness more than it is a dsolve weakness. Your phrase, "...since dsolve could not find limit..." suggests that you're blaming dsolve for limit's weakness -- which would be a mistake.

If you convert this sol result to sincos, and then evaluate that, then limit can compute that the limit is undefined. Eg,
     eval(convert(sol,sincos))
There's no completely general reason for simplify not to attempt that kind of transformation, and in doing so allow limit to attain an explicit result that it couldn't get for the original form.

Ideally, limit itself could have found that result (including when dsolve calls it to do that task).

The following code may illustrate limit's failure (under dsolve) and then later its success when simplify forces transformations (which limit itself might ideally have tried originally, etc):

ode:=4*x*diff(y(x),x$2)+2*diff(y(x),x)+y(x)=(6+x)/x^2;
IC:=y(infinity)=0;

trace(limit);

sol:=dsolve([ode,IC],y(x));

simplify(sol);

Now, it can happen that MultiSeries:-limit can find an explicit undefined result directly from the expression containing the tan form. If a limit call would return that then dsolve could return NULL. (Again, this is about weakness in what :-limit may FAIL on, more than what dsolve's doing here.)

restart;
ode:=4*x*diff(y(x),x$2)+2*diff(y(x),x)+y(x)=(6+x)/x^2;
IC:=y(infinity)=0;

unprotect(limit):
limit:=MultiSeries:-limit:
protect(limit):
trace(limit):

sol:=[dsolve([ode,IC],y(x))];

That seems weird. I think you could submit a bug report on that.

ps. consider y(x) = exp(-x)  (which I got by looking at it...)

ode:=diff(y(x),x$2)-2*diff(y(x),x)+y(x)=4*exp(-x);

diff(diff(y(x), x), x)-2*(diff(y(x), x))+y(x) = 4*exp(-x)

IC:=y(infinity)=0;

y(infinity) = 0

odetest( y(x)=exp(-x), [ode,IC] );

[0, 0]

Download de_inf_ex.mw

Do you mean this one?

proc(f,x,y,ndata,nvars)
   local G,init,nparams,k;
   nparams := nops(f);
   init := `if`(type(x, 'Vector'), (i,j)->evalf(f[j](x[i])),
                  (i,j)->evalf(f[j](seq(x[i,k], k=1..nvars))));
   G := Matrix(ndata, nparams, 'datatype'=float, init);
   LinearFitting:-LinearLS(y, G, ndata, nparams, args[6..-1]);
end proc;

I think that it might be a local of an unnamed(?) module which also contains an overloaded LinearFit (to which the export LinearFit of Statistics:-Regression somehow refers...).

You can enter it, in a debugger run of a LinearFit call, and list its contents.

You can use items from the Palette menus for this, which appear in the left panel of the Maple GUI.

In the special case that it is an arrow that you want on top then you can find a dedicated entry for it on the Accents palette.

You could also first enter the appropriate stacked item (template) from the Layout palette. Replace the lower portion by u, and the upper portion by your choice from the Arrows palette.

You can use the Tab key (or mouse pointer) to move focus around the entered item.

You can manage which of the many available palettes appear in the left panel, using GUI's main menu/ribbon.

The odetest result can be further manipulated and simplified to zero under assumptions.

In my Maple 2024.2 it can get it, assuming x::real

In my Maple 2022.2 it can get it, assuming x::posint, though that raises an error like yours in 2024.2.

In that Maple 2022.2 it gets it around 4 out of 5 times (after restart) for x::real, but always gets it for x>0.

restart;

kernelopts(version);

`Maple 2024.2, X86 64 LINUX, Oct 29 2024, Build ID 1872373`

sol:=y(x) = -4/9*I*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)*x^2
            +4/9*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)*x^2
            +4/9*I*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)
            +1/9*x^4-4/9*(x+1)^(1/4)*(x-1)^(1/4)*2^(1/2)
            -16/9*I*(x+1)^(1/2)*(x-1)^(1/2)-2/9*x^2+1/9:
ode:=(-x^2+1)*diff(y(x),x)+x*y(x) = x*(-x^2+1)*y(x)^(1/2):
IC:=y(0) = 1:

foo := simplify(evala(odetest(sol,[ode,IC]))) assuming x::real;

[(1/3)*(x+1)*x*(x-1)*((-2+2*I)*(x+1)^(1/4)*2^(1/2)*(x-1)^(1/4)-x^2+((4-4*I)*(x+1)^(5/4)*2^(1/2)*(x-1)^(5/4)+x^4-(16*I)*(x+1)^(1/2)*(x-1)^(1/2)-2*x^2+1)^(1/2)+1), 0]

G := foo[1]/(1/3*(x+1)*(x-1)*x):

G1 := op(3,G):

G2 := G - G1:

new := 1/3*(x+1)*(x-1)*x*(G2^2-G1^2)/(G2-G1):

# Compare the two expressions
normal( foo[1] - new );

0

simplify(expand( new )) assuming x::real;

0

Download nm_odetest_ex3.mw

Ideally simplify or odetest itself would be able to get the zero directly, either under assumption x::real, or under assumption x::posint.

You can insert a reference to an Equation Label using Ctrl-l , or Command-l on Mac OS X. (That's Ctrl and the "L" key.)

No, not all versions have a dedicated "What's New" page just for differential equations.

The general layout and naming of these pages changes, and is not fixed.

Some releases have a specific section for DEs in the "Advanced Math" What's New page. It depends on how much was new in that functionality.

The areas of focus for development change over time.

The example illustrates a weakness in `simplify`.

With a little help, the `odetest` result can be simplified to zero, using `simplify`.

Below, I also give a few other examples with similar weakness.

restart;

kernelopts(version);

`Maple 2024.2, X86 64 LINUX, Oct 29 2024, Build ID 1872373`

ode:=diff(y(x), x) = y(x)*(-1 - x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2 - x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*ln(x) + x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*y(x) + 2*x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*y(x)*ln(x) + x^(2/(ln(x) + 1))*exp(2*ln(x)^2/(ln(x) + 1))*x^2*y(x)*ln(x)^2)/((ln(x) + 1)*x):

sol_1:=dsolve(ode);

y(x) = exp(-(1/4)*x^4)/(x^(-2*ln(x)/(ln(x)+1))*exp(-(1/4)*(x^4*ln(x)+x^4+4*ln(ln(x)+1)*ln(x)-8*ln(x)^2+4*ln(ln(x)+1))/(ln(x)+1))*ln(x)^2+2*x^(-2*ln(x)/(ln(x)+1))*exp(-(1/4)*(x^4*ln(x)+x^4+4*ln(ln(x)+1)*ln(x)-8*ln(x)^2+4*ln(ln(x)+1))/(ln(x)+1))*ln(x)+x^(-2*ln(x)/(ln(x)+1))*exp(-(1/4)*(x^4*ln(x)+x^4+4*ln(ln(x)+1)*ln(x)-8*ln(x)^2+4*ln(ln(x)+1))/(ln(x)+1))+c__1*ln(x)+c__1)

odetest(sol_1,ode);

0

sol_2:=simplify(sol_1);

y(x) = exp(-(1/4)*x^4)/((ln(x)+1)*(exp(-(1/4)*x^4)+c__1))

simplify( odetest(sol_2,ode) * exp(x^4/4) );

0


A slightly terser variant:

boo := -x^3*exp(-x^4/4) + x^((-x^4 + 12)/(4*ln(x) + 4))*exp((-x^4 + 12*ln(x)^2)/(4*ln(x) + 4));

-x^3*exp(-(1/4)*x^4)+x^((-x^4+12)/(4*ln(x)+4))*exp((-x^4+12*ln(x)^2)/(4*ln(x)+4))

simplify( boo );

-x^3*exp(-(1/4)*x^4)+x^((-x^4+12)/(4*ln(x)+4))*exp((-x^4+12*ln(x)^2)/(4*ln(x)+4))

simplify( boo * exp(x^4/4) );

0

Note lack of invariance under simplify@expand
simplify(expand(simplify(expand( 1/simplify( 1/expand(boo) ) ))));

0


Another,

goo := -x^3 + x^(3/(ln(x) + 1))*exp(3*ln(x)^2/(ln(x) + 1));

x^(3/(ln(x)+1))*exp(3*ln(x)^2/(ln(x)+1))-x^3

simplify(expand(goo/x^3) );

0


Download nm_simplify_27122025_ac.mw

Some of the examples I find interesting because simplify can produce 1 for the ratio of two terms, while not being able to produce 0 for their difference.

The effect you're seeing is the effect of uniquification by the Maple kernel. It's not just about the display of the expression; it's about how Maple stores its unique structural representation in memory.

The effect you're seeing is the fundamental storing and unique representation that the Maple kernel does for the  Directed Acyclic Graph (DAG) representations of expressions it has a session. It stores the DAGs in a hashed data structure. That structure is sometimes called the "simpl" table.

Yes, this is to ensure that all equivalent expressions are stored only once in memory. But it is not a table in the usual sense for the Maple language, and there is no general purpose, direct access mechanism to it for the user.

It is not a "remember table", which is a feature of PROC DAGs. Those are accessible as a table. It is not that. There is no remember table to forget.

The sort command allows for some in-place replacement of the representation of an object in that internal "simpl" table. If the unique representation is changed, then it appears changed anywhere else where that very same DAG is accessed/pointed-to, or in any new created DAG that contains it. But the sort command only allows one to sort with respect to certain kinds of expression.

If your use of eval returns an expression whose DAG contains an already existing/simpl'd DAG then the new instance of the (sub)expression will be the same as what was already simpl'd.

Some examples,

restart;

foo := x^2 + y^2 + z^2 + 3:

bar := foo = 31:

foo;
bar;

x^2+y^2+z^2+3

x^2+y^2+z^2+3 = 31

sort( foo, order=plex(y,x,z) );

y^2+x^2+z^2+3

# the sorted foo is the same wherever it
# "exists" identically. So bar has also changed.
foo;
bar;

y^2+x^2+z^2+3

y^2+x^2+z^2+3 = 31

sort( foo, order=plex(z,y,x) );

z^2+y^2+x^2+3

foo;
bar;

z^2+y^2+x^2+3

z^2+y^2+x^2+3 = 31

goo := (z-3)^2 + (y+4)^2 + (x-1)^2 - 56 = 0;

(z-3)^2+(y+4)^2+(x-1)^2-56 = 0

# We can see that the sorting affects the SUMs which
# are polynomial in the specified variables.
# The operands of the `^` calls are such, here, but the
# lhs of goo itself is not.
sort( goo, order=plex(x,y,z), ascending );

(-3+z)^2+(4+y)^2+(-1+x)^2-56 = 0

sort( goo, order=plex(x,y,z) );

(z-3)^2+(y+4)^2+(x-1)^2-56 = 0

# we cannot specify these are the plex order.
sort( goo, order=plex( (x-1)^2), (y+4)^2, (z-3)^2 );

Error, invalid arguments to sort

woo := F((z-3)^2) + F((y+4)^2) + F((x-1)^2) - 56 = 0;

F((z-3)^2)+F((y+4)^2)+F((x-1)^2)-56 = 0

# ...but we can specify these function calls as the plex order.
sort( woo, order=plex( F((x-1)^2), F((y+4)^2), F((z-3)^2) ) );

F((x-1)^2)+F((y+4)^2)+F((z-3)^2)-56 = 0

# So now we could just make the calls to F print
# like its bare arguments.
# See earlier instance of this same question.


Download sort_fun_2.mw


You can't get around the uniquification just by recreating the
expression (including by substitution or by 2-argument eval).

restart;

(z-3)^2 + (y+4)^2 + (x-1)^2 - 56 = 0;

(z-3)^2+(y+4)^2+(x-1)^2-56 = 0

eval( A+B+C-56, [A=(x-1)^2,B=(y+4)^2,C=(z-3)^2] );

(z-3)^2+(y+4)^2+(x-1)^2-56

restart;

(x-1)^2 + (y+4)^2 + (z-3)^2 - 56 = 0;

(x-1)^2+(y+4)^2+(z-3)^2-56 = 0

eval( A+B+C-56, [A=(z-3)^2,B=(y+4)^2,C=(x-1)^2] );

(x-1)^2+(y+4)^2+(z-3)^2-56

# The following SUM DAG already appears in the EQUATION DAG later
# below, and is itself stored in the simpl table.
# Also, attempting to recreate an equivalent of that SUM with
# reordered addends will result in unification that produces
# the already stored DAG.

dismantle( (z-3)^2 + (y+4)^2 + (x-1)^2 - 56 );


SUM(9)
   PROD(3)
      SUM(5)
         NAME(4): x
         INTPOS(2): 1
         INTNEG(2): -1
         INTPOS(2): 1
      INTPOS(2): 2
   INTPOS(2): 1
   PROD(3)
      SUM(5)
         NAME(4): y
         INTPOS(2): 1
         INTPOS(2): 4
         INTPOS(2): 1
      INTPOS(2): 2
   INTPOS(2): 1
   PROD(3)
      SUM(5)
         NAME(4): z
         INTPOS(2): 1
         INTNEG(2): -3
         INTPOS(2): 1
      INTPOS(2): 2
   INTPOS(2): 1
   INTNEG(2): -56
   INTPOS(2): 1
 

dismantle((x-1)^2 + (y+4)^2 + (z-3)^2 - 56 = 0);


EQUATION(3)
   SUM(9)
      PROD(3)
         SUM(5)
            NAME(4): x
            INTPOS(2): 1
            INTNEG(2): -1
            INTPOS(2): 1
         INTPOS(2): 2
      INTPOS(2): 1
      PROD(3)
         SUM(5)
            NAME(4): y
            INTPOS(2): 1
            INTPOS(2): 4
            INTPOS(2): 1
         INTPOS(2): 2
      INTPOS(2): 1
      PROD(3)
         SUM(5)
            NAME(4): z
            INTPOS(2): 1
            INTNEG(2): -3
            INTPOS(2): 1
         INTPOS(2): 2
      INTPOS(2): 1
      INTNEG(2): -56
      INTPOS(2): 1
   INTPOS(2): 0
 

Download sort_fun_3.mw

restart;

kernelopts(version);

`Maple 2024.2, X86 64 LINUX, Oct 29 2024, Build ID 1872373`

ode := diff(y(x),x) +cos(1/exp(2*x))*y(x) = sin(1/exp(x)):

IC := a*D(y)(x0)+ c*y(x0) = b*y0:

maple_sol:=dsolve([ode,IC],y(x));

y(x) = (Int(sin(exp(-_z1))*exp(-(1/2)*Ci(exp(-2*_z1))), _z1 = x0 .. x)+(sin(cosh(x0)-sinh(x0))*a-b*y0)/(cos(cosh(2*x0)-sinh(2*x0))*cosh((1/2)*Ci(cosh(2*x0)-sinh(2*x0)))*a+cos(cosh(2*x0)-sinh(2*x0))*sinh((1/2)*Ci(cosh(2*x0)-sinh(2*x0)))*a-c*cosh((1/2)*Ci(cosh(2*x0)-sinh(2*x0)))-c*sinh((1/2)*Ci(cosh(2*x0)-sinh(2*x0)))))*exp((1/2)*Ci(exp(-2*x)))

the_residue:=odetest(maple_sol,[ode,IC]);

[0, -exp((1/2)*Ci(exp(-2*x0)))*(-y(x0)*cos(exp(-2*x0))*a+sin(cosh(x0)-sinh(x0))*a+c*y(x0)-b*y0)/((cosh((1/2)*Ci(cosh(2*x0)-sinh(2*x0)))+sinh((1/2)*Ci(cosh(2*x0)-sinh(2*x0))))*(cos(cosh(2*x0)-sinh(2*x0))*a-c))]


There is y(x0) in the_residue.

 

So cannot we utilize maple_sol with x=x0 to replace that y(x0)?

simplify(eval(the_residue, eval(maple_sol, x=x0)));

[0, 0]


Alternatively, could we utilize eval(maple_sol, x=x0) to
substitute into the IC?

odetest(maple_sol, [ode, simplify(eval(IC, y=unapply(rhs(maple_sol),x)))]);

[0, exp((1/2)*Ci(exp(-2*x0)))*b*y0*(cos(exp(-2*x0))*a-c)/((cosh((1/2)*Ci(cosh(2*x0)-sinh(2*x0)))+sinh((1/2)*Ci(cosh(2*x0)-sinh(2*x0))))*(cos(cosh(2*x0)-sinh(2*x0))*a-c))-b*y0]

simplify(%);

[0, 0]


Note,

odetest(maple_sol, ode);

0


Note, under maple_sol, the IC also simplify to just this,

 

simplify( convert(eval(IC, y=unapply(rhs(maple_sol),x)),exp) )

b*y0 = b*y0

Download nm_ode_ex1.mw

You could try the option,

    obsrange=false


Is there a reason that you don't use plots:-odeplot instead, or allow for any adjustments to control the error?

The enlargement of the y-range that allows this particular example to work as you expected (without obsrange=false) seems much smaller than 10% which you used.

Also, you haven't supplied an example in which you need the y-range. You've claimed that you sometimes run into issue without it, but haven't provided examples.

ps. Is there a specific reason for all that `op` and `originalview` stuff, as opposed to, say, using plottools:-getdata with its rangesonly option?

Some years ago the so-called "typesetting rule" for some special functions (like the Bessel family) was changed from true to false by default.

That Help page you've cited appears to not have been updated accordingly.

But you can still enable it using:

  Typesetting:-EnableTypesetRule("BesselJ")

(or, I suspect, by using the RuleAssistant dialog from that same package).

restart;

with(Typesetting)

interface(typesetting = extended)

H1 := Typeset(BesselJ(v, x))

Typesetting:-mrow(Typesetting:-mi("BesselJ", fontstyle = "normal"), Typesetting:-mo("⁡"), Typesetting:-mfenced(Typesetting:-mi("v"), Typesetting:-mi("x")))

lprint(H1)

Typesetting:-mrow(Typesetting:-mi("BesselJ",fontstyle = "normal"),Typesetting:-
mo("⁡"),Typesetting:-mfenced(Typesetting:-mi("v"),Typesetting:-mi
("x")))

NULL

BesselJ(v, x)

BesselJ(v, x)

QueryTypesetRule("BesselJ")

{"BesselJ" = false}

EnableTypesetRule("BesselJ")

QueryTypesetRule("BesselJ")

{"BesselJ" = true}

BesselJ(v, x)

BesselJ(v, x)

H2 := Typeset(BesselJ(v, x))

Typesetting:-mrow(Typesetting:-msub(Typesetting:-mi("J", fontstyle = "normal", Typesetting:-msemantics = "BesselJ"), Typesetting:-mi("v")), Typesetting:-mo("⁡"), Typesetting:-mfenced(Typesetting:-mi("x")))

lprint(H2)

Typesetting:-mrow(Typesetting:-msub(Typesetting:-mi("J",fontstyle = "normal",
Typesetting:-msemantics = "BesselJ"),Typesetting:-mi("v")),Typesetting:-mo(
"⁡"),Typesetting:-mfenced(Typesetting:-mi("x")))

NULL


Download Typeset_ac.mw

Those errors all occur in Maple 2024.2

But in Maple 2023.2.1 they get solved (and they solutions satisfy the equations).

Here's another way to actually compute the integral, with a check, if we consider tau to be real-valued.

The result is attained in that first line of computation.

The result prints reasonably nicer in the actual Maple GUI, and computation is overall reasonably quick.

restart;

kernelopts(version);

`Maple 2024.2, X86 64 LINUX, Oct 29 2024, Build ID 1872373`

integrand:=-3*(Pi-2*arcsin(tau))
           *(tau+1)^(1/2)*(tau+(tau^2-1)^(1/2))^(2*(tau^2-1)^(1/2)/(tau-1)^(1/2)/(tau+1)^(1/2))*(tau-1)^(1/2)
           *(-16/3*tau^2+Pi-2*arcsin(tau)+8/3)/(4*tau^2-4):

 

ans := piecewise(
  tau<-1, (simplify(int(expand(evala(combine(simplify(integrand)))),tau)) assuming tau<-1),
  tau>-1, (simplify(int(expand(evala(combine(simplify(integrand)))),tau)) assuming tau>-1));

ans := piecewise(tau < -1, (((6+4*I-12*tau^2)*arcsin(tau)^2+(12*Pi*tau^2-2-(6+4*I)*Pi)*arcsin(tau)+(16*tau^4-(16+12*I)*tau^2+6*I)*arccos(tau)+(4*I)*tau^4+(-3*Pi^2+6-4*I)*tau^2+(3/2+I)*Pi^2-3+I*(1/2))*sqrt(tau^2-1)-(4*(tau+1))*(-3*arcsin(tau)^2+3*Pi*arcsin(tau)+(4*tau^2-2-3*I)*arccos(tau)+I*tau^2-3*Pi^2*(1/4)+3/2-I*(1/2))*(tau-1)*tau)/(4*sqrt(tau^2-1)), -1 < tau, -(3*((1/6+(1/3)*(4*(tau^2-3*arccos(tau)-1/2))*tau*sqrt(tau^2-1)+4*arcsin(tau)^2*(1/3)-4*Pi*arcsin(tau)*(1/3)+(2*(-2*tau^2+1))*arccos(tau)+4*tau^4*(1/3)-4*tau^2*(1/3)+(1/3)*Pi^2)*sqrt(-tau^2+1)+((2*(2*tau^2-1))*arcsin(tau)^2+(2*(1/3-2*Pi*tau^2+Pi))*arcsin(tau)+(1/3)*(16*(-tau^4+tau^2))*arccos(tau)+(tau^2-1/2)*(Pi^2-2))*sqrt(tau^2-1)+(tau+1)*(tau-1)*(-16*arccos(tau)*tau^2*(1/3)+Pi^2-4*Pi*arcsin(tau)+4*arcsin(tau)^2+8*arccos(tau)*(1/3)-2)*tau))/(4*sqrt(tau^2-1)))

simplify(combine(integrand - diff(ans,tau))) assuming tau < -1

0

simplify(combine(integrand - diff(ans,tau))) assuming tau > -1

0

Download nm_int.mw

There are some variants, trading off, say, continuity at (some) points versus compactness, according to piecewise constants for the three regions obtainable by splits at tau=-1 and tau=1.

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