acer

32363 Reputation

29 Badges

19 years, 332 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are answers submitted by acer

Here is one way to do that.

It's quite straightforward, and is terser still without the various beautifying options for plotting.

I'll use it a few times below, to get some slightly different effects,

restart;

with(plots): with(plottools,transform):

setcolors("Spring"):
setoptions(size=[400,400], axes=boxed, axesfont=["Times",9],
           labeldirections=[horizontal,vertical], thickness=3);

 

F := unapply([Re,Im](exp(x+I*y)),[x,y]);

proc (x, y) options operator, arrow; [Re(exp(x+I*y)), Im(exp(x+I*y))] end proc

 

PR := plot([seq([x,y,y=-Pi..Pi], x=-2..2, numelems=11)],
           labels=[Re(z),Im(z)], gridlines=false):

 

PC := display(transform(F)(PR), gridlines):

 

display(Array([display(PR, tickmarks=[decimalticks,piticks],
                       axis[2]=[tickmarks=spacing(Pi/4)]),
               display(PC, labels=[Re,Im](exp(z)))]));

 

 


Did you want to make use of this? Perhaps in the labels on the right?

evalc(F(x,y));

[exp(x)*cos(y), exp(x)*sin(y)]


You could also show just the left-side (x<0), since it gives a more
clear presentation for the circles mapped to [0..1,0..1].

Let's take just that portion of the above lines (keeping the same colors).

PR2 := transform((x,y)->[ifelse(x>0,undefined,x),y])(PR):

 

PC2 := display(transform(F)(PR2), gridlines):

 

display(Array([display(PR2, labels=[Re(z)=x,Im(z)=y],
                       tickmarks=[decimalticks,piticks],
                       axis[2]=[tickmarks=spacing(Pi/4)]),
               display(PC2, labels=Equate([Re,Im](exp(z)),evalc(F(x,y))))]));

 

 

 

 

setcolors(ColorTools:-Gradient("Red".."Blue",'best')):

 

PR3 := plot([seq([x,y,y=-Pi..Pi],x=-2..2,numelems=11)],
            gridlines=false):

 

PC3 := display(transform(F)(PR3), gridlines):

 

display(Array([display(PR3, labels=[Re(z)=x,Im(z)=y],
                       tickmarks=[decimalticks,piticks],
                       axis[2]=[tickmarks=spacing(Pi/4)]),
               display(PC3, labels=Equate([Re,Im](exp(z)), evalc(F(x,y))))]));

 

 

Download conf01.mw

The problem in your code is that your solve call returns two answers (both being sets) and you are passing the expression sequence of both of those as arguments to the simplify command.

That makes simplify interpret its arguments like a request for simplify-with-side-relations, which is the cause of your error message.

If you intend on trying to simplify both results from solve in a single call to simplify then you could pass them inside a list. That automatically maps simplify across the elements of the list. Note however that for this example there is no change in the results.

Here it is, using Maple 2019 (like you),

restart

with(Optimization); with(plots); with(Student[VectorCalculus]); with(LinearAlgebra)

_local(Pi)

_local(D)

Warning, A new binding for the name `Student:-VectorCalculus:-D` has been created. The global instance of this name is still accessible using the :- prefix, :-`Student:-VectorCalculus:-D`.  See ?protect for details.

D := proc (p1) options operator, arrow; a-beta*p1 end proc

D := proc (p2) options operator, arrow; a-beta*p2 end proc

r := proc (Pc) options operator, arrow; theta-upsilon*(Pu-Pc) end proc

A := (2*Pu*upsilon^2*U[0]-epsilon*(2*beta*k*lambda*tau0*upsilon*U[0]+2*Cm*beta*upsilon*U[0]-Cm*epsilon*lambda*upsilon+Cr*epsilon*lambda*upsilon-Pu*epsilon*lambda*upsilon-U*epsilon*lambda*upsilon-2*beta*k*lambda*tau0-epsilon*k*lambda*upsilon+2*epsilon*lambda*upsilon*w+2*a*upsilon*U[0]+epsilon*lambda*theta-2*Cm*beta-2*a)*upsilon/(-2*epsilon^2*lambda*upsilon+4*beta*upsilon*U[0]-4*beta)-2*theta*upsilon*U[0]-upsilon*Pu+U*upsilon-w*upsilon+theta)/(2*upsilon*(upsilon*U[0]-1)) >= 0

B := r(Pc) >= 0

DATA_1 := [Cm = 15000, U = 1000, U[0] = 50, Cr = 1000, w = 2000, a = 60000, beta = .8, lambda = .9, tau0 = .4, k = 20000, epsilon = .1]

E := subs(DATA_1, A)

F := subs(DATA_1, B)

solve({E, F}, {theta, upsilon})

{-1.*upsilon*(-1.*Pu+Pc) <= theta}, {upsilon*(15998200.*upsilon^2*Pu-479973.*upsilon*Pu-937303000.*upsilon+3200.*Pu+18752000.)/(15998200.*upsilon^2-479973.*upsilon+3200.) <= theta}, {theta <= upsilon*(15998200.*upsilon^2*Pu-479973.*upsilon*Pu-937303000.*upsilon+3200.*Pu+18752000.)/(15998200.*upsilon^2-479973.*upsilon+3200.), -1.*upsilon*(-1.*Pu+Pc) <= theta}

simplify([%])

[{-upsilon*(-1.*Pu+Pc) <= theta}, {upsilon*(15998200.*upsilon^2*Pu-479973.*upsilon*Pu-937303000.*upsilon+3200.*Pu+18752000.)/(15998200.*upsilon^2-479973.*upsilon+3200.) <= theta}, {theta <= upsilon*(15998200.*upsilon^2*Pu-479973.*upsilon*Pu-937303000.*upsilon+3200.*Pu+18752000.)/(15998200.*upsilon^2-479973.*upsilon+3200.), -upsilon*(-1.*Pu+Pc) <= theta}]

Download Q3_ac.mw

You can construct this kind of thing using nprintf.

`#msub(mi("t"),mn("1"));`

`#msub(mi("t"),mn("1"));`

Yes, the current convention makes it easier to visually distinguish between the 2D Math typeset output of the two forms, t__1 versus t[1].

For reference on that mn numeric element, perhaps see here.

The Fractals:-EscapeTime routines work with images, rather than plots. That allows for rendering which is much lighter on using GUI resources. Computationally, they attempt to use the Compiler (successful in the Julia or Mandelbrot cases), which is faster than even the evalhf mode fallback. Their computation is also parallelized.

In contrast the plotting schemes (basically, 2D densityplot, or a carefully oriented plot3d 3D surface plot) induce use of much more GUI resources (time and memory) for the rendering. And computationally, they attempt to use fast evalhf mode by default, but are neither compiled nor parallelized. The densityplot result looks a bit better, IMO, with less unnecessary whitespace around the plot than what plot3d plots have. But the rendering of densityplot results is often harder on the GUI than is that of plot3d, at a common higher resolution.

An advantage of doing it with actual plots is that one can easily see the code and formula being used for the iterative scheme. But if grid resolution is too high then the rendering may be too intensive, and the GUI can "go away".

The attachment shows your example (remove/adjust the sin(z) term if not wanted) using 2D densityplot. Various different grid resolutions are used, according to whether it's doing a single frame plot, a "traditional" animation, or an Explore. It doesn't call evalf explicitly (unlike the linked code you have) because the Julia01 procedure calls will get run under evalhf mode by the densityplot command.

julia01.mw

In your GUI Options menus, what does it say for the item:
   Interface -> "Open worksheets in"
?  Is it set to "New Tab", or to "New Window".

AFAIK, that setting is stored in the GUI preferences file in the field,
   MDIOnOpenAndNew
where "false" means open in a new tab rather than a new/separate GUI window.

Note that when you change the GUI Option via menus then you have to fully close and re-launch, to get a changed effect. Similarly, if you edit the preferences file with an external editor -- while the Maple GUI is open -- then fully closing the GUI will clobber the edits.

Note that this is not that shared-kernel stuff. That's about the Maple kernel mserver engines Those are separate processes (and non-Java, besides). This is about the Java GUI windowing.

I always have the option set to "New Tab", ie. MDIOnOpenAndNew=false in the preferences file.

I don't know whether you tried to import your preferences from M2024 (and that it failed to import your M2024 setting for this option), or whether your started from scratch with GUI preferences and perhaps overlooked setting this one.

ps. It's possible that this is not your underlying problem (or that it's not all working as intended). Apart from clicking the desktop launcher, the aspect I've described also controls whether File->New results in a new tab or a new/separate window. Is that File->New already behaving OK, while the launcher is not? If they are different then my first guess about this being a simple option setting issue may be wrong. (...and then I'd ask whether you can concurrently Open the same exact .mw file twice, or whether the exec line in your launch icon passes any special options to the executable, etc...).

Have you tried storing KinAddCurveData in a .mla Library Archive file?

By that I mean using the Create and the Save commands from the LibraryTools package.

