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.
On 7/18/2025 12:37 PM, Stefan Welke wrote:
Lieber Udo,
die letzte Rechnung ergibt sich aus der Erläuterung (Hilfe) zu
Temperature Units:
"When adding two temperature quantities, the result will be the sum of
the values including the difference from absolute zero. The result of
summing two temperatures is equivalent to converting those
temperatures to Kelvin and then summing, with results canonically
given in Kelvin:"
D.h. in diesem Fall: -8°C = (273.15 - 8) °K und -0.5°C = (273.15 -
0.5) °K, also -8°C + (-0.5)°C = (273.15 -8 + 273.15 - 0.5) °K =
(273.15 -8 + 273.15 - 0.5 -273.15) °C = (273.15 -8.5) °C = 264.65°C
Viele Grüße
Stefan
On 17.07.25 17:45, Susanne & Udo Krause via demug wrote:
Liebe Freundinnen und Freunde der Temperatureinheiten,
Mal sind die "DegreesCelsius" doch schon "Kelvins", aber das will
keiner, der "DegreesCelsius" schrieb
In[52]:= (Quantity[-8., "DegreesCelsius"] - Quantity[-.5,
"DegreesCelsius"])/2
Out[52]= Quantity[-3.75, "DegreesCelsiusDifference"]
In[79]:= UnitConvert[(Quantity[-8., "DegreesCelsius"] + Quantity[-.5,
"DegreesCelsius"])/2, "DegreesCelsius"]
Out[79]= Quantity[-4.25, "DegreesCelsius"]
In[72]:= Mean[{Quantity[-8., "DegreesCelsius"], Quantity[-.5,
"DegreesCelsius"]}]
Out[72]= Quantity[-4.25, "DegreesCelsius"]
In[71]:= -8. + 3.75 + 3.75
Out[71]= -0.5
(* soweit gut *)
In[84]:= UnitConvert[ Quantity[-8., "DegreesCelsius"] + Quantity[-.5,
"DegreesCelsius"], "DegreesCelsius"]
Out[84]= Quantity[264.65, "DegreesCelsius"]
In[85]:= 273.15 - 8.5
Out[85]= 264.65
In[82]:= UnitConvert[ Quantity[8., "DegreesCelsius"] + Quantity[.5,
"DegreesCelsius"], "DegreesCelsius"]
Out[82]= Quantity[281.65, "DegreesCelsius"]
In[86]:= 273.15 + 8.5
Out[86]= 281.65
die letzten beiden sind falsch in der Einheit.
In[92]:= $Version
Out[92]= "14.2.1 for Microsoft Windows (64-bit) (March 17, 2025)"
Grüsse
Udo.
_______________________________________________
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