Ask Your Question
2

unable to numerically solve an equation (basic question)

asked 2011-04-02 09:42:50 +0200

donC gravatar image

updated 2011-04-02 22:48:55 +0200

kcrisman gravatar image

Hello,
I make my first steps with sage and already run into a problem I was not able to solve. When I enter the following:

reset()
var('x')
eqn=x^2+3*x-9==0
sol=solve(eqn,x,solution_dict=true)
sol[x].n(30)

I get the following error message:

The error message is: ('EOF in multi-line statement', (12, 0))

TypeError                                 Traceback (most recent call last)

/home/.../sage-4.6.2/local/lib/python2.6/site-packages/sage/all_cmdline.pyc in <module>()

/home/.../sage-4.6.2/local/lib/python2.6/site-packages/sage/misc/preparser.pyc in load(filename, globals, attach) <br>
   1594         execfile(fpath, globals)<br>
   1595     elif fpath.endswith('.sage'):<br>
-> 1596         exec(preparse_file(open(fpath).read()) + "\n", globals)<br>
   1597     elif fpath.endswith('.spyx') or fpath.endswith('.pyx'):<br>
   1598         import interpreter<br>

/home/.../sage-4.6.2/local/lib/python2.6/site-packages/sage/all_cmdline.pyc in <module>()

/home/.../sage-4.6.2/local/lib/python2.6/site-packages/sage/symbolic/expression.so in sage.symbolic.expression.Expression.__index__ (sage/symbolic/expression.cpp:16771)()

/home/.../sage-4.6.2/local/lib/python2.6/site-packages/sage/symbolic/expression.so in sage.symbolic.expression.Expression._integer_ (sage/symbolic/expression.cpp:4254)()

TypeError: unable to convert x (=x) to an integer

I added the "..." manually for this post.

Obviously I make a severe problem in getting the numerical solution of this simple equation. Maybe you can help me in getting a numerical solution for an equation.

Btw. I get the same error message when I try the example given in the sage tutorial on page 14 ([[s[p].n(30),.....)

Thanks in advance!

edit retag flag offensive close merge delete

Comments

Just so you know, it's possible to make things look like code by indenting them four space - no


or
needed - or by highlighting a region and clicking the button that looks like 101010.

kcrisman gravatar imagekcrisman ( 2011-04-02 22:49:42 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted
5

answered 2011-04-02 11:25:48 +0200

DSM gravatar image

updated 2011-04-02 11:26:41 +0200

It helps to go step-by-step. In this case, the error message "unable to convert x (=x) to an integer" is telling you that something is a symbolic variable (x) which you're trying to treat as something else:

sage: reset()
sage: var('x')
x
sage: eqn=x^2+3*x-9==0
sage: eqn
x^2 + 3*x - 9 == 0

Looks good, now we can solve:

sage: sol=solve(eqn,x,solution_dict=true)
sage: sol
[{x: -3/2*sqrt(5) - 3/2}, {x: 3/2*sqrt(5) - 3/2}]
sage: type(sol)
<type 'list'>

and you see that sol isn't a dictionary, it's a list of dictionaries. So sol[x] can't work, because it's trying to take the "x-th" element of the list, when really you want one of the entries (0 or 1, as Python/Sage starts counting from 0 instead of 1):

sage: sol[0]
{x: -3/2*sqrt(5) - 3/2}
sage: sol[0][x]
-3/2*sqrt(5) - 3/2
sage: sol[0][x].n(100)
-4.8541019662496845446137605031
sage: sol[1][x].n(100)
1.8541019662496845446137605031

Does that make sense?

edit flag offensive delete link more

Comments

Thank you vey much! After reading your response I really felt quite embarrassed.

donC gravatar imagedonC ( 2011-04-02 13:23:54 +0200 )edit

No need; it takes a while to master all the various data types Python uses, if you're not familiar with them.

kcrisman gravatar imagekcrisman ( 2011-04-02 22:50:32 +0200 )edit

Your Answer

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

Add Answer

Question Tools

Stats

Asked: 2011-04-02 09:42:50 +0200

Seen: 6,960 times

Last updated: Apr 02 '11