Hi Mani,

On Thu, Aug 13, 2009 at 6:08 PM, Mani chandra<mchan...@iitk.ac.in> wrote:
>
> Hi,
>
>    I have a set of variables which I defined in an array and I'm trying
> to use "solve" to solve for these variables, but I get the following error:
>
> x = []
> N = 3
> for i in range(N):
>    string = 'x' + str(i)
>    temp_var = var(string)
>    x.append(temp_var)
> Eqn = []
> Eqn.append(x[0] + x[1] + x[2])
> Eqn.append(x[0] - x[1] + x[2])
>
> solve([Eqn[1]==0], x[1], solution_dict=True)
>
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>  File "/home/mc/.sage/sage_notebook/worksheets/admin/7/code/47.py", line 17, 
> in <module>
>    solve([Eqn[_sage_const_1 ]==_sage_const_0 ], x[_sage_const_1 ], 
> solution_dict=True)
>  File "", line 1, in <module>
>
>  File 
> "/opt/sage/sage/local/lib/python2.6/site-packages/sage/symbolic/relation.py", 
> line 509, in solve
>    sol_dict=[dict([[eq.left(),eq.right()] for eq in solution]) for solution 
> in sol_list]
>
>
> TypeError: 'sage.symbolic.expression.Expression' object is not iterable
>
>
> However the following seems to work:
>
> solve([Eqn[1]==0], x[1])
>
>
> [x1 == x0 + x2]
>
> The reason I need solution_dict=True is that I need to put the solution
> in x[1], which solve does not do. Could someone please help me out?

Is the following what you're trying to do?

----------------------------------------------------------------------
| Sage Version 4.1, Release Date: 2009-07-09                         |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
sage: x = []
sage: N = 3
sage: for i in xrange(N):
....:     string = "x" + str(i)
....:     temp_var = var(string)
....:     x.append(temp_var)
....:
sage: Eqn = []
sage: Eqn.append(x[0] + x[1] + x[2])
sage: Eqn.append(x[0] - x[1] + x[2])
sage: solve(Eqn[1] == 0, x[1], solution_dict=True)
[{x1: x0 + x2}]

You only had one equation to solve and you wanted to get the solution
dictionary for the solution of that one equation. In that case, you
don't need to put that equation in a list. So instead of

[Eqn[1] == 0]

I changed it to

Eqn[1] == 0

If you have more than one equation to solve, then you can put those
equations in a list. The solve() command would then interpret the list
of equations as a system of simultaneous equations. For example:

sage: solve([Eqn[1] == 0, Eqn[0] == 0], [x[1], x[0]], solution_dict=True)
[{x1: 0, x0: -x2}]

-- 
Regards
Minh Van Nguyen

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to