Logarithmische Translation umkehren

Neue Frage »

Achromat Auf diesen Beitrag antworten »
Logarithmische Translation umkehren
Meine Frage:
Guten Tagchen

ich als Programmierer verwende die Logarithmische Transformation um einen großen Wertebereich anfänglich mit einem Schieber langsam zu steigern bis der wert exponentiell ansteigt und sein Maximum schnell erreicht.

Dafür verwende ich den unten stehenden Rechengang um einen Schieber Bereich von 0.01 - 2Sekunden zu verwenden um eine Belichtungszeit in Mikrosekunden auszudrücken. der maximal Wert ist also 2million mikrosekunden.

LogInterFromPosition(Stellwert 0.5[s] , maximalStellwert 2.0[s],MinimalStellwert 0.01[s], Skalierziel MinimalWert 1[µS], MaximalWert 2000000[µS])

Das klappt wunderbar, und man effektiv regeln, aber wie bekomme ich aus dem Skalierziel Bereich 1-200000 wieder den Stellwert zurück. Das würde ich mal gerne wissen.. Vielen Dank für Hinweise Karsten aus Berlin

Meine Ideen:
__inline double CCamOpt::LogInterFromPosition(double x, double minIn, double maxIn, double dmax, double dmin)
{
double v((log(dmax) - log(dmin)) / (maxIn - minIn));
double n((minIn * log(dmax) - maxIn * log(dmin)) / (log(dmax) - log(dmin)));
return exp(v * (x - n)); //logarithmische translation (Kehrwert unklar)
}
HAL 9000 Auf diesen Beitrag antworten »

D.h., du willst einfach nur Gleichung nach umstellen? Wo genau klemmt es denn da?
Achromat Auf diesen Beitrag antworten »

Ja das wäre toll, ich bin leider etwas rückständig mit den Rechenregeln, wie würde denn das Äqualen aussehen , das nach dem Eingangswert x(Stellwert) umstellt.
Und das geht trotz der logarithmischen Interpolation ?

Ich bin etwas aus der Übung wie mir scheint nach 40 Jahren Schulentzug smile

Aber umstellen so wie Du gesagt hast wäre schon schön..

Leider klappt es nicht, ich habe versucht die Kurve zu spiegeln und zu drehen aber schwierig bleibts den stellwert bekomme ich nicht mehr raus leider ...
Könntest Du mir da helfen ?

Online umstellter versagen mit meiner programmierstyle Notifikation..

(Oh mein Gott es ist voller Sterne)
HAL 9000 Auf diesen Beitrag antworten »

Von außen nach innen vorarbeiten:





,

und das mit den Werten sowie von oben.


Ein Kommentar hinsichtlich des Rechenaufwands zu den Formeln bzw. : Die sind einigermaßen effizient, wenn man die Koeffizienten und vorberechnet, d.h., nur einmal bestimmt und dann für viele oder anwendet.

Wenn es aber so wie oben geschieht, d.h., für jedes einzelne erneut zu berechnen, dann sind folgende Darstellungen weniger rechenaufwändig:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
__inline double CCamOpt::LogInterFromPosition(double x, double minIn, double maxIn, double dmax, double dmin)
{
	double ldmin = log(dmin);
	return exp((log(dmax) - ldmin) / (maxIn - minIn) * (x - minIn) + ldmin);
}

__inline double CCamOpt::InvLogInterFromPosition(double y, double minIn, double maxIn, double dmax, double dmin)
{
	double ldmin = log(dmin);
	return (maxIn - minIn) / (log(dmax) - ldmin) * (log(y) - ldmin) +  minIn;
}
Möglicherweise muss das mit der Extrazeile "ldmin = log(dmin)" auch gar nicht sein - moderne Compiler erkennen, dass log(dmin) nur einmal berechnet werden muss und optimieren das auch so ganz gut raus.

