Autor Beitrag
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 24.01.08 23:44 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function Tendenz(const x: array of Double): Double;
var
  i, n: Integer;
  a, b: Double;
begin
  n := length(x);
  a := 0;
  b := 0;
  for i := 0 to n-1 do
  begin
    a := a + x[i];
    b := b + i*x[i];
  end;
  Result := 2*arctan(6*(2*b-a*(n-1))/(sqr(n)*n-n))/pi;
end;

Rückgabewert ist zwischen -1 und 1:
< 0  Tendenz fallend
= 0  Konstant
> 0  Tendenz steigend

Macht dasselbe wie der Code von alzaimar: Berechnet Least-Squares Lösung der linearen Regression mit implizit x[i]=i. Die Steigung wird noch in einen Winkel umgewandelt und in den Bereich [-1..1] gedrückt.

Mit dem Vorzeichen kannst du also herausfinden, ob die Tendenz zu oder abnehmend ist. Die Werte an sich haben in diesem Fall keine reale Bedeutung. Sie können lediglich benützt werden, um verschiedene Tendenz-Werte miteinander zu vergleichen.

Wenn du Steigungen als Rückgabe willst, nimmst du nur den Ausdruck in arctan. Da x[i]=i angenommen wird, haben die Werte weiterhin keine reale Bedeutung, jedoch bedeutet dann ein doppelt so hoher Wert ein doppelt so hohe Zunahme.

x[] ist in deinem Code L[].
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 26.01.08 10:45 
user profile icondelfiphan hat folgendes geschrieben:
Mit dem Vorzeichen kannst du also herausfinden, ob die Tendenz zu oder abnehmend ist. Die Werte an sich haben in diesem Fall keine reale Bedeutung. Sie können lediglich benützt werden, um verschiedene Tendenz-Werte miteinander zu vergleichen.

Klappt vorzüglich und ist genauer als meine simple Lösung, aber ich muss, um die Werte miteinander vergleichen zu können, SimpleRoundTo verwenden, weil ohne zwei völlig identische Doubles im Vergleich als grösser bzw. kleiner erkannt werden. Liegt das am "E", mit dem die Zahlen "verkürzt" werden?

Ich mache das so: der aktuelle Wert wird mit deiner Funktion berechnet, der Vergleichswert wird aus einer Datei ausgelesen. Beim Speichern wird der aktuell errechnete Wert in der Datei hinterlegt.

Danke!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!