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

You could pass the signchange=false option to implicitplot, so that discontinuties in f2 (eg. switching from +infinity to -infinity) are not shown.

If there's a jump discontinuity across which the sign is changed then that's not the same as an actual root.

restart:

with(plots):

a:=8:
f1 := x1^4-1999/1000*x1^2*x2^2+x2^4-1;
f2 := tan(x1+x2)-x2*sin(x1);

x1^4-(1999/1000)*x1^2*x2^2+x2^4-1

tan(x1+x2)-x2*sin(x1)

raw:=[eliminate({f1,f2}, {x1})]:nops(raw);

4

sol:='sol':
for i from 1 to 4 do
  raw[i][2];
  S2[i]:=[fsolve(%[],x2=-a..a,maxsols=100)];
  sol[i]:=seq((X1->`if`(is(X1>=-a and X1<=a),[X1,s],NULL))(eval(eval(x1,raw[i][1]),x2=s)),s=S2[i]);
end do:

K:=convert(sol,set);

{[-5.398255414, -5.360783273], [-5.364764327, -5.401933762], [-3.769355031, -3.647947770], [-3.583391246, -3.707848725], [-3.255732987, -3.396566067], [-3.185334350, 3.329928430], [-3.086665168, 2.927318296], [-2.555889626, -2.740025742], [-1.397907948, -.9772820729], [-1.192190530, .6493211306], [-.9368767219, -1.370005085], [.5881601300, -1.160042909], [2.010992428, 2.243626421], [2.194495669, 1.955777198], [3.095133265, -3.244700481], [3.113309320, 3.261859649], [3.172325434, 3.018375967], [3.192255688, -3.039528488], [4.026457505, 4.130722938], [4.124511644, 4.019959371]}

nops(K);

20

seq(eval([f1,f2],Equate([x1,x2],s)),s=K);

[0.2e-6, -0.102e-6], [-0.4e-6, -0.67e-7], [0.1e-6, -0.7e-8], [-0.1e-6, -0.3e-8], [0., 0.42e-8], [0.1e-6, 0.25e-8], [-0.3e-7, 0.7e-9], [-0.1e-7, 0.], [0.1e-8, -0.8e-9], [0.1e-8, -0.4e-9], [0., -0.2e-8], [-0.4e-9, 0.24e-8], [0., -0.2e-8], [-0.1e-7, -0.3e-8], [0., -0.16e-8], [0., 0.219e-8], [-0.8e-7, -0.750e-8], [-0.2e-7, 0.9e-9], [0.1e-6, -0.29e-7], [0.2e-6, -0.12e-7]

display(
implicitplot([f1, f2], x1 = -a .. a, x2 = -a .. a, gridrefine=4, crossingrefine=3, signchange=false,
             color = [red, blue], thickness = 0),
pointplot(K, color=black, symbol=solidcircle));

 

Download oneman_impl.mw

[edit] Here is one solution to the OP's followup query of what (apparently) they actually wanted. It's not clear to me what is wanted when the function call does not have exactly three arguments.

restart

kernelopts(version)

`Maple 2022.2, X86 64 LINUX, Oct 23 2022, Build ID 1657361`

`print/#mover(mi("U"),mo("&sim;"))` := proc()
   uses Typesetting;
   if _npassed=3 then
     msub(mover(mi("U"),mo("&sim;")),Typeset(EV(args[3])))(args[1..2]);
   else mover(mi("U"),mo("&sim;"))(args);
   end if;
end proc:


Below I used the "Over" item in the Layout palette, and the "~" item in the Punctuation palette,
to get the `#mover(mi("U"),mo("&sim;"))`symbol.

`#mover(mi("U"),mo("&sim;"))`

`#mover(mi("U"),mo("&sim;"))`(v1, v2, v3)

`#mover(mi("U"),mo("&sim;"))`(v1, v2, v3)

`#mover(mi("U"),mo("&sim;"))`(v1, v2)

`#mover(mi("U"),mo("&sim;"))`(v1, v2)

Download printf_sub_ex2.mw

[end edit. Below is my original response to the original Question.]

The pretty-printing of BesselJ can be controlled by calling appropriately the command,
    Typesetting:-EnableTypesetRule

The related Typesetting commands don't seem designed to allow for customization of user-defined functions. But there's nothing to stop you from using the remember table for its QueryTypesetRule as a semaphore within a user-defined custom print-extension procedure such as `print/f`.

For example,

restart;

kerneopts(version);

kerneopts(version)

`print/f` := proc(a, b, c)
   uses Typesetting;
   if Typesetting:-QueryTypesetRule("f")=true then
     mrow(msup(mi("f"),
               mrow(Typeset(a),mo("&InvisibleTimes;"),
                    Typeset(b))),
          mfenced(Typeset(c)));
   else
     'f(args)';
   end if;
end proc:

 

f(x,y,z);

f(x, y, z)

Typesetting:-QueryTypesetRule("f") := true:

f(x,y,z);

f(x, y, z)

BesselJ(n,x);

BesselJ(n, x)

Typesetting:-EnableTypesetRule("BesselJ"):

BesselJ(n,x);

BesselJ(n, x)

Download printf_ext_ex.mw

The following link is as much as I can recover from your upload called "Cengel2.mw". It has recovered significantly more than the Maple 2022.2 GUI is able to recover.

Cengel2_ac.mw

(I suspect that is contains as much as could possibly be recovered by any means. The problem appears to be the same as in another example I saw very recently on Dec 12. A single Equation XML element in an Input was invalid. Its removal -- leaving all parent elements intact -- appears to achieve maximal recovery. I have seen many corrupt worksheets before, but up until then never that particular issue. I wonder whether the cause was new, or something common to M2022.2.)

