MaplePrimes Questions

I'd like to define a proc, which takes first argument to be either an ode (i.e. type `=`) or set of ode's, or list of ode's.

However, I do not know how to tell Maple that the list or set, if that is the type, to be a list of `=` and no other type.

Here is what I tried to make it more clear

If I do this

restart;

interface(warnlevel=4);
kernelopts('assertlevel'=2): 


foo:=proc(ode::{`=`, set,list},func::`function`,$)
   print("ode=",ode);
   print("func=",func);
end proc:

Then Maple will check that the first argument is ANY one of `=`, set or list. 

But does not check if the list or set contains only equations of type `=`.  So I am able to call the above like this

ode1:=diff(y(x),x)=1:
ode2:=diff(y(x),x)=x:
foo(ode1,y(x));  #this is OK
foo([ode1,a],y(x))  #this is wrong

Which is wrong, since `a` is not of type `=`.

Next I tried this (I also wanted to check that if first argument is list or set, that it is not empty, so added extra check)

restart;
interface(warnlevel=4);
kernelopts('assertlevel'=2):

foo:=proc(ode::{`=`, 
                   And(set,satisfies(x-> (numelems(x)<>0 and type(x,`=`))  )),
                   And(list,satisfies(x-> (numelems(x)<>0 and type(x,`=`))  ))
                   },
                   func::`function`,$                                   
                   )

  print("ode=",ode);
  print("func=",func);
end proc;

But the above gives an error

ode1:=diff(y(x),x)=1:
ode2:=diff(y(x),x)=x:

foo([ode1,a],y(x))  

I also tried

foo:=proc(ode::{`=`, 
                   And(set,satisfies(x-> type(x,`=`)  )),
                   And(list,satisfies(x-> type(x,`=`) ))
                   },
                   func::`function`,$                                   
                   )

   print("ode=",ode);
   print("func=",func);

end proc;

Also gives erorr when called 

foo([ode1,ode2],y(x))

Ofcourse, I can just leave the check as in first case above, and in the proc itself, do the check myself manually by going over each entry in the list or set to make sure each entry is of type `=`. 

But I wanted Maple to do this work for me, if possible.

What is the correct syntax for doing so?

Maple 2020.2

 

[Perhaps this should be a Post rather than a Question.]

As far as I can tell, RootOf is the only Maple command that takes a bound variable on input and returns an unevaluated form with the bound variable renamed (to _Z). Why is that? Either all should do it (definite integrals, limit, sum, etc.) or none should. 

Pros:

Making a substitution for a variable that occurs both free and bound in the same expression is a major source of programming error. Renaming bound variables helps to ameliorate that. 

Cons:

The unexpected appearance of _Z in their results seems to be a great source of confusion to new users. However, if more commands did this, perhaps it would be more expected.

Feel free to start a brainstorming discussion on this, as if it were a Post, even if you don't have a direct Answer for the Question. If that's the way that the thread heads, I'll change it to a Post.

Hi,

I'm experiencing something quite annoying.

When copying Maple input code from an executable block into a document block, just after a line of text was written.

So for example <CTRL+T><write some text><CLICK ENTER FOR \newline><CTRL+M><PASTE MAPLE INPUT 1D CODE><CLICK ENTER>

The block doesn't get executed. I don't see the blue Maple output. Why is that? Is this a bug or I'm I doing something wrong. Normally logic would dictate after pressing enter it would execute the 1D code and simply show the blue output just below the 1D one-liner?

Another question:

I want to write the values of function g(x,t) as scientific notation.  I mean I want to write 1.95*10^(-3)  instead of 0.001953125 etc.


Yes, by clicking right-click and clicking the numeric formatting, I can transform all columns of Array A, but I want to transform just the last column g(x,t) in Array A.

 

restart:
  f:=(x,t)->x*t;
  g:=(x,t)->x^2*t;interface(rtablesize=20):
  A:=Array( [ [`x`,`t`,`f(x,t)`, `g(x,t)`],
              seq
              ( seq
                ( [i, j, f(i,j), g(i,j)],
                  j=0.125..0.875, 0.25
                ),
                i=0.125..0.875, 0.25
              )
            ]
          );  

 

lambda:=0.1:N:=5:M:=sqrt(N(N+1)):omegap:=10:phi:=0:

var:={n(t),u(t)}:
dsys:={diff(n(t),t)=-2*(n(t)-N)+(u(t)-abs(M)*exp(I*phi))*exp(-2*I*omegap*t/lambda)+conjugate((u(t)-abs(M)*exp(I*phi))*exp(-2*I*omegap*t/lambda)),diff(u(t),t)=-2*(1-I*delta)*u(t)+2*(n(t)-N)*exp(-2*I*omegap*t/lambda)+2*abs(M)*exp(I*phi)}:
res1:=dsolve(dsys union {n(0)=0,u(0)=0},numeric,output=listprocedure):

# (this command need to be changed) P1:=plots[odeplot3](res1,[[t,(n(t))]],0..10,axes=boxed,tickmarks = [3, 2], color = black, thickness = 4, linestyle = solid, titlefont = [Helvetica, roman, 18], labeldirections = [horizontal, vertical], labelfont = [Helvetica, roman, 24]);

The member command allows testing, if a value is in a table.

But is it possible to check if the index is used, not the value?

L["hello"] := "funny"

"funny"

(1)

member("hello", L)

false

(2)

member("funny", L)

true

(3)

``

Download list.mw

I am trying to plot generator reactive output (Q) over a range of generator power output (P) with field current (Ifldc) and terminal voltage (Et) constant using “solve”. The system of equations includes an interpolating fiction Ifld(el).

I’m looking for some help as to how to configure a solution. Attached are a few of my failed attempts.

The upload of my file deleats the "solve" fo my first try it is:

     


 

``

``

MvaGen := 1354; PfGen := .935; KvGen := 24

                   

           Xd__u := 1.89 - Synchronous reactance of d-axis, Unsatuarted

              Xq__u := 1.80 - Synchronous reactance of q-axis, Unsatuarted

              X__l := .26   - leakage reactance d or q-axis``

``

            Ifld__base := 3114

``

Open Ckt Sat Curve DS807-1a

     First col=Ifld amps   

     Second col= el voltage behind leakage reactance

 

OC_SatDat := Matrix(16, 2, {(1, 1) = 0, (1, 2) = 0., (2, 1) = 655.6456, (2, 2) = .3422578, (3, 1) = 1009.961, (3, 2) = .5331404, (4, 1) = 1253.12, (4, 2) = .6492209, (5, 1) = 1562.724, (5, 2) = .8014143, (6, 1) = 1893.545, (6, 2) = .9329786, (7, 1) = 2201.68, (7, 2) = 1.033593, (8, 1) = 2487.276, (8, 2) = 1.108416, (9, 1) = 2793.943, (9, 2) = 1.157452, (10, 1) = 3122.338, (10, 2) = 1.203911, (11, 1) = 3690.959, (11, 2) = 1.263294, (12, 1) = 4259.141, (12, 2) = 1.307202, (13, 1) = 4827.028, (13, 2) = 1.340795, (14, 1) = 5351.085, (14, 2) = 1.366646, (15, 1) = 5787.775, (15, 2) = 1.387329, (16, 1) = 6224.391, (16, 2) = 1.405433})

  ido := It*sin(theta+delta)

Plot OC saturation with field current in pu

 

with(LinearAlgebra)

with(ArrayTools)

with(plots)

      OC_Sat_Ifld_pu := Column(OC_SatDat, [1])/Ifld__base

         OC_Sat := Concatenate(2, Column(OC_SatDat, [2]), OC_Sat_Ifld_pu) 

````

iterpolate values of field current vs el from OC sat curve

 

                                    pts_el := Column(OC_Sat, [1]); pts_Ifldpu := Column(OC_Sat, [2])

 

 

                         Ifield as a function of el  ->  Ifld := LinearInterpolation(pts_el, pts_Ifldpu)

``

 

Solve for Q with

    

P = .935; Iflc := 1.88; Et := 1.0

 

NULL

TRY1

``

 Eq1 := Ir = P/Et; Eq2 := Ix = Q/Et    Eq3 := It*sqrt(Ir^2+Ix^2)     Eq4:=theta = arctan(Q, P)

``

    Eq5 := el = abs(Et+X__l*(Ix+I*Ir))      Eq6 := `&Psi;AG__d` = Xad__u*Ifld(el)   Eq7:=K__ds = el/`&Psi;AG__d`

     NULL 

NULL Eq8 := Xd__s = K__ds*Xad__u+X__l   Eq9 := `&Psi;AG__q` = Xaq__u*Ifld(el)    Eq10 := K__qs = el/`&Psi;AG__q`

 

   Eq11 := Xq__s = X__l+K__qs(el)*Xaq__u      Eq12 := Eq = Et+Xq__s(el)*(Q/Et+I*P/Et)

NULLNULL

    

