nm

11483 Reputation

20 Badges

13 years, 83 days

MaplePrimes Activity


These are questions asked by nm

Is one not supposed to make _Z local variable?  If not, then how to insure the global _Z do not have some value assigned to it?

In this example below, I build some integral. I used local _Z for upport limit. But now Maple generate internal error.

If I do not declare _Z as local, and leave it global, then no error is generated.

But if I also declare _Z inside the proc as global _Z, then the error also goes away.

So is one always supposed to use _Z as global? 

The strange thing _Z is protected, so I cant assign to it value from global space. Message says Try declaring `local _Z`; see ?protect for details. but when I do that, I still get an error. 

So is the bottom line here is that one should not declare _Z local to a proc, and just assume it is always global symbol that has no assigned value to it, and that will always be safe to do?  I do not assign value to _Z inside my proc. Just wanted to use it for upper limit, as symbol.

restart;

interface(version);

`Standard Worksheet Interface, Maple 2024.1, Windows 10, June 25 2024 Build ID 1835466`

foo:=proc()
 local _Z;
 local F,G,H,n;
 F:=x;G:=x;G:=x;n:=4;
 -RootOf(Intat(F^(-n-1)*H^(-2*n+1)*(-G*F*n*H)^n*n^(-n)/(-
         tau*F^(-n-1)*H^(-2*n+1)*(-G*F*n*H)^n*n^(-n)+F^(-n-1)*H^(-2*n+1)*(-G*F
         *n*H)^n*n^(-n)+tau^n),tau = _Z)-Int(-G,x)+C1)/G*H;
end proc:

foo()

Error, (in RootOf) expression independent of, _Z

boo:=proc()
 local F,G,H,n;
 F:=x;G:=x;G:=x;n:=4;
 -RootOf(Intat(F^(-n-1)*H^(-2*n+1)*(-G*F*n*H)^n*n^(-n)/(-
         tau*F^(-n-1)*H^(-2*n+1)*(-G*F*n*H)^n*n^(-n)+F^(-n-1)*H^(-2*n+1)*(-G*F
         *n*H)^n*n^(-n)+tau^n),tau = _Z)-Int(-G,x)+C1)/G*H;
end proc:

boo();

-RootOf(Intat(x^3/(H^3*tau^4-tau*x^3+x^3), tau = _Z)-(Int(-x, x))+C1)*H/x

boo2:=proc()
 global _Z;
 local F,G,H,n;
 F:=x;G:=x;G:=x;n:=4;
 -RootOf(Intat(F^(-n-1)*H^(-2*n+1)*(-G*F*n*H)^n*n^(-n)/(-
         tau*F^(-n-1)*H^(-2*n+1)*(-G*F*n*H)^n*n^(-n)+F^(-n-1)*H^(-2*n+1)*(-G*F
         *n*H)^n*n^(-n)+tau^n),tau = _Z)-Int(-G,x)+C1)/G*H;
end proc:

boo2()

-RootOf(Intat(x^3/(H^3*tau^4-tau*x^3+x^3), tau = _Z)-(Int(-x, x))+C1)*H/x

_Z:=5;

Error, attempting to assign to `_Z` which is protected.  Try declaring `local _Z`; see ?protect for details.

local _Z;
foo();

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

_Z

Error, (in RootOf) expression independent of, _Z

 

 

Download using_Z_inside_proc_august_28_2024.mw

For me this result is suspicious. What do you think? 

This ode diff(y(x),x) = f*y(x)^4+g*y(x)+h; is clearly quadrature, since I did not tell Maple that f,g,h depend on x. So this can be solved by just integration. But when asking odeadvisor if it is Chini, it says yes. When asking it what type it is, now it says it is quadrature.

Am I missing something here? I was expecting [NONE] when asking it if it is Chini.

Yes, the ode has the form of Chini, which is   y'=f(x)*y^n + g(x)*y + h(x), where n=4 here. But if f,g,h do not depend on x, then this is now just quadrature. Right? Calling it Chini is little misleading I think.

interface(version);

`Standard Worksheet Interface, Maple 2024.1, Windows 10, June 25 2024 Build ID 1835466`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1796 and is the same as the version installed in this computer, created 2024, August 29, 14:22 hours Pacific Time.`

libname;

"C:\Users\Owner\maple\toolbox\2024\Physics Updates\lib", "C:\Program Files\Maple 2024\lib"

restart;

ode:=diff(y(x),x) = f*y(x)^4+g*y(x)+h;
DEtools:-odeadvisor(ode,y(x),[Chini]);

diff(y(x), x) = f*y(x)^4+g*y(x)+h

[_Chini]

DEtools:-odeadvisor(ode,y(x))

[_quadrature]

dsolve(ode,y(x),[quadrature]);

x-Intat(1/(_a^4*f+_a*g+h), _a = y(x))-c__1 = 0

dsolve(ode,y(x),[Chini]);

y(x) = -RootOf(Intat(g^4/(_a^4*f*h^3-_a*g^4+g^4), _a = _Z)+g*x+c__1)*h/g

 

 

Download question_on_advisor_august_28_2024.mw

Notice another problem in this solutions. If g=0, then the Chini solution gives divison by zero now, while the quadrature solution still works.

Why Maple can not do this basic combining of two terms? What do  I need to do to help Maple do it? Am I not using the correct command?

restart;

interface(version);

`Standard Worksheet Interface, Maple 2024.1, Windows 10, June 25 2024 Build ID 1835466`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1795 and is the same as the version installed in this computer, created 2024, August 28, 23:14 hours Pacific Time.`

e:=B^2/(4*(k^n)^(2/3)) - (k^n)^(1/3)*x;

(1/4)*B^2/(k^n)^(2/3)-(k^n)^(1/3)*x

combine(e);

(1/4)*B^2/(k^n)^(2/3)-(k^n)^(1/3)*x

combine(e,symbolic)

(1/4)*B^2*k^(-(2/3)*n)-k^((1/3)*n)*x

combine(e,power)

(1/4)*B^2/(k^n)^(2/3)-(k^n)^(1/3)*x

combine(e,radical)

(1/4)*B^2/(k^n)^(2/3)-(k^n)^(1/3)*x

combine(e,radical,symbolic)

(1/4)*B^2/(k^n)^(2/3)-(k^n)^(1/3)*x

combine(e) assuming positive;

(1/4)*B^2*k^(-(2/3)*n)-k^((1/3)*n)*x

combine(e,abs)

(1/4)*B^2/(k^n)^(2/3)-(k^n)^(1/3)*x

 

 

Download how_to_combine_august_28_2024.mw

For reference, using another software, this is what it gives

I do not know if this is how it always been in Maple. But now I noticed when I set assertlevel to 2, in order to catch wrong assignment type in my code, the try/catch do not catch such an error.  

My question is: Has it always been like this in Maple? May be it was, I am just asking for confirmation. I seem to remember I was able to trap such error before.

Here is MWE

interface(version);

`Standard Worksheet Interface, Maple 2024.1, Windows 10, June 25 2024 Build ID 1835466`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1793 and is the same as the version installed in this computer, created 2024, August 25, 9:6 hours Pacific Time.`

libname;

"C:\Users\Owner\maple\toolbox\2024\Physics Updates\lib", "C:\Program Files\Maple 2024\lib"

restart;

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

 

foo:=proc();
local C_sol::list;
   try
      C_sol := 1;
   catch:
      print("error detected in my code");
   end try;
end proc:

foo(); #unable to catch assignment error

Error, (in foo) assertion failed in assignment to C_sol, expected list, got 1

 

 

Download why_trap_do_not_catch_assignment_error.mw

I sort of remember there is a special syntax for setting initial condition for an ode derivative as    y'(a)=b, where and are symbols. I forgot what it is, everything I try gives error. (I thought eval was used to work for this, but can't get it to work now).

Any one knows how to set this IC?   For an example, given this ode y''(x)+y'(x)+y(x)=0 I want to solve it with the IC as   y'(a)=b where has no numerical value. Just a symbol.

For an example, using another software, it is done as follows

ClearAll[x,y,a,b];
ode=y''[x]+y'[x]+y[x]==0;
DSolve[{ode,y'[a]==b},y[x],x]

Below is my attempts in Maple. I tried eval, subs, and the normal D(y)(a)=b but none of these works when is symbol. 

I looked at help and all examples I saw use constants, as in D(y)(0)=value. 

Iam sure this is possible to do in Maple, but I forgot how. Below is worksheet.
 

interface(version);

`Standard Worksheet Interface, Maple 2024.1, Windows 10, June 25 2024 Build ID 1835466`

restart;

ode:=diff(y(x),x$2)+diff(y(x),x)+y(x)=0;
IC1:=eval(diff(y(x),x),x=a)=b;
IC2:=D(y)(a)=b;
IC3:=subs(x=a,D(y)(x)=b);

diff(diff(y(x), x), x)+diff(y(x), x)+y(x) = 0

diff(y(a), a) = b

(D(y))(a) = b

(D(y))(a) = b

dsolve([ode,IC1]);

Error, (in dsolve) found differentiated functions with same name but depending on different arguments in the given DE system: {y(a), y(x)}

dsolve([ode,IC2]);

Error, (in dsolve) found differentiated functions with same name but depending on different arguments in the given DE system: {y(a), y(x)}

dsolve([ode,IC3]);

Error, (in dsolve) found differentiated functions with same name but depending on different arguments in the given DE system: {y(a), y(x)}

#eval works if the point is actual value as in
IC1:=eval(diff(y(x),x),x=0)=b;

eval(diff(y(x), x), {x = 0}) = b

#but I want x=a in the above.


Download how_to_set_IC_point_to_symbol.mw

There is no issue for dirichlet initial condition, where  y(a)=b works. It is the  neumann one which I can't figure its syntax. So this works OK

ode:=diff(y(x),x$2)+diff(y(x),x)+y(x)=0;
IC1:=y(a)=b;
dsolve([ode,IC1]);
First 21 22 23 24 25 26 27 Last Page 23 of 202