Then at the start of a new worksheet you would append the new .mla's location to libname, ie.
   libname := "mylocation/mylib.mla", libname:
where, naturally, you would replace with the actual name and location.

If that worked then it would be possible to (in one of a few ways) to make it automatically available without the need to manually prepend to libname.

But first check whether it works. (This is the usual way to make a procedure available across sessions, without completely recreating it. I hazily recall that procedures created via  define_external results could also be re-used in this way, but I'm not 100% sure. So you could test it.)

You could first test with a version of that was just something simple, like,
   KinAddCurveData := proc(x) x^2; end proc
That'd be a sanity check that the .mla approach itself was working. Once it did, you could try with the define_external version.

You might also need to look at the Help page with Topic,
    define_external,save
You may need to also pass the appropriate GENARGS option to define_external.

The creation and save session might look something like this,

KinAddCurveData :=
   define_external( 'AddCurveData',
                    'GENARGS'=proc()
         'LIB'=ExternalCalling:-ExternalLibraryName("C:\\Users\\tom\\Documents\\Excel docs\\kinexa dll solver\\equilibriumdll\\Equilibrium.dll");
                              end proc
);

mymla := LibraryTools:-Create("C:\\Users\\tom\\Documents\\MyEquil.mla");

LibraryTools:-Save(KinAddCurveData, mymla);

The usage session might then look like,

restart;
libname := "C:\\Users\\tom\\Documents\\MyEquil.mla",libname;

KinAddCurveData();

If it works you could also make the creation session fancier (test whether the .mla exists already, optionally delete it first, etc).

One thing I am not sure about is whether the GENARGS option allows you to use any arbitrary location for the .dll file, or whether it would need to be some place in the runtime linking path. A hint'd be if it complains about not finding it...

Please check for spelling mistakes, etc.

Your equations eq1, eq2 have instances of f and theta instead of f(x) and theta(x).

That is the meaning of the error message that you got, conveying that problem about f vs f(x).

You also have one too few boundary conditions.

So I've added D(theta)(9)=1, but you could change it.

restart

kernelopts(version);

`Maple 18.02, X86 64 LINUX, Oct 20 2014, Build ID 991181`

with(plots):

eq1 := diff(f(x), x, x, x)+(1/2)*(1+phi[1])^2.5*(1-phi[2])^2.5*((1-phi[2])(1-phi[1]+phi[1]*rho[s1]/rho[fl])+phi[2]*rho[s2]/rho[fl])*f(x)*(diff(f(x), x, x))+((1+phi[1])^2.5*(1-phi[2])^2.5*M+1/K[p])*sin(alpha)^2*(1-(diff(f(x), x)))+(1+phi[1])^2.5*(1-phi[2])^2.5*((1-phi[2])(1-phi[1]+phi[1]*rho[s1]*beta[s1]/(rho[fl]*beta[fl]))+phi[2]*rho[s2]*beta[s2]/(rho[fl]*beta[fl]))*lambda*cos(gamma)*theta(x) = 0:

eq2 := (k[s2]+2*k[fl]-2*phi[2](k[fl]-k[s2]))*(k[s1]+2*k[fl]-2*phi[1](k[fl]-k[s1]))*(diff(theta(x), x, x))/((k[s2]+2*k[fl]+phi[2](k[fl]-k[s2]))*(k[s1]+2*k[fl]+phi[1](k[fl]-k[s1])))+(1/2)*Pr*((1-phi[2])(1-phi[1]+phi[1]*rho[s1]*C[p][s1]/(rho[fl]*C[p][fl]))+phi[2]*rho[s2]*C[p][s2]/(rho[fl]*C[p][fl]))*f(x)*(diff(theta(x), x))+upsilon*Pr*theta(x)/((1-phi[2])(1-phi[1]+phi[1]*rho[s1]*C[p][s1]/(rho[fl]*C[p][fl]))+phi[2]*rho[s2]*C[p][s2]/(rho[fl]*C[p][fl])) = 0:

bcs := f(0) = 0, (D(f))(0) = 0, (D(f))(9) = 1;

f(0) = 0, (D(f))(0) = 0, (D(f))(9) = 1

theta(0) = 1, theta(9) = 0, (D(theta))(9) = 1

a1 := [phi[1] = .1, phi[2] = .1, rho[s1] = 3970, rho[s2] = 8933, rho[fl] = 997.1, beta[s1] = .85, beta[s2] = 1.67, beta[fl] = 21, k[s1] = 40, k[s2] = 401, k[fl] = .613, C[p][s1] = 765, C[p][s2] = 385, C[p][fl] = 4179, sin(alpha) = 0, cos(gamma) = 1, M = 1, K[p] = .5, lambda = 0, upsilon = 1]:

c1 := dsolve({bcs, bcs1, subs(a1, eq1), subs(a1, eq2)}, numeric):

TFP := Typesetting:-Typeset(theta(x)):

display(p1, p2, p3, p4, thickness = 3, legendstyle = [location = right], size = [700, 450]);

 

Download HIPT_ac.mw

Your substitution of the found roots is only being done at Digits=10. That means the working precision for the operations in the evaluation of the expression upon substitution. It does not mean that the results of that substitution in the expression (a compound expression) will be accurate to 10 places.

You can be a more accurate result from the substituion by using a higher Digits for that substitution/evaluate-at-a-point step.

I do this  below by wrapping the 2-argument eval calls (for evaluating the expression at a point) in an evalf[20] call so that it uses Digits=20 for the evaluations.

I also wrap that in evalf[5] so the the results are terser with just five digits.

For example,

forget(evalf);
[seq(evalf[5](evalf[20](eval(poly, x = SL[i]))), i = 1 .. nops(SL))];

   [         -11            -11             -11            -11  ]
   [2.8353 10    - 1.0886 10    I, 1.2648 10    - 3.3670 10    I]

forget(evalf);
[seq(evalf[5](evalf[10](eval(poly, x = SL[i]))), i = 1 .. nops(SL))];

   [-0.0000035746 + 0.0000044384 I, -0.000025687 - 0.0000048971 I]

Root_Poly_ac.mw

@C_R You asked about a Help page.

On the Help page with Topic,
    worksheet,documenting/2DMathShortcutKeys   (to which several other 2D Math pages like)
there is table item for backslash, with description,

   Escape Next Character (For displaying "^" or "_", for example)

In other words, it's a somewhat general way to enter literal plaintext characters in 2D Input/Math mode, as opposed to marked up entry.

That Help page is linked to from several other 2D Math pages, and appears 2nd in the Browser when querying for just "shortcut". The phrasing doesn't quite convey the breadth of the mechanism.

There's a less accurate description on the Help page with Topic,
   worksheet,help,QuickHelpDetails
ie,

   Escape next character for entering "^"

 

Unfortunately, there are no examples of such escaping on the Help page,
   worksheet,documenting,2DMathDetails

The use of % to denote an inert form is also underdocumented. There's a blurb on ?value, and a link there from ?InertForm. But the search ?inert doesn't provide much of direct use on it.

On my Linux there is a palettes subdirectory, at the same location as the maplerc GUI preferences file, if I have a Favorites palette set up.

For example, for my Maple 2022 that palettes subdirectory contained a Favorites.properties file. The maplerc file references it in two places: once to denote it as expanded or not, and once for its palettelist.

Perhaps there is a similar file and subfolder on your first machine, that you also need to copy over.

You could add one or more newline characters "\n" to the end of the axis label.

Below, I add just one.

legend_covers_plot_labels_ac.mw

I'm not entirely sure what you mean by, "So there should be a clear anwer, giving me back the whole RootOf function in the intervall."

Is it perhaps this:

restart

solve({x = RootOf(_Z^2-y, index = real[2])+1, 1 < y, y < 2, y < x}, x)

{x = RootOf(_Z^2-y, index = real[2])+1}

Download QUESTI_2_ac.MW

Or, modifying your original code to only include the extra argument x, the "whole RootOf" form is returned, without the Warning,

restart;
Sol := {x = RootOf(_Z^2 - y, index = real[2]) + 1, 1 < y, y < 2}:
area := {1 < y, y < x}:
Sol_area := solve(Sol union area, x);

{x = RootOf(_Z^2-y, index = real[2])+1}

Download QUESTI_2_acc.mw

I'm not sure what form you want for the final result, but here are two ways to get it as piecewise, and [edited] one way to get it as a single sequence of (in)equalities.

restart;

solve({a = 1/y, b = x/(x + y - 1), x = (y - 1)^2, 1 < y, y < 5/4}, {b,y,x});

piecewise(a <= 4/5, [], a < 1, [{b = 1-a, x = (a-1)^2/a^2, y = 1/a}], 1 <= a, [])

T := solve({a = 1/y, b = x/(x + y - 1)},[x,y]);

[[x = b*(a-1)/(a*(b-1)), y = 1/a]]

new := eval({x = (y - 1)^2, 1 < y, y < 5/4}, T[1]);

{b*(a-1)/(a*(b-1)) = (1/a-1)^2, 1 < 1/a, 1/a < 5/4}

solve(new,b);

piecewise(a <= 4/5, [], a < 1, [{b = 1-a}], 1 <= a, [])

solve(new,[a,b]);

[[a < 1, 4/5 < a, b = 1-a]]

Download QUESTI_1_ac.mw

nb. I do not have the last call as, say, just,
    solve(new)
or,
    solve(new, {a,b})
because while those happen to produce a desired result with requested inequalities for `a`, that happens by "luck" due to the lexicographic ordering of your variable names. Ie, `a` comes before `b`.  Compare,

solve(new,[a,b]);

[[a < 1, 4/5 < a, b = 1-a]]

solve(new,[b,a]);

[[b < 1/5, 0 < b, a = -b+1]]

I prefer it more robust against switching around the variable names, or using another pair of names.

The reason that solve returns NULL is that solving for the {r} variables only has a solution if a constraint is satisfied by some of the remaining names (say, the f[...] names).

restart;

t := add(a[j]*q^j, j = 0 .. 9):

H := diff(t, q):

F := diff(t, q $ 2):

p1 := simplify(eval(t, q = x)) = y[n]:
p2 := simplify(eval(F, q = x)) = f[n]:
p3 := simplify(eval(F, q = x + h/4)) = f[n + 1/4]:
p4 := simplify(eval(F, q = x + h/2)) = f[n + 1/2]:
p5 := simplify(eval(F, q = x + (3*h)/4)) = f[n + 3/4]:
p6 := simplify(eval(F, q = x + h)) = f[n + 1]:
p7 := simplify(eval(F, q = x + (5*h)/4)) = f[n + 5/4]:
p8 := simplify(eval(F, q = x + (3*h)/2)) = f[n + 3/2]:
p9 := simplify(eval(F, q = x + (7*h)/4)) = f[n + 7/4]:
p10 := simplify(eval(F, q = x + 2*h)) = f[n + 2]:

r := seq(a[i], i = 0 .. 9);

a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]

