Erstens nehme die Daten:Wie verwende ich eps in dieser Situation, wo ich Unterschiede von kumulativen Summen
orig = reshape([0.0000000000000000 0.3480000000000000 0.7570000000000000 1.3009999999999999 2.8300000000000001 4.7519999999999998 5.2660000000000000 5.8120000000000003 14.3360000000000000 15.3390000000000000 ],[10 1])
change = reshape([0.0000000000000000 0.3480000000000000 0.0000000000000000 0.9530000000000000 1.5290000000000001 1.9219999999999997 0.5140000000000002 0.5460000000000003 0.0000000000000000 9.5270000000000010 ],[10 1])
change = cumsum(change)
orig
ist ein Vektor von Sekunden verstrichen ist. change
ist ein Vektor, der abgeleitet wird, indem Unterschiede zwischen (einigen) Elementen von orig
genommen werden. Die kumulative Summe von change
hat einige Elemente, die tatsächlich dem entsprechenden Element in orig
entsprechen.
jedoch durch Präzisions Probleme:
diff = orig - change
gibt
diff =
0
0
0.409
0
0
0
0
0
8.524
-1.77635683940025e-15
Es scheint, dass, wenn ich den folgenden Befehl ausführen:
diff(abs(diff) <= eps(orig)) = 0
dann Einträge dieses Sets, die sein sollte Null, aber nicht aufgrund von Genauigkeitsproblemen, um Null zu sein.
Meine Frage ist, ist dies der richtige Weg, es zu tun? Warum ist der Vergleich <=
statt <
? Sollte die Aussage sein:
diff(abs(diff) < k*eps(orig)) = 0
für einige k > 1
eine gewisse Toleranz zu geben? Wenn ja, wie würde man wählen k
?
Falls es notwendig ist, zu wissen, wie change
von orig
abgeleitet wird, das folgende alternative Beispiel zeigt auch dieses Verhalten:
orig = reshape([0.0000000000000000 0.3480000000000000 0.7570000000000000 1.3009999999999999 2.8300000000000001 4.7519999999999998 5.2660000000000000 5.8120000000000003 14.3360000000000000 15.3390000000000000 ],[10 1])
change = orig - [0; orig(1:end-1)]
change = cumsum(change)
diff = orig - change
'diff' ist eine eingebaute Funktion. Bitte verwenden Sie diese Art von Namen nicht für Ihre Variablen. Dies kann zu unerwartetem oder unbeabsichtigtem Verhalten führen. – Bernhard