nm

11458 Reputation

20 Badges

13 years, 77 days

MaplePrimes Activity


These are questions asked by nm

This is a programming question.

The goal is to solve an equation such as eq:=x^2+2*x-1=0; and obtain the solution as list with x= on each solution, like this

                       sol := [x = sqrt(2) - 1, x = -1 - sqrt(2)]

The command  to start with is sol:=solve(eq,x) which gives 

                       sol := sqrt(2) - 1, -1 - sqrt(2)

But to have x= show up, the command is modifed to be sol:=solve(eq,{x}) by adding {} around the variable to solve for, and now Maple gives 

                       sol := {x = sqrt(2) - 1}, {x = -1 - sqrt(2)}

Which is not yet the goal.. Changing the command to sol:=[solve(eq,{x})]  gives 

                       sol := [{x = sqrt(2) - 1}, {x = -1 - sqrt(2)}]

Which is still not the goal. Changing the command to sol:=solve(eq,[x])  gets closer to the goal.  it gives

                      sol := [[x = sqrt(2) - 1], [x = -1 - sqrt(2)]]

To remove the extra pair [ ] the list is Flattened like this

eq:=x^2+2*x-1=0;
sol:=solve(eq,[x]);
sol:=ListTools:-Flatten(sol)

Which gives me what I want, which is one list (not list of lists), and with x= in there

                             sol := [x = sqrt(2) - 1, x = -1 - sqrt(2)]

Is there a better way to obtain the above form of result than what I have above?

 

I need to check if expression is "special" kind of polynomial. Where powers are allowed to be non-integers and can be fractions. This is not polynomial in the mathematical sense ofcourse so can not use type(expr,polynom) on it, and did not see a way to tell type(expr,polynom) to accept non-integer exponents.

For an example, given p(x):=x^2+x^(1/3)+3+sqrt(x)+x^Pi+1/x*sin(x): it will return false, due to sin(x) term there. Without this term, it will return true, since all other terms have the form x^anything.

Currently, this is what I do

expr:=x^2+x^(1/3)+3+sqrt(x)+x^Pi+1/x*sin(x):

if type(expr,polynom(anything,x)) then
   print("Yes, normal polynomial");
else
   what_is_left:=remove(Z->type(Z,{`^`('identical'(x),algebraic),'identical'(x)}),expr);
   if has(what_is_left,x) then
      print("Not special polynomial");
   else
      print("Yes, special polynomial");
   fi;
fi;

While with

expr:=x^2+x^(1/3)+3+sqrt(x)+x^Pi+1/x:

It will print "Yes, special polynomial"

Is the above a good way to do this, or do you suggest a better way? It seems to work on the few tests  I did on it so far.

It is always "polynomial" in one symbol, such as x. So if it contains any function of x, other than  x^exponent, where exponent can only be numeric, or other symbol, it will fail the test. So this below will pass the a above test as well

expr:=x^2+x^(1/3)+3+sqrt(x)+x^a+1/x:

 

I was just praising Maple for not rewriting/simplifying  expressions automatically without the explicit user asking for it, when I found the following strange result

expr:=arccos(a-p) does not cause any change in the input. Good.

But when I change the letter ordering to expr:=arccos(p-a) now Maple changed it to Pi - arccos(a - p)

I have no idea why. Is there an option to tell Maple not to do that, even if it is mathematically correct? 

restart;
expr:=arccos(a-p);

restart;
expr:=arccos(p-a);

It seems to use lexicographical ordering to re-write things. Is it possible to turn that off?  Notice that I did not ask for simplification or anything. 

Maple 2020.1, Physics 724

I was checking my solution against Maple. Maple gives solution with integral and RootOf. I am not able to simplify it to better compare.

restart;
ode:=y(x)=ln(cos(diff(y(x),x)))+diff(y(x),x)*tan(diff(y(x),x));
sol:=dsolve(ode);

It is the second solution above I want to simplify/evaluate. So I tried

restart;
ode:=y(x)=ln(cos(diff(y(x),x)))+diff(y(x),x)*tan(diff(y(x),x));
sol:=dsolve(ode);
sol:=[sol][2];
DEtools:-remove_RootOf(sol)

But this did nothing. Then I tried adding useint in the dsolve command

restart;
ode:=y(x)=ln(cos(diff(y(x),x)))+diff(y(x),x)*tan(diff(y(x),x));
sol:=dsolve(ode,useint);

But this also kept the integral there. Then I tried eval

restart;
ode:=y(x)=ln(cos(diff(y(x),x)))+diff(y(x),x)*tan(diff(y(x),x));
sol:=[dsolve(ode,'explicit')];
eval(sol[2])

The solution I obtained is 

y(x) = -ln(_C1^2 - 2*_C1*x + x^2 + 1)/2 + ((-2*x + 2*_C1)*arctan(-x + _C1))/2

Which does verify to zero OK using odetest.

Any suggestions/tricks to use to get an more explicit solution from Maple I am overlooking?

Maple 2020.1 , Physics 724

I can post/attach my full solution if needed. 

 

 

I solved this ODE and got a solution and wanted to compre it with Maple. This is initial value first oder ODE. So it should have no constants in it. But Maple's solution contains something I never seen before _B1~

I wonder what it means? And odetest did not verify Maple's solution. 

restart;
ode:=diff(y(x),x)-y(x)/x+csc(y(x)/x)=0;
sol:=dsolve([ode,y(1)=0]);
simplify(odetest(sol,ode));

odetest does not gives zero.

This is my solution

mysol:=y(x)=x*arccos(ln(x)+1);
odetest(mysol,ode)

   0

Any idea what _B1~ means? The ~ looks like it is an assumed variable? may be leaked from inside Maple.

Maple 2020.1 on windows 10

 

First 122 123 124 125 126 127 128 Last Page 124 of 201