# ValueError: free variable x |--> x when plotting the function x

Hi all.

I got the following problem:

sage: plot(symbolic_expression(x).function(x))


this raises

ValueError: free variable: x |--> x


If I replace x by anything else (but 1*x) it works fine.

How can I do ?

My rationale behind my question is that I have a class which takes a function as argument and can perform many thinks on it, among other the plot. I made the following :

class MyFunction(object):
def __init__(self,f):
self.f=symbolic_expression(f).function(x)
def plot(self):
return plot(self.f)


My point in doing so is that I have to accept, as input f expressions like x**2, 2, g.diff(x) (where g is an other function) and so on. In these cases, it turns out that I need to use the symbolic_expression trick in order to be sure that what I have is a function (need for numerical integration for example)

My questions :

1. Can I do otherwise in __init__ in order to be sure to be able to use numerical integration, derivative, ... on self.f ?

2. If not, how can I plot when the input is simply "x" ?

edit retag close merge delete

Sort by » oldest newest most voted

This is Trac 10246. I knew I'd seen it before (in fact, I reported it), but it took a little while to find it. Unfortunately, that one has been on the back burner, but it's an easy fix once someone makes time to do it.

You definitely need to make the function callable, and this is one way to do it. So I don't see an obvious way around question 1. As for question 2, you may just have to catch this case explicitly for now (a try/except block where if plot(self.f) doesn't work, you check if the function is the identity and plot that).

Edit: Patch at Trac 10246 is now ready for review.

more

In fact, see also http://ask.sagemath.org/question/198/plotting-x-free-variable-error ! Ironically, this does not appear under related questions on the right...

( 2011-03-15 11:46:07 +0200 )edit

This is obviously not the answer I was expecting ;) But thanks, I'll do the try ... except.

( 2011-03-15 11:56:16 +0200 )edit