acer

32373 Reputation

29 Badges

19 years, 334 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are answers submitted by acer

You can get around this problem in Maple 2022 with the following,

  VectorCalculus:-PlotVector(w, unconstrainedview = false)

 

In Maple 2022, the PlotVector command is passing the option unconstrained=true to the plots:-arrow command.

That is the problem, a consequence of which is that for your example it generates a plot structure with Float(undefined), which appears blank. Up until Maple 2020.2 it did not do this, and the example worked ok.

As dharr mentioned, this is a bug. In a simpler example of the problem, the following renders as an "empty" plot in Maple 2022 (or Maple 2021.2),

   plots:-arrow([-2,1],[1, 2],unconstrainedview = true)

That seems to go wrong (Maple 2022) with suspect methodology and a (float) division by zero at line 15 of plottools:-arrow2d,
   showstat(plottools::arrow2d,1..15);
 

Is it less noticeable if the right panel (context-menu panel) is collapsed/hidden?

The following attachment contains as much as I can recover (which is significantly more than what the Maple GUI can recover: see notes below).

Eksamenssæt_ac.mw

There were four corrupted and unrecoverable inputs.
1) Opgave 1, section (ii), after "Herefter konjugeres matrix".
2) Opgave 2, section (i), right at its start.
3) Opgave 2, section (ii), just after "Basis for søjlerummet:"
4) Opgave 2), section (ii), just after "Basis for rækkerummet:"

I shall add this example to an earlier bug report I submitted. The underlying problem is the same as the (new) kind that I've only seen since Maple 2022, of an invalid and unclosed Equation XML element.

Do you remember what was at those four missing inputs? Were they all 2D Matrix inputs from the Matrix palette, perhaps? Or anything else that they might have had in common? Such detail might help the GUI developers fix this particular cause.

A DataTable embedded component allows you to enter numeric data in a tabular input format.

In my Maple 2022.2 for Linux I can press the tab key to advance the cursor through the cells of that component.

This also obviates the need to parse the cells, as entering a changed entry in any of the cells is accompanied by an automatic update to the named Matrix (or rtable) associated with the component (one of its properties).

Also, the data and the named Matrix are stored along with the worksheet and directly available upon close/re-open.

There is not a convenient mechanism for controlling the numeric formatting of the display of the entries (if floating-point, say).

The first operand of a procedure is its parameter sequence.

So, if that procedure has been assigned to the name q,

q := (u,v) -> u^2 + v^2:

nops([op(1,eval(q))]);

                2

note: you wrote "arguments", but here we're counting the parameters of the procedure (in its definition), not the arguments (which is what get passed when it's called).

As a followup query you asked about finding extrema of rhs(eq1).

The following shows a local minimum, and a saddle point.

restart;

eq1 := x = (((72*5^(3/2) + 270)*a^2 - 1344*5^(3/2)*a)*w + (9*5^(5/2) - 1485)*a^2 - 2016*5^(3/2)*a - 12544*5^(5/2))/(((288*sqrt(5) + 216)*a^2 - 5376*sqrt(5)*a)*w + (36*5^(3/2) - 1188)*a^2 - 8064*sqrt(5)*a + 6272*5^(3/2));

x = (((360*5^(1/2)+270)*a^2-6720*5^(1/2)*a)*w+(225*5^(1/2)-1485)*a^2-10080*5^(1/2)*a-313600*5^(1/2))/(((288*5^(1/2)+216)*a^2-5376*5^(1/2)*a)*w+(180*5^(1/2)-1188)*a^2-8064*5^(1/2)*a+31360*5^(1/2))

extrema(rhs(eq1), {}, {a,w}, 'cc');

{-10, -10*(1288+389*5^(1/2))/(-10304+1929*5^(1/2))}

cc;

{{a = 0, w = -3/2}, {a = 4480/213-(224/71)*5^(1/2), w = -185/142+(147/71)*5^(1/2)}}

evalf(cc);

{{a = 0., w = -1.500000000}, {a = 13.97822685, w = 3.326788628}}

simplify(eval~(eq1, cc));
evalf(%);

{x = -10, x = (-12880-3890*5^(1/2))/(-10304+1929*5^(1/2))}

{x = -10., x = 3.602012293}

evalf([map[2](eval,[a,w,rhs(eq1)],cc)[]]);

[[0., -1.500000000, -10.], [13.97822685, 3.326788628, 3.602012292]]

plots:-display(
  plots:-pointplot3d([map[2](eval,[a,w,rhs(eq1)],cc)[]],color=red,
                     symbol=solidcircle,symbolsize=20),
  plot3d(rhs(eq1), a=-1..20, w=-3..5, grid=[201,201], view=-12..14, color=blue),
  lightmodel=Light1, orientation=[100,55,0]
);

 

Download extrema_example.mw 

Be careful about misinterpreting spikes in your 3D plot as being finite extrema. Those could indicate a curve along which the expression is discontinuous (eg. not finite), in which case the visually apparent spikes may be merely artefacts due to the granularity of the plot's sampling process.

Consider these curves along which the denominator of rhs(eq1) is zero, ie. rhs(eq1) is +-infinity.

plots:-implicitplot(denom(rhs(eq1)));

The following attachment has one Input Equation (XML) removed, that I believe occurred above and near the text line:
   PC1

PCA_ac.mw

It is concerning that this is the third instance of the very same particular kind of corruption that I've seen reported in the last eight days; see here and here. I am going to amend a bug report to note that:
1) The problem appears to new (to Maple 2022.2?) and to not be rare (which is alarming).
2) The GUI fails to recover significant portions of these corrupted Documents, when it attempts its own recovery.

I'd like to see the underlying problem fixed if possible, but I'd also really like to see the GUI do a much better job of recovery. I've submitted more than one previous bug report on that latter aspect.

I am supposing that you are a Danish student, because of your use of the Gym package.

If you can remember what was in the missing 2D Input line that might be helpful. Did it have Danish characters/accents? Any little knowledge of it might be better than nothing.

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.

First 54 55 56 57 58 59 60 Last Page 56 of 336