Your wrote "how to combine an expression", but what you show as your goal is a new operator (not an expression) whose body happens to contain the combined form.

x := t -> sin(a)*cos(t) + cos(a)*sin(t):

x := unapply(combine(x(t)),t);

    x := t -> sin(a+t)

You haven't shown where your original operator came from. But perhaps it would be more convenient to begin with just expressions, then do all your manipulations, and then use (using, say unapply) form operators only as needed.

Forming operators manually and then only ever using then with function calls like x(t) -- to get an intermediate expression -- seems an awkward workflow.

As N gets larger is more efficient to do,

   Matrix(N,N,fill=undefined)

than,

   Matrix(N,N,(i,j)->undefined)

The technique you apply may need to depend on what you know of the form of the input. That depends on how robust you want to make it if the form is slightly different, ie. how much defensive programming you wish to have.

Here are some alternatives, using subsindets or subsop.

Add_range_ac.mw

The matter of whether the command used involves an external call is not central. Nor is whether the command is a "library function" or a kernel builtin, or what have you.

It's also unlikely the RealDomain:-simplify is going to be a place to find such functionality in the near future, IMO.

The first place that I'd hope to find the functionality, as you've expressed it algebraically, would be under the is and coulditbe commands. For example, [have I expressed this correctly?]

restart;
F1 := a + b + c + d > 0
      and
      a*b + a*c + a*d + b*c + b*d + c*d > a^2 + b^2 + c^2 + d^2:
F2 := d*c*b*a > 0
      and
      a*b*c + a*b*d + a*c*d + b*c*d > 0:

not is( F1 and not F2 ) assuming real;
                              true

Unfortunately several equivalent forms returned FAIL (after taking a while).

After that I might hope to find it using is under assumptions. Then perhaps simplify (but not using &implies).

In Maple 2018.2 (and 2022.2, say)

eq := binomial(2*n, n)/2 = binomial(2*n-1, n-1):

is( expand(eq) ) assuming n::posint;

             true

Also for n::integer, n<>0 it seems.

Is this the kind of thing you mean by getting the SAT-solver to work on it?

sat_fun.mw

Did you also want an interative application, with in which clicking on any square caused the colors to flip, with the ability to reset with a random Matrix?

How's this?

Solution_Methods_ac.mw

It might be missing just one equation in the "worked example" Section, just before one instance of the sentence "The problem is therefore non characteristic."

A simple change of variable seems adequate to get the result.

Below I use Maple 2020.2, since your Question is marked with that major version number.

restart;
kernelopts(version);

  Maple 2020.2, X86 64 LINUX, Nov 11 2020, Build ID 1502365

H := Int(exp(I*k*x)*sech(x), x=-infinity .. infinity):

value(IntegrationTools:-Change(H, s=exp(x), s));

                    Pi*sech(1/2*Pi*k)


A similar approach works for your followup example. Also, for either example we could start with active int instead of applying value on an inert Int, Ie.,

H2 := int(exp(I*k*x)*tanh(x)*sech(x)^3,x=-infinity..infinity):

IntegrationTools:-Change(H2, s=exp(x), s);

            1/6*I*Pi*sech(1/2*Pi*k)*k*(k^2+1)

The Classic worksheet interface is bundled in the 32-bit version of Maple 2017 for MS-Windows, but not in the 64-bit version of that release.

If you'd prefer the special symbol to be rendered in upright Roman font, instead of italics, then you could use,
   b^`#mo("&bot;");`
instead of,
   b^`&bot;`
 

plots:-display(
  plots:-textplot([2,2,b^`&bot;`]),
  caption=typeset("the pole at point ",
                  [2,2], " is ", b^`&bot;`)
);

First I'll show you an easy way to get a partial method. Then I'll give you some links to related, older Questions in which the answers get it more completely but also require altering how you initially input the example.

An easy way:

You can do something quite close to that, in two context-panel steps.

First, you could apply the command  eval(..., 1)  to the input. You could do this from the context-panel, using the item "Apply a Command". The command to enter in the popup box is eval and the extra argument to it is 1 .

Second, you could choose the context-panel choice "Simplify" -> "Simplify" (ie. in the submenu choices).

Attached is an example. I did it as above.  CM_eval1.mw

Unfortunately it is quite difficult to prevent or delay the numeric coefficient such as 50/10 from reducing down to just 5, on account of automatic simplification of numeric arithmetic.

More complicated ways:

The following approaches mostly require use of the InertForm package and/or wrapping the initial input in a call to a custom procedure (which will do the fancy work). This can avoid the automatic simplification issue.

1) Take a look at this idea, which is closer to your idea I suspect, and not too much extra setup (also coming here).
or,
2) Have a look at this and this (which both show the results across several lines of output).

The minimize command is not strong at multivariate problems. Sometimes it gets confused about computing & using derivatives, and ends up deciding upon end-points (and not necessarily the correct ones).

Sometimes you can get lucky with it. For fun...

minimize(x^3 + y^3 + z^3 - 4*x*y*z, x = 0 .. infinity, y = 0 .. infinity) assuming z>0;
minimize(%, z=0..infinity, location);
minimize(x^3 + y^3 + z^3 - 4*x*y*z, x = 0 .. infinity) assuming y>0, z>0;
minimize(%, y=0..infinity) assuming z>0;
minimize(%, z=0..infinity, location);
First 54 55 56 57 58 59 60 Last Page 56 of 336