First time here? Check out the FAQ!

Ask Your Question
0

"and zero everywhere else"

asked 13 years ago

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?

Thanks--

Greg

Preview: (hide)

Comments

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 ( 13 years ago )

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 ( 13 years ago )

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 ( 13 years ago )

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 ( 13 years ago )

1 Answer

Sort by » oldest newest most voted
3

answered 13 years ago

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))
Preview: (hide)
link

Comments

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 ( 13 years ago )

That did it! Thanks!

G B gravatar imageG B ( 13 years ago )

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: 13 years ago

Seen: 642 times

Last updated: Aug 30 '11