How Can I Define a Stepwise Function in Mathematica for Atmospheric Modeling?

  • Context: Mathematica 
  • Thread starter Thread starter laminatedevildoll
  • Start date Start date
  • Tags Tags
    Function Mathematica
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
7 replies · 23K views
laminatedevildoll
Messages
211
Reaction score
0
How do I define a stepwise function in Mathematica? I am trying to model the behavior of a detector up in the atmosphere. For instance, the detector might experience temperature drops in the atmosphere over a 24 hour period. I would like to know if there's any way of using a step function in Mathematica to do that. Thanks.
 
Physics news on Phys.org
Yes, you can use the Heavisde step function to do this. For exmple,

[tex]\left( Heaviside \Heaviside \left( x-1 \right) - Heaviside \left( x-3 \right) \right) x^2[/tex]

is the the function [itex]x^2[/itex] for [itex]1 < x < 3[/itex], and zero elsewhere.

Heaviside is a Maple function, but Mathematica will have a similar function, with maybe a different name.
 
Which version of Mathematica are you using?

As George suggested, you can use the Heaviside function
Code:
( HeavisideTheta[x - 1] - HeavisideTheta[x - 3] ) x^2

You can do
Code:
f[x_] := 0;
f[x_] := x^2 /; (x > 1 && x < 3)
which is ugly but works.

You can use Which
Code:
g[x_] := Which[x < 1, 0, x > 3, 0, True, x^2];
which is better, but has the unfortunate property that it Hold[]s its arguments, so this won't do if you want to apply functions and replacements to this.

The most elegant way, in my opinion, is using the Piecewise function
Code:
h[x_] := Piecewise[{{x^2, 1 < x < 3}}, 0]
but this function was implemented in 5.1 so that won't help you if you have an older version.
 
Last edited:
CompuChip said:
Which version of Mathematica are you using?
I am using version 6.0.

I actually tried to do a piecewise function but it didn't quite work out. Instead, I just plot the points and connected it so that it looks like a stepwise function. I have attached the plot I want to this post. However, I need to learn how to do achieve this shape the right way with a stepwise function and not just points, because in the future I will need to replace this function instead of a sine function into two differential equations to solve it.

The points I am using are for the attached plot are
{{0, 0}, {0, 1}, {3.5`, 1}, {3.5`, 2}, {5.5`, 2}, {5.5`, 1.5`}, {9.5`,
1.5`}, {9.5`, 2}, {15, 2}, {15, 1}, {24, 1}}
The x values are fixed. The y values can change but the same shape needs to be achieved. If this is impossible to do with a step function, is it possible to model this using a cubic spline function with the same general shape as the step function?
I would appreciate any help.
 

Attachments

  • stepwise.JPG
    stepwise.JPG
    4.4 KB · Views: 690
Last edited:
Code:
Plot[Piecewise[{{1, x < 3.5}, {2, x < 5.5}, {1.5, x < 9.5}, {2, 
    x < 15}}, 1], {x, 0, 25}, PlotRange -> {0, 2}]
worked fine here (Mathematica 6.0), without the vertical lines (they finally fixed that bug :smile:).

But if you insist on the vertical lines, you can use
Code:
Plot[Which[x < 3.5, 1, x < 5.5, 2, x < 9.5, 1.5, x < 15, 2, True, 
  1], {x, 0, 25}, PlotRange -> {0, 2}]
 
For the vertical lines, you can also use the Exclusions option:

Code:
Plot[Piecewise[{{1, x < 3.5}, {2, x < 5.5}, {1.5, x < 9.5}, {2, 
    x < 15}}, 1], {x, 0, 25}, PlotRange -> {0, 2}, Exclusions -> None]
 
CompuChip said:
Code:
Plot[Piecewise[{{1, x < 3.5}, {2, x < 5.5}, {1.5, x < 9.5}, {2, 
    x < 15}}, 1], {x, 0, 25}, PlotRange -> {0, 2}]
worked fine here (Mathematica 6.0), without the vertical lines (they finally fixed that bug :smile:).

But if you insist on the vertical lines, you can use
Code:
Plot[Which[x < 3.5, 1, x < 5.5, 2, x < 9.5, 1.5, x < 15, 2, True, 
  1], {x, 0, 25}, PlotRange -> {0, 2}]

Thanks for your help. :smile:
 
Moo Of Doom said:
For the vertical lines, you can also use the Exclusions option:

Code:
Plot[Piecewise[{{1, x < 3.5}, {2, x < 5.5}, {1.5, x < 9.5}, {2, 
    x < 15}}, 1], {x, 0, 25}, PlotRange -> {0, 2}, Exclusions -> None]

Thanks. :smile: I am still trying to get adjusted to Mathematica.