nm

12008 Reputation

20 Badges

13 years, 197 days

MaplePrimes Activity


These are questions asked by nm

odetest does not want to verify this maple solution against the IC.  Anyone could find why or a trick to get [0,0] from odetest?

Can not upload worksheet due to firewall at Mapleprime issue. Here the code and screen shot.

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));
the_residue:=odetest(maple_sol,[ode,IC]);

#not zero, also simplify did not give zero

using regular expression in Maple is little annoying, because one has to escape \ in the regx string itself, which makes it more complicated compared to other languages. For example

StringTools:-RegMatch("^\[.*\]$","[A]")

gives false. But

StringTools:-RegMatch("^\\[.*\\]$","[A]")

gives true.

Other languages have special function to generate the regx itself, which does not require escaping the \ when writing the regx Which makes it easier to see the regx (escaping is done under the cover). like this

Since all places and web sites that show examples of regx., do not have to escape \ before using, it will be good if Maple adds such special new function to StringTools to generate regx like the above so users do not have to remember to escape \.   

It is hard enough to use regx without having to also remember to escape things.

I could not find such a function in Maple. Does one exist?

Maple 2025.2

I use plot(sol,...) to plot solution of ode. I do not give x or y ranges and let Maple figure the best values. Then use the command 

T:=rhs~(indets(p, identical("originalview")=anything))[];    

To extract the x and y ranges used and then use these in the command DEtools:-DEplot(....)

The plot() command shows the solution plot fully (in this example below, the left and right sides).

But the  DEtools:-DEplot(....) only shows part of the solution on top of the slope field arrows.  Even though the same x and y ranges is used.

I found that if I increase the y range for the DEtools:-DEplot(....) by a little bit, now the full solution shows, which is same as plot command generated.

Since I am doing all this in code, without looking, I am first plotting the solution using plot() and then use the ranges generated for DEtools:-DEplot(....).

If I do not use the y range in DEtools:-DEplot(....) but only use the x range, sometimes it works and sometimes Maple gives warnings. (depending on the solution). So I am  back to using the ranges generated by plot() command to be safe.

Here is an example to show this problem

ode:=diff(y(x),x) = x*(x^2+9)^(1/2);
IC:=y(-4) = 0;
sol:=dsolve([ode,IC]);
p:=plot(rhs(sol),'axes'='boxed','labels'=[x,y(x)],'axis'=['gridlines'=['color'='lightblue']],'color' = 'red');

Now the x and y ranges used above is extraced

T:=rhs~(indets(p, identical("originalview")=anything))[];      
from_x := op(1,T[1]);
to_x   := op(2,T[1]);
from_y := op(1,T[2]);        
to_y   := op(2,T[2]);  

#gives

      T := [-9.94999999999999929 .. 9.94999999999999929, 
        -32.6629164062620561 .. 332.469298224442980]


                 from_x := -9.94999999999999929
                  to_x := 9.94999999999999929
                 from_y := -32.6629164062620561
                  to_y := 332.469298224442980

These are used in the DEplot

DEtools:-DEplot(ode,[y(x)],x=from_x..to_x,y=from_y ..to_y ,[IC],
                'dirfield'=[15,15],
                'labels'=[x,y(x)],
                'axes' = 'boxed',                
                'arrows'='smalltwo', #'curve', 
                'color' = 'blue',#color of arrows
                'linecolor'='red'#color of solution
                );

Notice how the solution (red line) is truncated.  It turns out in this case adding say 10% to the y range, it now shows the solution like this

DEtools:-DEplot(ode,[y(x)],x=from_x..to_x,y=from_y-(0.1*abs(from_y)) ..to_y ,[IC],
                'dirfield'=[15,15],
                'labels'=[x,y(x)],
                'axes' = 'boxed',                
                'arrows'='smalltwo', #'curve', 
                'color' = 'blue',#color of arrows
                'linecolor'='red'#color of solution
                );

But I do not know if this trick will work for each example. 

As I said, I can not give the y range to DEplot, then in this example, it will now show the full solution. But I have examples where this can cause warnings.

The question is, why giving same y range used by plot to DEplot cause the solution (red line) to truncate? Why one has to increase the y range to make it show the full solution?

Is there a better method that the above to make DEplot show full solution same as plot() does? 

Maple 2025.2

ps. I just tried upload the worksheet and now it works! it looks like mapleprimes web site is fixed.
 

interface(version);

`Standard Worksheet Interface, Maple 2025.2, Windows 10, November 11 2025 Build ID 1971053`

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

diff(y(x), x) = x*(x^2+9)^(1/2)

y(-4) = 0

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

y(x) = (1/3)*(x^2+9)^(3/2)-125/3

p:=plot(rhs(sol),'axes'='boxed','labels'=[x,y(x)],'axis'=['gridlines'=['color'='lightblue']],'color' = 'red');

 

T:=rhs~(indets(p, identical("originalview")=anything))[];      
from_x := op(1,T[1]);
to_x   := op(2,T[1]);
from_y := op(1,T[2]);        
to_y   := op(2,T[2]);  

[-9.94999999999999929 .. 9.94999999999999929, -32.6629164062620561 .. 332.469298224442980]

-9.94999999999999929

9.94999999999999929

-32.6629164062620561

332.469298224442980

DEtools:-DEplot(ode,[y(x)],x=from_x..to_x,y=from_y ..to_y ,[IC],
                'dirfield'=[15,15],
                'labels'=[x,y(x)],
                'axes' = 'boxed',                
                'arrows'='smalltwo', #'curve',
                'color' = 'blue',#color of arrows
                'linecolor'='red'#color of solution
                );

