On Wed, Jun 10, 2009 at 9:53 AM, [email protected]<[email protected]> wrote:
> I get this error:
>
> Traceback (most recent call last):
> ,,,
> TypeError: float() argument must be a string or a number
>
> I guess that sage is trying to evaluate the integral before
> substituting the value for b. Is this correct? How can I get around
> this?
The issue is that you have is that when you do u(x,b), it does s(x)
which doesn't work since s requires a specific numeric value.
I've posted some code which works and is much faster. Changes to note are
1) Use of "i = CDF.gen()" since we are going to be doing things
numerically, this is a bit more efficient.
2) The line "zz = fast_callable(zprime(x)/(z(x)-b), vars=[x,b])" which
makes an object which can quickly evaluate that expression. This is
useful since the numerical integral has to evaluate the function at a
lot of points.
3) Using exp instead of e^ since exp() will try to call the exp()
method directly on its argument.
4) The "lambda x:" in the numerical integral which prevents the error
you were seeing above since x will always be a specific value when
passed into s.
5) The [0] after the numerical integral since that returns a (value,
error) tuple.
sage: f(0)
0.207543207489 - 0.30709310513*I
sage: %timeit f(0)
10 loops, best of 3: 23.4 ms per loop
--Mike
theta_array = [(0,0),(1,2),(pi/2,pi),(pi,4),(3*pi/2,5),(2*pi,2*pi)]
s = spline(theta_array)
i = CDF.gen()
ellipse(x) = e^(i*x)-1/2*e^(-i*x)
z(t) = ellipse(t)
zprime(t) = derivative(z)
b = var('b')
zz = fast_callable(zprime(x)/(z(x)-b), vars=[x,b])
def w(x, b):
return zz(x,b)*exp(i*s(x))
def f(b):
res = 1/(2*pi*i)*(integral_numerical(lambda x:
w(x,b).real(),0,2*pi)[0] + i * integral_numerical(lambda x:
w(x,b).imag(),0,2*pi)[0])
return res.n()
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---