Ask Your Question

"and zero everywhere else"

asked 2011-08-25 20:52:32 +0100

G B gravatar image

I'm trying to create a symbolic function in two variables that returns cos(x)cos(y) for -pi/2<=x<=pi/2 and -pi/2<=y<=pi/2, and zero everywhere else.

I've dug around in the piecewise documentation and I'm running up against a few limitations:

-- no infinite intervals prevents the "everywhere else" construct.

-- I don't think there's a way to express the fact that 3*pi/2 == -pi/2

-- I haven't had much luck defining a piecewise function in two variables.

Is there a way to do this, or am I doomed to a python function and if/else statements?



edit retag flag offensive close merge delete


Yeah, this isn't really (currently) doable in Sage very nicely. Of course, you could just do a Python function, as you say. The Piecewise class was useful at its time (and still works well for what it was designed to do), but isn't really able to do more advanced things. I'm not sure what you mean about 3*pi/2==-pi/2; this isn't true even if you are talking about the outputs of your particular function, since your function is zero outside your "box".

kcrisman gravatar imagekcrisman ( 2011-08-25 22:02:46 +0100 )edit

What I mean by 3pi/2==-pi/2 is that I want to accommodate the periodicity of the cosine. I have rotational symmetry in my problem, and don't want to concern myself with whether the input allows negative angles, or allows angles greater than 2pi. I suppose that's a separate problem from the question I asked...

G B gravatar imageG B ( 2011-08-25 23:08:03 +0100 )edit

Why are you trying to create such a function? Knowing this might help us suggest something more useful than symbolic functions. And why is writing a python function "doom"?

niles gravatar imageniles ( 2011-08-26 08:56:00 +0100 )edit

It's only "doom" because I'd feel like I failed. I'm documenting a new algorithm, and I'm giving Sage another go as a means of doing live documentation. I've been trying to keep as much of the flow symbolic as possible because a sequence of equations is easier for the audience to follow than Python. I could, of course, simply typeset equations for documentation and implement them in Python, but executing the symbolics directly minimizes the chance that the math and the execution diverge. For this particular equation, I'm modeling an antenna pattern, and the model really only fits for the main lobe. The back lobe should be modeled as zero.

G B gravatar imageG B ( 2011-08-26 21:47:47 +0100 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2011-08-30 01:21:47 +0100

benjaminfjones gravatar image

This can be accomplished with the Heaviside step function, something that should be familiar in engineering (especially electrical engineering) contexts. Try sage: heaviside? to see the docsting. I'll give a one variable example that you can easily turn into a two variable example for your application:

sage: g(x) = (1-heaviside(x-pi/2)) * heaviside(x + pi/2)
sage: plot(g(x), (x, -pi, pi))
sage: plot( g(x) * cos(x), (x, -pi, pi))
edit flag offensive delete link more


Hmm, great point! Not a trick I often think to use, but of course available. Does the two-variable example do integration, differentiation right as well?

kcrisman gravatar imagekcrisman ( 2011-08-30 12:39:58 +0100 )edit

That did it! Thanks!

G B gravatar imageG B ( 2011-09-07 21:17:15 +0100 )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


Asked: 2011-08-25 20:52:32 +0100

Seen: 488 times

Last updated: Aug 30 '11