nm

6156 Reputation

17 Badges

9 years, 186 days

MaplePrimes Activity


These are questions asked by nm

I'd like to get the simplest possible expression when using simplify. The problem is that this is all done in a program, without having the benifit of looking at the expression on the screen and trying things. So I need a method that works for large set of input all the time.

I noticed in this example that simplify did not do what I think it should have.

Given the expression -2*(x^3 + 2)/(x*(x + 1)*(sqrt(3)*I + 2*x - 1)*(sqrt(3)*I - 2*x + 1)) it can be simplified to (x^3 + 2)/(2*x^4 + 2*x) but  I had to go into many tries in order to get this final result.

Is there a better way to do this? I end up now   doing simplify(expand(numer(expr))/expand(denom(expr))) in the hope to get better simplification.  Here is an example


 

interface(version);

`Standard Worksheet Interface, Maple 2021.2, Windows 10, November 23 2021 Build ID 1576349`

restart;

w:=-2*(x^3+2)/x/(x+1)/(I*3^(1/2)+2*x-1)/(I*3^(1/2)-2*x+1);

-2*(x^3+2)/(x*(x+1)*(I*3^(1/2)+2*x-1)*(I*3^(1/2)-2*x+1))

simplify(w)

(-2*x^3-4)/(x*(x+1)*(I*3^(1/2)+2*x-1)*(I*3^(1/2)-2*x+1))

simplify(evalc(w))

(1/2)*(x^3+2)/((x^2-x+1)*(x+1)*x)

simplify(w) assuming x::real

(-2*x^3-4)/(x*(x+1)*(I*3^(1/2)+2*x-1)*(I*3^(1/2)-2*x+1))

simplify(w,size)

(-2*x^3-4)/(x*(x+1)*(I*3^(1/2)+2*x-1)*(I*3^(1/2)-2*x+1))

simplify(w,symbolic)

(-2*x^3-4)/(x*(x+1)*(I*3^(1/2)+2*x-1)*(I*3^(1/2)-2*x+1))

simplify(w,sqrt)

(-2*x^3-4)/(x*(x+1)*(I*3^(1/2)+2*x-1)*(I*3^(1/2)-2*x+1))

simplify(expand(numer(w))/expand(denom(w)))

(x^3+2)/(2*x^4+2*x)


It would be nice if Maple simplify would just do it directly as follows in Mathematica. May be there is a an  option I am overlooking

 

Download simplify.mw

I read that abs(v) should find the magnitude of complex number. But I find cases where it does not.

Should one then use sqrt( Re(v)^2 + Im(v)^2 ) instead or is there different command to use?  Here is an example

interface(version)

`Standard Worksheet Interface, Maple 2021.2, Windows 10, November 23 2021 Build ID 1576349`

restart;

v:=1/16*(I*5^(1/2)+I-4*sin(1/5*Pi))*2^(3/10)*(5-5^(1/2))^(1/2)-1/8*2^(4/5)*((I*5^(1/2)+I)*sin(1/5*Pi)+1/2*5^(1/2)+3/2)

(1/16)*(I*5^(1/2)+I-4*sin((1/5)*Pi))*2^(3/10)*(5-5^(1/2))^(1/2)-(1/8)*2^(4/5)*((I*5^(1/2)+I)*sin((1/5)*Pi)+(1/2)*5^(1/2)+3/2)

abs(v)

-(1/16)*(I*5^(1/2)+I-4*sin((1/5)*Pi))*2^(3/10)*(5-5^(1/2))^(1/2)+(1/8)*2^(4/5)*((I*5^(1/2)+I)*sin((1/5)*Pi)+(1/2)*5^(1/2)+3/2)

sqrt( Re(v)^2 + Im(v)^2 );

((-(1/4)*2^(3/10)*(5-5^(1/2))^(1/2)*sin((1/5)*Pi)-(1/8)*2^(4/5)*((1/2)*5^(1/2)+3/2))^2+((1/16)*2^(3/10)*(5-5^(1/2))^(1/2)*(5^(1/2)+1)-(1/8)*2^(4/5)*(5^(1/2)+1)*sin((1/5)*Pi))^2)^(1/2)

 

Download complex.mw

Here is the same thing in Mathematica:

I searched help for modulus but could not find one.

Maple 2021.2

I am translating old Maple code to run on Maple 2021.2. This code from 1985. I think it was Maple 3 then. I'll put a link to the paper and page number.

It uses this syntax

Btw, the " above is meant to be % in new Maple. I do not know what w='@W' is supposed to translate to.

The paper is

A DISCUSSION AND IMPLEMENTATION OF KOVACICS ALGORITHM FOR ORDINARY DIFFERENTIAL EQUATIONS

by  Carolyn J. Smith.

Here is the link

https://cs.uwaterloo.ca/research/tr/1984/CS-84-35.pdf

The above is at page 67. Near the end.  The code also uses some old functions, which are not given in the listing, I searched but could not find these.. One is called Lsolve (to solve linear equations, but I can replace this with solve) and  on page 77 it uses these 

           Functions required: scanmap, expcontract, lncontract, explnsimp

These are not given in the source code in the paper. I assume these are old Maple function which no longer exist?. But I can just use simplify for now in their place.

My question is on the use of `@W` and what it could mean? This syntax @ is used in many places in this old Maple code.

I was trying Maple 2021.2 on this pde I saw on the net, and noticed it gives some error messages. 

Are these to be expected and known?  

interface(version);

`Standard Worksheet Interface, Maple 2021.2, Windows 10, November 23 2021 Build ID 1576349`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1127 and is the same as the version installed in this computer, created 2022, January 3, 14:33 hours Pacific Time.`

restart;

PDE := diff(u(t, x, y), t) = VectorCalculus:-Laplacian(u(t,x,y),'cartesian'[x,y]);
bc := D[2](u)(t,0,y)=0,D[2](u)(t,1,y)=0, u(t, x, 0)=0,u(t, x, 3)=0;
ic := u(0, x, y) = f(x,y);
sol := pdsolve([PDE, bc,ic], u(t,x,y))

diff(u(t, x, y), t) = diff(diff(u(t, x, y), x), x)+diff(diff(u(t, x, y), y), y)

(D[2](u))(t, 0, y) = 0, (D[2](u))(t, 1, y) = 0, u(t, x, 0) = 0, u(t, x, 3) = 0

u(0, x, y) = f(x, y)

Error, (in assuming) when calling '`assume/NormalizeBoolean`'. Received: 'invalid input: type expects 2 arguments, but received 3'

restart;

PDE := diff(u(t, x, y), t) = VectorCalculus:-Laplacian(u(t,x,y),'cartesian'[x,y]);
bc := D[2](u)(t,1,y)=0, u(t, x, 0)=0,u(t, x, 3)=0;
ic := u(0, x, y) = f(x,y);
sol := pdsolve([PDE, bc,ic], u(t,x,y))

diff(u(t, x, y), t) = diff(diff(u(t, x, y), x), x)+diff(diff(u(t, x, y), y), y)

(D[2](u))(t, 1, y) = 0, u(t, x, 0) = 0, u(t, x, 3) = 0

u(0, x, y) = f(x, y)

Error, (in PDEAdvisor/2nd_order/Series/ThreeVariables) invalid input: has expects 2 arguments, but received 1

restart;

pde := diff(u(t, x, y), t) = VectorCalculus:-Laplacian(u(t,x,y),'cartesian'[x,y]);
bc := D[2](u)(t,0,y)=0,D[2](u)(t,1,y)=0, u(t, x, 0)=0,u(t, x, 3)=0;
sol := pdsolve([pde,bc], u(t,x,y))

diff(u(t, x, y), t) = diff(diff(u(t, x, y), x), x)+diff(diff(u(t, x, y), y), y)

(D[2](u))(t, 0, y) = 0, (D[2](u))(t, 1, y) = 0, u(t, x, 0) = 0, u(t, x, 3) = 0

Error, (in PDEAdvisor/2nd_order/Series/ThreeVariables) invalid boolean expression: NULL

 

Download pde_error_messages.mw

In this example, i have a top module A. Inside it, I have module named my_RECORD (which happened to be option object) that I want to return back to caller when they call a proc.

Maple allows me to declare the proc to return my_RECORD. No problem., But when making a local variable inside the proc and using o::my_RECORD it complains  that my_RECORD does not exist. 

The solution is to change o::my_RECORD to o::A:-my_RECORD

My question why it did not complain the same way on the return value on the proc?   for me, they are both semantically the same. One says the proc returns this type, and the other says the local variable is this type. So why had to do A:-my_RECORD on one but not the other? 

Here is an example. Maple 2021.2 on windows 10.

restart;

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

3

A:=module()
 #this is the RECORD to return
  local module my_RECORD()
   option object;
   export data::string:="";
  end module;
   
  export do_analysis:=proc()::my_RECORD;   
    local o::my_RECORD; #error here. But this is the same above line above?    
    o:=Object(my_RECORD);
    o:-data:="test";
    return o;        
  end proc;
end module;

_m2642451182336

A:-do_analysis()

Error, (in do_analysis) type `my_RECORD` does not exist

#FIXED BELOW
restart;

A:=module()
    #this is the RECORD to return
    local module my_RECORD()
        option object;
        export data::string:="";
    end module;
   
    export do_analysis:=proc()::my_RECORD;
          local o::A:-my_RECORD;    
          o:=Object(my_RECORD);
          o:-data:="test";
          return o;        
    end proc;
end module;

_m2642339719872

A:-do_analysis()

module my_RECORD () export data::string; option object; end module

 

Download A_no_lib.mw

1 2 3 4 5 6 7 Last Page 1 of 123