DEtools:-DEplot(ode,[y(x)],x=from_x..to_x,y=from_y-(0.1*abs(from_y)) ..to_y ,[IC],
                'dirfield'=[15,15],
                'labels'=[x,y(x)],
                'axes' = 'boxed',                
                'arrows'='smalltwo', #'curve',
                'color' = 'blue',#color of arrows
                'linecolor'='red'#color of solution
                );

 


 

Download example_phase_plot.mw

How to explain this strange behavior?   odetest(sol,ode) does not give zero. But odetest(sol,[ode,IC]) gives [0,0]

Same solution and same ode. Why adding IC, now odetest says solution verifies the ode, but without adding IC, it does not give zero right away. I know I can simplify the result to zero. But the point is that it should have given zero right away, because that is what it did when adding IC.

Should it not have given zero in first case also?

Can't upload worksheet due to security. Here is code and screen shot

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;
sol:=y(x) = ((-cos(exp(-2*x0))*a + c)*Int(sin(exp(-tau))*exp(-1/2*Ci(exp(-2*tau))), tau = 0 .. x0) + Int(sin(exp(-tau))*exp(-1/2*Ci(exp(-2*tau))), tau = 0 .. x)*(cos(exp(-2*x0))*a - c) + exp(-1/2*Ci(exp(-2*x0)))*(a*sin(exp(-x0)) - b*y0))*exp(1/2*Ci(exp(-2*x)))/(cos(exp(-2*x0))*a - c);

odetest(sol,ode);

#not zero

#now

odetest(sol,[ode,IC]);

#gives [0,0]

 

Could someone please check if these are new in Maple 2025.2? I am on windows 10.

eqs:=[_C1+_C2 = 0, _C1*exp(3^(1/2)*((cos(1/6*Pi*3^(1/2))-1)*(cos(1/6*Pi*3^(1/2))+1))^(1/2)/(cos(1/6*Pi*3^(1/2))-1)^(1/2)/(cos(1/6*Pi*3^(1/2))+1)^(1/2)*ln(cos(1/6*Pi*3^(1/2))+(cos(1/6*Pi*3^(1/2))^2-1)^(1/2)))+_C2*exp(-3^(1/2)*((cos(1/6*Pi*3^(1/2))-1)*(cos(1/6*Pi*3^(1/2))+1))^(1/2)/(cos(1/6*Pi*3^(1/2))-1)^(1/2)/(cos(1/6*Pi*3^(1/2))+1)^(1/2)*ln(cos(1/6*Pi*3^(1/2))+(cos(1/6*Pi*3^(1/2))^2-1)^(1/2))) = 4];
c:=[_C1, _C2];
solve(eqs,c);

#Error, (in convert/real_rat) too many levels of recursion

And

eqs:= [3^(1/4*3^(1/2))*exp(3/4*Pi)*_C1-1/3*exp(3/4*Pi)*3^(-1/4*3^(1/2)+1/2
)*_C2 = 1, _C1/(cos(1/3*Pi*3^(1/2))-1)^(1/4)/(cos(1/3*Pi*3^(1/2))+1)^(1/4)*exp(
3/4*Pi-1/2*Pi*3^(1/2))*(cos(1/3*Pi*3^(1/2))^2-1)^(1/4)*3^(1/4*3^(1/2))*((cos(1/
3*Pi*3^(1/2))^2-1)^(1/2)+cos(1/3*Pi*3^(1/2)))^(1/2*3^(1/2))-_C2*3^(-1/2-1/4*3^(
1/2))/(cos(1/3*Pi*3^(1/2))-1)^(1/4)/(cos(1/3*Pi*3^(1/2))+1)^(1/4)*(cos(1/3*Pi*3
^(1/2))^2-1)^(1/4)*exp(3/4*Pi-1/2*Pi*3^(1/2))*((cos(1/3*Pi*3^(1/2))^2-1)^(1/2)+
cos(1/3*Pi*3^(1/2)))^(-1/2*3^(1/2)) = 5*exp(-1/2*Pi*3^(1/2))]:
c:=[_C1, _C2];

solve(eqs,c)

#Error, (in convert/real_rat) too many levels of recursion

And

eqs:=[3^(1/2*3^(1/2))*exp(1/2*Pi)*_C1-1/6*3^(-1/2*3^(1/2)+1/2)*exp(1/2*Pi
)*_C2 = 5, _C1/(cos(1/6*Pi*3^(1/2))-1)^(1/4)/(cos(1/6*Pi*3^(1/2))+1)^(1/4)*exp(
1/2*Pi-1/6*Pi*3^(1/2))*(cos(1/6*Pi*3^(1/2))^2-1)^(1/4)*3^(1/2*3^(1/2))*((cos(1/
6*Pi*3^(1/2))^2-1)^(1/2)+cos(1/6*Pi*3^(1/2)))^(3^(1/2))-1/6*_C2*3^(-1/2*3^(1/2)
+1/2)/(cos(1/6*Pi*3^(1/2))-1)^(1/4)/(cos(1/6*Pi*3^(1/2))+1)^(1/4)*exp(1/2*Pi-1/
6*Pi*3^(1/2))*(cos(1/6*Pi*3^(1/2))^2-1)^(1/4)*((cos(1/6*Pi*3^(1/2))^2-1)^(1/2)+
cos(1/6*Pi*3^(1/2)))^(-3^(1/2)) = 2*exp(-1/6*Pi*3^(1/2))]:
c:=[_C1, _C2];

solve(eqs,c)

Trace shows they are coming from Algebraic: best unknown/equation

Cannot upload worksheet due to security. Here is screen shot

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