Logarithmus-Problem...

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

also, wenn du eine Kurve hast, wo es sich lohnt das ganze logerithmisch aufzutragen, dann gibt es keine 0 (zerfall einer Schaumkrone).
Deine werte werden ja halt nur sehr klein.
Du kannst also deine Werte nicht von 0 bis 1 Skalieren, nur vllt von 1 bis 10 oder 0,01 bis 1 ....

Wenn du die Skala aber gleich so beschriftst das die die werte schon LOG() machst, dann kannst du halt dein 0 bis 1 machen, wobei damit alle werte zwischen 1 und 10 enthalten sind.

Wenn dein Größter Wert zB 236 ist und du willst das er später bei 1 ist, nimmst du halt den LOG236(236)
Wenn du keine 10er oder e-Basis hast errechnest du den LOG mit :
Log(Wert)/Log(Basis)

PS: haben deine Werte eine Einheit, und du nimmst den LOG davon, entfällt die Einheit
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

So lässt sich die y-Achse mit beliebigen Werten logarithmisch stauchen:

Code: Alles auswählen

Procedure.f LogStauch(y.f)
  If y >= 0
    ProcedureReturn Log10(1 + y)
  Else
    ProcedureReturn -Log10(1 - y)
  EndIf
EndProcedure

Debug LogStauch(0)
Debug LogStauch(1)
Debug LogStauch(-1)
Debug LogStauch(12000)
Debug LogStauch(-12000)
Man nutzt zur Stauchung also nur den Teil >= 1 der Logarithmusfunktion.
Um auf Bereich [-1, 1] zu normieren einfach durch Abs(LogStauch(AbsMaxWert)) dividieren.
!UD2
Antworten