Eq13 := delta = argument(Eq)        Eq14 := eqo = Et*cos(delta)    Eq15 := ido = It*sin(theta+delta)

``

Eq16 := EI = Xd__s*Iflec; Eq17 := EI = Ido*Xd__s+eqo

``

 
syst := {E15, Eq1, Eq10, Eq11, Eq12, Eq13, Eq14, Eq16, Eq17, Eq2, Eq3, Eq4, Eq5, Eq6, Eq7, Eq8, Eq9}

 

   

NULL

solve(sys, {Eq, Ir, It, Ix, K__ds, K__qs, Q, Xd__s, Xq__s, el, eqo, ido, theta, `&Psi;AG__d`, `&Psi;AG__q`})

Warning, solving for expressions other than names or functions is not recommended.

 

 

NULL         

TRY 2

              NULL

`` Ix := proc (Q) options operator, arrow; Q/Et end proc   It := proc (Q) options operator, arrow; sqrt(Ir^2+Ix^2) end proc     theta := proc (Q) options operator, arrow; arctan(Q, P) end proc

``

 el := proc (Q) options operator, arrow; abs(Et+X__l*(Ix(Q)+I*Ir)) end proc      `&Psi;AG__d` := proc (Q) options operator, arrow; Xad__u*Ifld(el(Q)) end proc   K__ds := proc (Q) options operator, arrow; el(Q)/`&Psi;AG__d`(el(Q)) end proc``

NULL Xd__s := proc (Q) options operator, arrow; X__l+K__ds(el(Q))*Xad__u end proc   `&Psi;AG__q` := proc (Q) options operator, arrow; Xaq__u*Ifld(el(Q)) end proc    K__qs := proc (Q) options operator, arrow; el(Q)/`&Psi;AG__q`(el(Q)) end proc

Xq__s := proc (Q) options operator, arrow; X__l+K__qs(Q)*Xaq__u end proc      Eq := proc (Q) options operator, arrow; Et+Xq__s(Q)*(Q/Et+I*P/Et) end proc

``

delta := proc (Q) options operator, arrow; argument(Eq(Q)) end proc        eqo := proc (Q) options operator, arrow; Et*cos(delta(Q)) end proc    ido := proc (Q) options operator, arrow; It*sin(theta(Q)+delta(Q)) end proc``

``

EI := proc (Q) options operator, arrow; Xd__s(Q)*Iflec end proc    EI := proc (Q) options operator, arrow; eqo(Q)+Xd__s(Q)*Ido(Q) end proc

``

NULL

solve(EI(Q) = eqo(Q)+Xd__s(Q)*Ido(Q), {Eq, Ir, It, Ix, K__ds, K__qs, Q, Xd__s, Xq__s, el, eqo, ido, theta, `&Psi;AG__d`, `&Psi;AG__q`})

{Eq = Eq, Ir = Ir, It = It, Ix = Ix, K__ds = K__ds, K__qs = K__qs, Q = Q, Xd__s = Xd__s, Xq__s = Xq__s, el = el, eqo = eqo, ido = ido, theta = theta, `&Psi;AG__d` = `&Psi;AG__d`, `&Psi;AG__q` = `&Psi;AG__q`}

(1)

NULL

TRY3

 

     "Eq20:=Ir=P/(Et):     Eq21:=Ix=Q->Q/(Et):"

Error, invalid operator parameter name

"Eq20:=Ir=P/Et: Eq21:=Ix=Q->Q/Et:"

 

``

``

``

``


 

Download Qcalc1.mw

 

I have two functions, f(x) and g(x).

Based the plot, I can see that they intersect around x equals 0, 1, around 4.5 and 10.

So I tried to find the numerical solution by solving f(x) -  g(x) for x assuming x is real.

I'm stuck here because the aswer involves RootOf and _Z and I don't know what to do next.

This is what I've tried so far:
 

``

``

"f(x):=18*log10(x)"

proc (x) options operator, arrow; 18*log10(x) end proc

(1)

"g(x):=1/(2) x^(3)-8*x^(2)+(69/(2))^()*x-27"

proc (x) options operator, arrow; (1/2)*x^3-8*x^2+(69/2)*x-27 end proc

(2)

plot([f(x), g(x)], x = -1 .. 11)

 

``

`assuming`([solve(f(x)-g(x), x)], [x::real])

exp(RootOf(-(exp(_Z))^3*ln(10)+16*(exp(_Z))^2*ln(10)-69*exp(_Z)*ln(10)+54*ln(10)+36*_Z))

(3)