Aber wie gesagt: Vorberechnung von wäre der viel bessere Weg bei vielen . In der Regel sind und ja deutlich teurer als die Grundrechenarten, man sollte also die Häufigkeit ihrer Aufrufe auf das notwendige Minimum beschränken.
Achromat Auf diesen Beitrag antworten »
Es ist voller Sterne
Hal, Mensch..

Jetzt habe ich das integriert:
Das ist ja genial, das funktioniert sehr präzise.

Ich mache ja selber auch irre Rechengänge, aber ich folge keinen Regeln,
es entstand sogar eine eigene Form der Zahlenwahrnehmung.

Aber das mit Regeln wieder auf den Urwert bringen, ist eine Leistung
die nur durch akribische Gesetzeskunde hervorzubringen ist.

Das ist sehr Bewundernswert, so einen HAL zu haben wäre schon schön smile

Ich habe mir damit nun noch ein anderes Problem eingehandelt das ich
erst mal verstehen muss, die Belichtungszeit kann ich nun also wieder einer
Schieberposition zuordnen das ist erstmal sehr aufregend.

Wird auch in den Sourcen erwähnt das HAL die Aufgabe löste.
Das bleibt sicher nicht unbemerkt.

Die besten Grüße aus Preußen
Karsten
FlexxVision.de
Achromat Auf diesen Beitrag antworten »
Nachmessung
Gegentest erfolgreich

code:
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:
31:
32:
33:
34:
35:
36:
#include "stdio.h"
#include "math.h"

__inline double LogInterFromPosition(double x, double minIn, double maxIn, double dmax, double dmin)
{
	double ldmin = log(dmin);
	return exp((log(dmax) - ldmin) / (maxIn - minIn) * (x - minIn) + ldmin);
}

__inline double InvLogInterFromPosition(double y, double minIn, double maxIn, double dmax, double dmin)
{
	double ldmin = log(dmin);
	return (maxIn - minIn) / (log(dmax) - ldmin) * (log(y) - ldmin) +minIn;
}

int main()
{
	for (float x = 0.01; x < 2.0; x = x + 0.1)
	{
		double minsec = 0.01;//0.10Sek=10ms
		double maxsec = 2.00;//2Sek
		double maxval = 2000000;//2Sek = 2 Milionen mikrosekunden
		double minval = 1;//100 Mikrosekunden

		//logorythmischetranslation von Sekunden nach Mikrosekunden
		double v1 = LogInterFromPosition(x, minsec, maxsec, maxval, minval);

		//logorythmischetranslation umkehren von Mikrosekunden nach Sekunden um einen deckungsgleichen Stellwerte aus dem istwert(mikrosekunden) zu erlangen
		double v2 = InvLogInterFromPosition(v1, minsec, maxsec, maxval, minval);

		printf("Stellwert=%f  ExpLogStellWert=%f Kehrwert=%f\r\n", x, v1, v2);
	}

    return 0;
}
 
 
HAL 9000 Auf diesen Beitrag antworten »

Deine Begeisterung in allen Ehren, aber mach das Thema nun nicht aufregender als es ist:

Zwischen Einstellwert In (im Bereich bis ) und dem Logarithmus des Ausgangswerts (im Bereich bis ) herrscht ein linearer Zusammenhang. D.h., es geht abgesehen von dieser äußeren Transformation de facto nur um eine einfache Geradengleichung, die die beiden Punkte und miteinander verbindet.

Zitat:
Original von Achromat
Wird auch in den Sourcen erwähnt das HAL die Aufgabe löste.
Das bleibt sicher nicht unbemerkt.

Da kann ich mir ein Lachen nicht verkneifen. Wenn du in den Sourcen erwähnst, dass du dir mit Hilfe des Matheboards ein wenig Klarheit über diese Transformation verschafft hast, ist es auch gut. smile
Achromat Auf diesen Beitrag antworten »

Es sind gerade die einfachen Dinge die nicht offenbar werden konnten.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »