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

6 vues (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;

Catégories

En savoir plus sur Polynomials dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by