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

AI Thread Summary
To define a stepwise function in Mathematica for atmospheric modeling, users can utilize the Heaviside function or the Piecewise function, depending on their version of the software. For example, the Piecewise function can be structured to model specific temperature drops over time. Users have shared various methods, including using the Which function and plotting techniques to achieve the desired stepwise appearance. Additionally, there is discussion on whether a cubic spline could be used to approximate the step function shape. The conversation highlights the importance of understanding the capabilities of different Mathematica versions for effective modeling.
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,

\left( Heaviside \Heaviside \left( x-1 \right) - Heaviside \left( x-3 \right) \right) x^2

is the the function x^2 for 1 < x < 3, 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: 654
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.
 

Similar threads

Replies
1
Views
2K
Replies
2
Views
6K
Replies
1
Views
2K
Replies
1
Views
4K
Replies
0
Views
555
Replies
1
Views
2K
Replies
6
Views
4K
Replies
2
Views
3K
Back
Top