First time here? Check out the FAQ!

Ask Your Question
2

syntaxError exception using integrate with fricas

asked 3 years ago

Nasser gravatar image

updated 3 years ago

This seems to be another Sagemath<-->Fricas interface issue. I am not sure if it is reported or not.

Using sagemath 9.3 with fricas 1.3.6 on Linux

var('x')
integrate(2*x+x^2*2^(1/2),x, algorithm="fricas")
....
  File "sage/misc/parser.pyx", line 1019, in sage.misc.parser.Parser.parse_error (build/cythonized/sage/misc/parser.c:10208)
    raise SyntaxError(msg, tokens.s, tokens.pos)

  File "<string>", line unknown
SyntaxError: Malformed expression

Using fricas directly

(2) -> ii:=integrate(2*x+x^2*2^(1/2),x)

         +-+
        \|2   3    2
   (2)  ---- x  + x
          3
                                            Type: Polynomial(AlgebraicNumber)
(3) -> unparse(ii::InputForm)  

   (3)  "((2^(1/2))/3)::AlgebraicNumber()*x^3+1::AlgebraicNumber()*x^2"
                                                                 Type: String
(4) ->

Is the syntax error coming due to Fricas using those ::AlgebraicNumber() in there? I looked at my older report for this one using Fricas 1.3.6 on Linux (via sagemath 9.0) and the error then was

   Exception raised: UnboundLocalError

So the exception seem to have changed, but both still fail.

Any idea why the above gives syntax error on the sagemath side? Currently this is flagged as failed, when it should really be valid result.

Preview: (hide)

Comments

1

1 Answer

Sort by » oldest newest most voted
0

answered 3 years ago

tolga gravatar image

Try to replace the term 2^(1/2) by a variable a:

var('x,a')
integrate(2*x+x^2*a,x, algorithm="fricas")

to obtain

1/3*x^3*a + x^2

Then you can substitute a=2^(1/2).

Preview: (hide)
link

Comments

Thanks. But I can't really do this. These integrals come from a large integration test files (over 70,000 integrals) and they are read by a program and processed in batch mode. It is not possible to check each integral and decide what to do for each different algorithm used by integrate to avoid possible problems with the interface.

Nasser gravatar imageNasser ( 3 years ago )

Can a try-except solve your problem:

f(x)=2*x+x^2*2^(1/2)

try:
    res=integrate(f(x),x, algorithm="fricas")
except:
    res=integrate(f(x),x)

print(res)
tolga gravatar imagetolga ( 3 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 3 years ago

Seen: 269 times

Last updated: May 27 '21