allvalues(exp(RootOf(-(exp(_Z))^3*ln(10)+16*(exp(_Z))^2*ln(10)-69*exp(_Z)*ln(10)+54*ln(10)+36*_Z)))

exp(RootOf(-(exp(_Z))^3*ln(10)+16*(exp(_Z))^2*ln(10)-69*exp(_Z)*ln(10)+54*ln(10)+36*_Z, 1.505446443)), exp(RootOf(-(exp(_Z))^3*ln(10)+16*(exp(_Z))^2*ln(10)-69*exp(_Z)*ln(10)+54*ln(10)+36*_Z, -3.291052648)), exp(RootOf(-(exp(_Z))^3*ln(10)+16*(exp(_Z))^2*ln(10)-69*exp(_Z)*ln(10)+54*ln(10)+36*_Z, 2.302585093)), 1

(4)

``

``


 

Download intersect_curve.mw

 

I know there's an answer to this because I can get the expected answer from Wolfram Alpha (see here).

How can I accomplish this in Maple? 

Hello everyone,

 

I would like to know if it is possible to directly enter LateX expressions into the plot command. My goal is to be able to create a plot where the font style (in for example the title) can switch between LateX math and LateX regular. See the following example.

The LateX input used for the tilte was <Verl{\"a}ufe von $e(t)$ und $\dot{\varepsilon}_\mathrm{p}(t)$>

In Matlab one can use the command <"interpreter","Latex"> which allows direct LateX input. I am basically looking for an equvialent Maple command.


If no such command exists, I would be grateful for any idea on how to create a title like the one above with other methods.

 

Thanks to everyone in advance.

What is your choice for creating a good table?

For example;

 

f:=(x,t)->x*t;
g:=(x,t)->x^2*t;

How to create a table as follows? (Appearance similar to the following is not required. I am open to all options)

Hi, I am doing a project about three body problem. I am solving a DE system with 12 DEs and plotting it with phase portrait. It is all good if I am only using vars in scene. like this:

pp1 := phaseportrait([eq1(t), eq2(t), eq3(t), eq4(t), eq5(t), eq6(t), eq7(t), eq8(t), eq9(t), eq10(t), eq11(t), eq12(t)], [x1(t), y1(t), vx1(t), vy1(t), x2(t), y2(t), vx2(t), vy2(t), x3(t), y3(t), vx3(t), vy3(t)], t = 0 .. 8.75*10^7, [[x1(0) = X1, y1(0) = Y1, vx1(0) = VX1, vy1(0) = VY1, x2(0) = X2, y2(0) = Y2, vx2(0) = VX2, vy2(0) = VY2, x3(0) = X3, y3(0) = Y3, vx3(0) = VX3, vy3(0) = VY3]], scene = [x1(t), y1(t)], stepsize = 1000, x1 = 0 .. 10^6, y1 = 0 .. 6*10^6, color = [red], scaling = constrained):

But I cannot plot any combinations of my variables. I have orthogonalized all the velocity, and I can plot [t,vx(t)] or [t, vy(t)]. But I cannot plot [t, (vx(t)^2+vy(t)^2)^1/2]:

vel1 := phaseportrait([eq1(t), eq2(t), eq3(t), eq4(t), eq5(t), eq6(t), eq7(t), eq8(t), eq9(t), eq10(t), eq11(t), eq12(t)], [x1(t), y1(t), vx1(t), vy1(t), x2(t), y2(t), vx2(t), vy2(t), x3(t), y3(t), vx3(t), vy3(t)], t = 0 .. 3.5*10^7, [[x1(0) = X1, y1(0) = Y1, vx1(0) = VX1, vy1(0) = VY1, x2(0) = X2, y2(0) = Y2, vx2(0) = VX2, vy2(0) = VY2, x3(0) = X3, y3(0) = Y3, vx3(0) = VX3, vy3(0) = VY3]], scene = [t, (vx3(t)^2 + vy3(t)^2)^(1/2)], stepsize = 1000, linecolor = [purple], scaling = constrained);
Error, (in DEtools/phaseportrait) Invalid scene; must be list of vars: scene = [t, (vx3(t)^2+vy3(t)^2)^(1/2)]
 

Is there a way to let me plot the v(t) ?

why setting interface(warnlevel=0); makes dsolve change the form of the final solution to an ODE?

Is this to be expected? Help on warnlevel 0 says to just suppress all warnings

In this example, both solutions are equivalent. One is just simpler than the other.

But now I am worried if this setting could affect dsolve in other ways not yet anticipated.
 

restart;

interface(version);

`Standard Worksheet Interface, Maple 2020.2, Windows 10, November 11 2020 Build ID 1502365`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 884 and is the same as the version installed in this computer, created 2020, November 25, 16:49 hours Pacific Time.`

interface(warnlevel=0);

3

ic:=y(0)=3:
ode := diff(y(x),x)*y(x)/(1+1/2*sqrt(1+diff(y(x),x)^2))=-x:
sol_1:=dsolve([ode,ic],y(x),singsol=all);

y(x) = -3+(1/3)*(-9*x^2+324)^(1/2), y(x) = 1+(1/3)*(-9*x^2+36)^(1/2)

restart;

ic:=y(0)=3:
ode := diff(y(x),x)*y(x)/(1+1/2*sqrt(1+diff(y(x),x)^2))=-x:
sol_2:=dsolve([ode,ic],y(x),singsol=all);

y(x) = -3+(-x^2+36)^(1/2), y(x) = 1+(-x^2+4)^(1/2)


 

Download warnlevel_difference.mw

btw, the same thing happens with warnlevel 2. i.e. answers look different.

But with warnlevel 3 and 4, now dsolve gives the same answer. 

SInce it seems default is warnlevel 3, it seems internally, dsolve takes different path depending on warnlevel setting? 

Edit

Here is a movie. I am using windows 10.

 

Edit: Here is another video. Tried now with fresh start of Maple. i.e. closed Maple and started it again.  Using worksheet. No other worksheet was open. This is what I found. Initially it gives the longer solution. After couple of tries, it then changed to the simpler one

 

Please I have an issue with the attached plot code. Can you kindly help to correct it? 

restart:
interface(rtablesize=infinity):
B:=<<0,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.49,"0","0.05","0.1","0.15","0.2","0.25","0.3","0.35","0.4","0.45","0.49">|
	<14.73,14.4,14,13.4,12.67,11.67,10.4,8.67,6,3,0,"14.73","14.4","14","13.4","12.67","11.67","10.4","8.67","6","3","0">|
     <-0.007072,0.013309,0.033707,0.054125,0.074571,0.095056,0.115597,0.136218,0.156956,0.177867,0.199036,0.22059,0.242719,0.265702,0.289932,0.31592,0.344214,0.375124,0.408175,0.441761,0.473484,0.501857>|
	<1.34E+01,1.33E+01,1.33E+01,1.32E+01,1.31E+01,1.31E+01,1.30E+01,1.29E+01,1.28E+01,1.26E+01,1.25E+01,1.22E+01,1.19E+01,1.14E+01,1.08E+01,9.86E+00,8.58E+00,6.90E+00,4.90E+00,2.81E+00,1.00E+00,-2.86E-01>>:

B:
 
 plot([B[..,[1, 2]],B[1..1,[1, 2]], B[.., [3, 4]],B[1..1,[3, 4]], B[..,[5, 6]],B[1..1,[5, 6]],B[.., [7, 8]],B[1..1,[7, 8]],
 	  B[..,[9, 10]],B[1..1,[9, 10]], B[.., [11, 12]],B[1..1,[11, 12]],B[..,[13, 14]],B[1..1,[13, 14]],B[.., [15, 16]],B[1..1,[15, 16]],
 	  B[..,[17, 18]],B[1..1,[17, 18]], B[.., [19, 20]],B[1..1,[19, 20]],B[..,[21, 22]],B[1..1,[21, 22]]],
 	  legend = ["","Experimental","","Simulation"],
 	  style = ["line","line","line","line","line","line","line","line","line","line","line","line","line","line","line","line",
 	 		"line","line","line","line","line","line"],
 	  color=[blue,red], labels=[`V (V)`, `Jsc (mA/cm^2)`]);
 



Download Graph_Example.mw

Hello community!
Given an equation

R := 1/N*S

where

S:=sum(exp(I*k*(i-1)*varepsilon), i = 1 .. n)

and can be interpreted as geometric series, so if we apply 'simplify' we get

(exp(I*k*n*varepsilon)-1)/(exp(I*k*varepsilon)-1)

The problem is in next steps, i want to obtain the final form using Maple

RR := sin((1/2)*k*n*varepsilon)/(n*sin((1/2)*k*varepsilon))

As known

(exp(I*k*n*varepsilon)-1)/(exp(I*k*varepsilon)-1) = e^(-(1/2)*j*k*n*varepsilon)*sin((1/2)*k*n*varepsilon)/(e^(-(1/2)*j*k*varepsilon)*sin((1/2)*k*varepsilon))

 

 

First 350 351 352 353 354 355 356 Last Page 352 of 2308