DMUG-Archiv 2025

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: [Dmug] Temperaturrechnen

Hallo Stefan und weitere Freundinnen und Freunde des Temperaturrechnens,

der Vollständigkeit halber  noch mit den "DegreesFahrenheit[Difference]",

In[26]:= UnitConvert[Quantity[.0, "DegreesFahrenheit"], #] & /@ {"Kelvins", "DegreesCelsius"} Out[26]= {Quantity[255.372, "Kelvins"],  Quantity[-17.7778, "DegreesCelsius"]}

wobei zu brachten ist

In[27]:= UnitConvert[Quantity[1., "Kelvins"], "DegreesFahrenheitDifference"]
Out[27]= Quantity[1.8, "DegreesFahrenheitDifference"]

In[52]:= (* correct *)
        Quantity[10., "DegreesFahrenheit"] + Quantity[3., "DegreesFahrenheit"]
Out[52]= Quantity[517.967, "Kelvins"]

In[53]:= (* Probe *)
        Quantity[255.372, "Kelvins"] + UnitConvert[Quantity[10., "DegreesFahrenheitDifference"], "Kelvins"] + Quantity[255.372, "Kelvins"] +
 UnitConvert[Quantity[3., "DegreesFahrenheitDifference"], "Kelvins"]
Out[53]= Quantity[517.966, "Kelvins"]

In[56]:= (* correct *)
        UnitConvert[Quantity[10., "DegreesFahrenheit"] + Quantity[3., "DegreesFahrenheit"], "DegreesFahrenheit"]
Out[56]= Quantity[472.67, "DegreesFahrenheit"]

In[57]:= (* Probe *)
        UnitConvert[ Quantity[517.967 - 255.372, "Kelvins"], "DegreesFahrenheitDifference"]
Out[57]= Quantity[472.671, "DegreesFahrenheitDifference"]


In[58]:= (* wiederum falsch, wie schon bei den "DegreesCelsius" *)
    Quantity[1., "DegreesFahrenheit"] +  Quantity[2., "DegreesFahrenheit"] + Quantity[3., "DegreesFahrenheit"]
Out[58]= Quantity[6., "DegreesFahrenheit"]


In[59]:= (* kann man machen, ist aber weder zur Freude von Geheimrat Planck noch ein Vergnügen für Lord Kelvin *)
Quantity[273.15, "Kelvins"] - Quantity[283.15, "Kelvins"]
Out[59]= Quantity[-10., "Kelvins"]


(* junk in, junk out *)

In[61]:= Quantity[-10., "Kelvins"]
Out[61]= Quantity[-10., "Kelvins"]


Grüsse

Udo.


On 7/19/2025 2:21 PM, Susanne & Udo Krause via demug wrote:
Hallo Stefan,

besten Dank für Ihren Hinweis, Temperaturen mit anderen Einheiten als "Kelvins" sollten mit der entsprechenden Differenzeinheit addiert werden.

Finden Sie  bitte in der Folge einige Beispiele, die zeigen, wie inkonsistent oder - mit Verlaub - geradezu unsinnig die Implementation umgesetzt wurde.

In[42]:= $Version
Out[42]= "14.2.1 for Microsoft Windows (64-bit) (March 17, 2025)"


Das folgende Beispiel ist falsch

(1) entweder wird zuerst auf 282.15 °C addiert und dann subtrahiert,  wodurch 281.5 "DegreesCelsiusDifference" entstehen müssen (2) es wird zuerst subtrahiert (7 "DegreeCelsiusDifference"), dann addiert: 8 °C

In[34]:= Quantity[1., "DegreesCelsius"] + Quantity[8., "DegreesCelsius"] -  Quantity[1., "DegreesCelsius"]
Out[34]= -(Quantity[-554.3, "DegreesCelsius"])

Out[34] wäre richtig gewesen, wenn die Einheit "Kelvins" gelautet hätte, das ist aber nicht der Fall.

Das folgende  ist, wie von Ihnen festgestellt, korrekt im Sinne der Reference

In[35]:= UnitConvert[Quantity[1., "DegreesCelsius"] + Quantity[8., "DegreesCelsius"], "DegreesCelsius"]
Out[35]= Quantity[282.15, "DegreesCelsius"]

In[36]:= 273.15 + 1 + 273.15 + 8. (* K *) - 273.15 (* ->  °C; korrekt im Sinne des Manuals *)
Out[36]= 282.15

Auch korrekt mit syntaktischem Zucker, es resultiert eine "DegreeCelsiusDifference"

In[37]:= UnitConvert[Quantity[1., "DegreesCelsius"] + Quantity[8., "DegreesCelsius"],  "DegreesCelsius"] - Quantity[1, "DegreesCelsius"]
Out[37]= Quantity[281.15, "DegreesCelsiusDifference"]

erneut falsch, auch das sollte eine "DegreesCelsiusDifference" ergeben:

In[38]:= (Quantity[1., "DegreesCelsius"] + Quantity[8., "DegreesCelsius"]) - Quantity[1., "DegreesCelsius"]
Out[38]= -(Quantity[-554.3, "DegreesCelsius"])

das ist korrekt

In[39]:= Quantity[1., "DegreesCelsius"] + (Quantity[8., "DegreesCelsius"]  -  Quantity[1., "DegreesCelsius"])
Out[39]= Quantity[8., "DegreesCelsius"]

Nun kann man Temperaturzeitreihen betrachten:

In[29]:= Clear[ts]
ts = TimeSeries[Table[{DateObject[{2025, 6, o}], Quantity[o, "DegreesCelsius"]}, {o,1, 30}]]

Out[30]= TemporalData[TimeSeries, {{
QuantityArray[
StructuredArray`StructuredData[{
     30}, {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},
      "DegreesCelsius", {{1}}}]]}, {
TemporalData`DateSpecification[{2025, 6, 1, 0, 0, 0}, {2025, 6, 30, 0,
     0, 0}, {1, "Day"}]}, 1, {"Continuous", 1}, {"Discrete", 1},
  1, {ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1},
   ValueDimensions -> 1}}, True, 14.2]

Im folgenden  fehlen im Sinne des Manual 30 * 273.15.

In[31]:= Total[ts]
Out[31]= Quantity[465, "DegreesCelsius"]

In[33]:= Plus @@ Range[30]
Out[33]= 465

Das TimeSeriesWindow[] tut es nicht besser und ist im Sinne des Manuals eben falsch:

In[40]:= Total[TimeSeriesWindow[ts, {DateObject[{2025, 6, 1}], DateObject[{2025, 6, 4}]}]]
Out[40]= Quantity[10, "DegreesCelsius"]

In[41]:= Plus @@ Range[4]
Out[41]= 10

in der Zeitreihe werden Temperaturen [°C] auf die Art des kleinen Manns von der Straße addiert, aber warum?

Mit den besten Grüssen
Udo.
<snip>

_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html

*******************************************************************************
   Dr. Stefan Welke
   In der Wehrhecke 29
   D 53125 Bonn
   phone: +49228250772
*******************************************************************************

_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html
_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html

Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html