Manngebirge stauchen / strecken
26.05.2016 15:49:59
raspi
leider kann ich auf den ursprünglichen Thread nicht mehr antworten, daher die Fortsetzung hier zu dieser Fragestellung: https://www.herber.de/forum/archiv/1492to1496/t1492431.htm
Es ging darum, wie man eine Aufwandsverteilung über die Zeit unter Beibehaltung des Gesamtaufwandes zeitlich strecken oder verkürzen kann. Das Problem hatte mich sehr lange beschäftigt, habe nun aber für meine konkrete Fragestellung eine Antwort gefunden, die ich hier gerne vorstellen möchte.
Sehr wahrscheinlich gibt es in Bezug auf die Programmierung Optimierungsmöglichkeiten, wie man den Code schöner / effektiver / intelligenter schreiben kann. Falls hierzu jemand Ideen und Tipps hat, dann wäre ich darüber sehr erfreut.
Die erste Lösung des Problems durch lupo1 ( https://www.herber.de/forum/archiv/1492to1496/t1492431.htm#1492464 ) war sehr komprimiert und auf Sheet-Basis und behandelte erstmal nur die Stauchung. Wie geschildert könnte man das im Sheet auch abwandeln, aber ich konnte das in VBA nicht auf Streckung ausbauen. Und habe die mathematische Idee dahinter bis heute nicht wirklich verstanden.
Der Ansatz von Michael ( https://www.herber.de/forum/archiv/1492to1496/t1492431.htm#1493542 ) entspricht dem logischen Vorgehen, das ich nun genau so umgesetzt habe. Den Code von Michael konnte ich ebenfalls nicht auf mein Problem "umbauen", denn auch der basierte erstmal nur auf Stauchung und hatte weitere Restriktionen.
Daher nun meine Lösung:
https://www.herber.de/bbs/user/105803.xlsm
Ein großer Knackpunkt war nach den ersten erfolgreichen Tests, dass es einzelne Laufzeiten gab, die fehlerhaft berechnet wurden. Nach langer Suche, wo ich einen Logikfehler habe, konnte ich herausfinden, daass es "lediglich" daran lag, wie Gleitkommazahlen berechnet werden. Hier haben die Rundundsfehler zugeschlagen und Fehler produziert, die nicht nachvollziehbar waren. Durch erzwunges Runden hat es dann funtkioniert. Aber dies hatte Stunden Recherche bedurft :-(
Für Verbesserungsvorschläge bin ich jederzeit offen.