s := p || (1 .. 10):

indets([s],name);

{h, x, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], f[n], f[n+1], f[n+2], f[n+1/2], f[n+1/4], f[n+3/2], f[n+3/4], f[n+5/4], f[n+7/4], y[n]}

raw:=eliminate([s],[r]):

alt := collect(raw[1],
               [f[n],f[n+1],f[n+2],f[n+1/2],f[n+1/4],f[n+3/2],f[n+3/4],f[n+5/4],f[n+7/4]],
               u->simplify(factor(u))):

#print~(alt):

alt[7];  # one of the results

a[6] = (1/135)*(4*x+5*h)*(23*h^2+40*h*x+16*x^2)*f[n]/h^7-(2/45)*(2477*h^3+7740*h^2*x+7440*h*x^2+2240*x^3)*f[n+1]/h^7-(1/135)*(333*h^3+1180*h^2*x+1296*h*x^2+448*x^3)*f[n+2]/h^7-(4/135)*(627*h^3+1780*h^2*x+1584*h*x^2+448*x^3)*f[n+1/2]/h^7-(4/135)*(2003*h^3+6740*h^2*x+6960*h*x^2+2240*x^3)*f[n+3/2]/h^7+(64/135)*(139*h^3+415*h^2*x+384*h*x^2+112*x^3)*f[n+3/4]/h^7+(128/135)*(111*h^3+361*h^2*x+360*h*x^2+112*x^3)*f[n+5/4]/h^7+(64/45)*(x+h)*(13*h^2+32*h*x+16*x^2)*f[n+7/4]/h^7

raw[2]; # this must equal zero for raw[1] to hold;

{96*f[n]+6720*f[n+1]+96*f[n+2]+2688*f[n+1/2]+2688*f[n+3/2]-5376*f[n+3/4]-5376*f[n+5/4]-768*f[n+7/4]-768*f[n+1/4]}

content(raw[2][1]);

96

raw[2]/~%; # this must equal zero for raw[1] to hold;

{f[n]+70*f[n+1]+f[n+2]+28*f[n+1/2]+28*f[n+3/2]-56*f[n+3/4]-56*f[n+5/4]-8*f[n+7/4]-8*f[n+1/4]}

#solve([s],[r],parametric); # another way

 

 

Download abdulganiy_1.mw

Is this the effect you're after?

Q_DataFrame_ac.mw

(If it is, and it gives you a problem for some other example then let me know and I could robustify the subsop step).

ps. I think it might be nice to have an option for that in the Tabulate static export of the Dataframe object.

4 5 6 7 8 9 10 Last Page 6 of 336