How to prevent decrement (melting) past 0 until growth increases again?

1 vue (au cours des 30 derniers jours)
Siân Chilcott
Siân Chilcott le 7 Août 2020
Commenté : Siân Chilcott le 12 Août 2020
I am creating a snow and ice height time series. Once the snow (hsnow) has completely melted, the energy is used to melt ice (hice). I may be being stupid but I can't seem to find a way to prevent the snow height falling below 0 (as the energy that causes it to decrease past 0 would be used to decrease an ice layer).
Basically once the snow height falls below 0 I want to enforce it at 0 or prevent further decrement past 0, until the snowfall increases again.
hsnow(day+1) = hsnow(day) + snowfall(day) + dh_snow;
h_ice(day+1) = hice(day) + growth(day) + dh_ice;
(dh_snow and dh_ice are the amount of ice and snow melted per day based on the energy available.)
Thanks in advance for any help!

Réponse acceptée

Image Analyst
Image Analyst le 7 Août 2020
Another way, inside the loop, is to use the max() function:
hsnow(day+1) = max([0, hsnow(day) + snowfall(day) + dh_snow]);
h_ice(day+1) = max([0, hice(day) + growth(day) + dh_ice]);
If either one would be negative, like -5, then it will clip to 0 because the max of -5 and 0 is 0.
  10 commentaires
Image Analyst
Image Analyst le 11 Août 2020
For me it crashes at day 241. Try running the attached script.
Now let's say that I took the values of a, b, c, d, and e when it crashes and extend the days to 500. It would look like the plot in the lower left:
You can see that the 4th order equation has a min of 2.41 which means that it never crosses the x axis and has no real roots. So your code will just have to take that into account.
Siân Chilcott
Siân Chilcott le 12 Août 2020
Ah that makes sense - thanks so much for your help!

Connectez-vous pour commenter.

Plus de réponses (1)

Sudheer Bhimireddy
Sudheer Bhimireddy le 7 Août 2020
As soon as you estimated hsnow, force all/any negative values to 0
hsnow(hsnow<0)=0;

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by