AW: Minima berechnen
07.04.2016 14:54:02
Michael
Hi Heiko,
jetzt hab ich noch an Deiner Geschichte gebastelt.
Eine "Interpolation" muß ja gar nicht durchgeführt werden, da Deine Berechnungen (mit Ausnahme der in E7) ja immer gleich aufgebaut sind.
Wenn man das Ganze zusammenfaßt, ist die Berechnung Deiner Spalte E mit der Formel
=((B10*coeff_E2+coeff_F2*coeff_B27)/WURZEL(3))^2*10/B10
in Spalte S erledigt; die beiden Werte E10 und S10 habe ich zum direkten Vergleich blau markiert.
Das läßt sich natürlich in VBA auch schreiben:
Function polynom(x As Double, coE2#, coF2#, coB27#) As Double
polynom = ((x * coE2 + coF2 * coB27) ^ 2) / 3 * 10 / x
End Function
aber noch deutlich (um die 30%) optimieren.
Ich habe zwei Makrovarianten eingebaut:
a) die höchst simple, einfach in einer Schleife Werte in B28 zu schreiben und das Ergebnis zum Vergleich in E28 "abzuholen": dauert natürlich vergleichsweise "ewig", kommt aber schon im ersten Durchlauf (mit /1000-Schritten) auf ein besseres Ergebnis: 37,5 und 0,8 glatt.
b) die optimierte Version, bei der VOR der eigentlichen Berechnung alle Werte, die nach Ausmultiplikation konstant sind, in Variablen verpackt werden, so daß der Rechenaufwand minimal ist.
Das sieht dann so aus:
Function MinNumerischFormel(von#, bis#, schritt#) As Double
Dim y#, ymin#, xmin#, x#, y2#
Dim c_E2#, c_F2#, c_B27#, cProd#, cEP#, cPQ#, cEQ#, ZweiProdMalc_E2#
Dim iterationen&, iSchritt&
Dim t0 As Single
c_E2 = Range("coeff_E2"): cEQ = c_E2 ^ 2
c_F2 = Range("coeff_F2")
c_B27 = Range("coeff_B27")
cProd = c_F2 * c_B27: cPQ = cProd ^ 2
cEP = cProd * c_E2
ZweiProdMalc_E2 = 2 * cProd * c_E2
If bis 0!"
MinNumerischFormel = 2 ^ 32
Exit Function
End If
ymin = 2 ^ 32
x = von
iSchritt = Int(1 / schritt)
t0 = Timer
While Round(x, 14)
und rechnet mit 1/10000er Schritten in ein paar hundert Millisekunden.
Beide Varianten rechnen nicht ALLES durch, sondern ausgehend von einem via Formeln ermittelten Startwert in Zelle B38.
Ich habe einige NAMEN definiert, für E2, F2 und B27, so nach dem Motto "coeff_E2", weil das übersichtlicher weiterzurechnen war.
Die erste Variante kannst Du einsetzen, falls sich Deine Formeln häufig ändern, die zweite, wenn nicht.
Die Datei: https://www.herber.de/bbs/user/104823.xlsm
Die Spalten O-V kannst Du löschen, die braucht das Makro nicht, die waren nur zur Verifikation der Formeln.
Schöne Grüße,
Michael