Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Komplexeres Rechnen in FB
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Muecke
Gast





BeitragVerfasst am: 21.01.2014, 15:01    Titel: Komplexeres Rechnen in FB Antworten mit Zitat

Hallo miteinander,

noch verstehe ich nicht sonderlich viel von Extrempunktberechnen geschweige habe verstanden wie das nur im Ansatz gehen soll. traurig

was ich jedoch glaube ich bisher verstanden habe ist das wenn ich Extrempunkteberechnen möchte eine Funktion benötige die z.B. ein Taschenrechner hinterlegt hat lächeln
Hoffe das ich das Richtig Interpretiere, in der Funktion (Taschenrechner) ist eine Art kleines Programm hinterlegt das dort vergleiche Analysen etc. macht, ist so was in FB schon hinterlegt? oder muss ich mir für solche Rechnungen etwas Importiren? oder wie macht man so was im allgemeinen?
Nach oben
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 21.01.2014, 15:49    Titel: Antworten mit Zitat

Hallo,
gib mal bei Google Extrempunktberechnen ein und schau mal was dann passiert. grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 21.01.2014, 16:10    Titel: Antworten mit Zitat

Für solche Berechnungen verwendet man am besten ein Computer-Algebra-System (CAS). FreeBASIC, VisualBASIC, C++, ... bieten keine spracheigenen Mittel, um Extrempunkte irgendwelcher Funktionen (ganzrationale Funktionen? trigonometrische Funktionen? ...) zu berechnen.

Je nachdem, um was es genau geht, könnte man eine Nährung aber auch einfach durch "Ausprobieren" ermitteln. Wenn du z. B. weißt, dass irgendwo zwischen 0 und 10 der Extrempunkt ist, kannst du mit einer FOR-Schleife in 0.001er-Schritten ausprobieren, wo der liegt.
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muecke
Gast





BeitragVerfasst am: 21.01.2014, 17:10    Titel: Antworten mit Zitat

hmm also das bei Google das habe ich gemacht, wie ich schon sagte ich kenne mich damit noch nicht sonderlich aus noch bin ich am Heraussuchen von Infos und Lesen und Hoffentlich auch irgend wann mal das verstehen was ich da Lese lächeln.

Hmm OK, habe verstanden für solche Sachen ist FeeBasic schlecht geeignet zwinkern
Um was es geht, ich möchte aus meinen Daten die ich von der Zeilenkammer Bekomme z.B. alle Wendepunkte bestimmen die ich dort habe, ...
Mir sagte man das ich mich mit den Extrempunkte befassen solle dafür das würde dann einfach werden lächeln

jetzt bin ich so weit das ich mir meine Daten Endlich anzeigen lassen kann daher Befasse ich mich mit der Erstellung des Erkennen der Wendepunkte.
und dem was mir dann noch alles einfallen wird was ich benötigen werde lächeln


Das mit den For Schleifen werde ich wahrscheinlich auch so machen mit den Daten selbst die ich da habe. lächeln


zuerst werde ich jedoch noch mein KKleiner... (neue Version) richtig einbauen und das Überflüssige zeig raus schmeißen, aus meinem Code.


Danke für euer Feedback.
Nach oben
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 21.01.2014, 18:12    Titel: Antworten mit Zitat

Hallo,

dir geht es also darum, in einem 2D-Pfad aus diskreten Einzelwerten (= 1 gelesene Zeile) die höchsten Stellen ("Peaks") zu finden? Dafür braucht es ja nicht mal Analysis.



Du könntest ja einfach die Werte der Zeile von Anfang bis Ende durchgehen und ganz nach Bedarf nach den Mustern suchen. Zum Beispiel "Erhebung liegt 30% über Durchschnittsniveau" (je nach dem, wie deutlich die "Zacke" sein muss, um zu zählen) oder "ist absolut höchste Stelle des Datensatzes" oder ... - ganz wie du's brauchst.

Wenn du es nach dem Schema einer klassischen Kurvendiskussion lösen wolltest, müsstest du ja erst mal deine "Wertelinie" durch ein Polynom approximieren. Und dann mithilfe der Ableitungen der Funktion die Extremstellen finden.

Viele Grüße!
Sebastian
_________________


Zuletzt bearbeitet von Sebastian am 21.01.2014, 18:14, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 21.01.2014, 18:14    Titel: Antworten mit Zitat

Am besten noch kurz einen Blick ins Thread-Mandelbrot werfen, dort ist eine Klasse (UDT in FB) für komplexe Zahlen vorhanden -> lässt sich nach Belieben noch um weitere Rechenoperationen ergänzen. Danach kannst Du Berechnungen im Code so formulieren, als wären komplexe Zahlen einen Sprachbestandteil.

Zu Extrempunkte bzw. Werte:

http://de.wikipedia.org/wiki/Extremwert

Übrigens Juliamengen und Mandelbrotmengen und deren Verwandte haben auch mit diesem Thema auch zu tun: Wenn Du rein numerisch diese Stellen suchst, z.B. ein Polynom, jeder Nullstelle der Ableitung (=dort werden die Extrempunkte zu Nullstellen!) eine Farbe zuweist und eine Grafik erstellst, wo farblich gekennzeichnet wird, wohin die numerische Suche von einem bestimmten Startwert aus konvergiert, so entsteht das Newton-Fraktal.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muecke
Gast





BeitragVerfasst am: 21.01.2014, 18:28    Titel: Antworten mit Zitat

ja es handelt sich um reine 2D Ansicht.

so in die Richtung dachte ich mir das auch schon bin mir noch nicht so ganz im Klaren wie ich das Umsätze also Programmiertechnisch lächeln

ps. ich merke schon Mathematisch habt Ihr deutlich mehr drauf lächeln als ich traurig, ich muss erst ein mal eure Postes auseinander nehmen und schauen was da genau steht und alles nachschlagen, bitte um etwas Geduld mit mir.
Nach oben
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 860
Wohnort: Ruhrpott

BeitragVerfasst am: 22.01.2014, 10:14    Titel: Antworten mit Zitat

@Sebastian & dreael:
Macht den Jungen doch nicht so fertig, der läuft doch jetzt schon mit Übertemperatur! zwinkern

@Muecke:
Für das, was du vorhast, brauchst du keine höhere Mathematik, sondern nur solide Integerarithmetik.

Der Denkansatz ist ganz einfach: Du gehst an der Zeile entlang und vergleichst jeden Wert mit dem Vorhergehenden. Sobald die Differenz der beiden Werte das Vorzeichen wechselt, hast du deinen Extrempunkt gefunden.
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 22.01.2014, 12:25    Titel: Antworten mit Zitat

oh ja das macht mir Kopfzerbrechen das ist richtig lächeln
das mit dem Positiven und Negativen wert habe ich schon Probiert,
habe auch mal versucht wenn Abweichung zum vorherigen Punkt Größer als ist dann erst zu reagieren doch bis jetzt ohne großen Erfolg.

habe da mal ein Bild meines Programme das ich bis jetzt geschrieben habe um mir das Darzustellen, (Soory für die schlechte Qualität doch das Bild ist sonst 1900 px breit das ist etwas viel für das Forum.


mit gelb habe ich markiert was ich versuch zu finden.

um euch die Daten nicht vorzuenthalten lächeln habe ich mein bisheriges Programm inkl. Daten Datei angehängt.
https://dl.dropboxusercontent.com/u/130479015/Forum/FreeBasic/Version%200.2.0.zip

Welchen Ansatz würdet Ihr hier verfolgen?
was sollte ich mir mal genauer anschauen?
was meint Ihr dazu?


ps. Rote Punkte bedeutet das die Daten vorhanden sind.
Grüne Linie bedeutet das der Letzte bekannte Punkt mit dem nächsten Bekannten Punkt verbunden wurde die Werte dazwischen sind entweder 0 oder nicht vorhanden.
Nach oben
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 22.01.2014, 15:42    Titel: Antworten mit Zitat

Ich würde das so angehen wie oben mehrfach vorgeschlagen:
Einfach die Datenpunkte der Reihe nach abklappern und auf Änderungen untersuchen.
Wahrscheinlich würde ich mir dazu zwei Functions machen wie Knick(i) und Extrem(i) wobei i die Nr. des Punktes (mit x und y Wert) ist.
Wenn deine Daten auch ein gewisses "Rauschen" enthalten ist es vielleicht am besten, jeweils einige Punkte (abhängig von "Auflöung") vor und nach i mit einzubeziehen.
Bei "Knick" könntest du z.B. untersuchen, ob die mittlere Differenz der y-Werte der 5 Punkte nach i um einen gewissen Betrag oder Prozentsatz höher ist als die der 5 Punkte vor i. Nur mal als ersten Denkanstoß.
Vielleicht magst du auch nochmal die x/y-Wertepaare des ersten Zackens (mit etwas Vor- und Nachlauf) in einer txt-Datei anhängen.

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 22.01.2014, 15:53    Titel: Antworten mit Zitat

so was in die Richtung hab e ich mir auch vorgestellt.

wie machst du dass wenn du sagen wir 5 aufeinander folgende y Werte hast

Y1 = 10
Y2 = 15
Y3 = 14
Y4 = 16
Y5 = 16
hier ist ja ein Anstieg zu verzeichnen lächeln doch wie Stelle ich das Mathematisch da?

denn auch Hie ist ein Anstieg zu verzeichnen.
Y1 = 10
Y2 = 15
Y3 = 16
Y4 = 14
Y5 = 14

in der Zip Datei befindet sich eine CSV Datei in der befinden sich alle X und Y werte.
14 Frames (Y Linien) insgesamt.


{Die Wertesparre werde ich raus suchen von der ersten Knick nach unten lächeln sobald ich wider den WIN Rechner an habe, gerade ist der Mac an}
Nach oben
Muecke
Gast





BeitragVerfasst am: 22.01.2014, 17:30    Titel: Antworten mit Zitat

so habe man die Werte in eine Extra TXT Datei schreiben lassen lächeln
Zeile begibt mit "X_Werte" bzw "Y_Werte"

Visualisiert sieht das dann so aus.


Es begibt mit Daten und Endet mit Daten, zwischen drin ist eine Strecke an der Daten Fehlen die Fehlen auch in der TXT zwinkern

die TXT Datei https://dl.dropboxusercontent.com/u/130479015/Forum/FreeBasic/Erster_Bogen.txt

wie gesagt das Komplette Programm habe ich Oben schon verlinkt in dort ist auch die Original Datendatei als CSV dabei.
Nach oben
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 23.01.2014, 13:13    Titel: Antworten mit Zitat

Code:

dim tshift as integer = 5
dim tdir as integer = iif(array(1) < array(2), 0, 1)
dim tval as integer
for x = lbound(array) to ubound(array) - 1
    if tdir = 0 Then
        if (tval < (array(x) - tshift)) Then
            print "wird groesser"
            tdir = 1
            tval = array(x)
        end if
    else
        if (tval > (array(x) + tshift)) Then
            print "wird kleiner"
            tdir = 0
            tval = array(x)
        end if
    end if
next


ungetestet .. aber könnte funzen.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 23.01.2014, 20:41    Titel: Antworten mit Zitat

Hmm, kannst du mir erklären was dein Code da macht?
ich versteh da nur Bahnhof traurig

würde das gerne mal bei mir in den Code einbauen.
Nach oben
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 23.01.2014, 20:46    Titel: Antworten mit Zitat

Naja .. prinzipiel mache ich nichts anderes als folgendes:

Zuerst wird eine variable gesetzt die angibt, in welche richtung sich die änderung vollziehen muss. Diese variable wird anhand der ersten beiden arraywerte definiert.

ist arraywert1 kleiner als der in 2, dann ist aktuell eine steigende kurve vorhanden, ansonsten eine fallende ... dies wird jeweils als 0 oder 1 in TDir mittels IIF geschrieben.

anschliessend wird jeder arrayeintrag durchlaufen (FOR schleife). Sollte sich der wert bei dem aktuellem arrayeintrag X (for schleife) gravierend (abhängig von TShift) in die entgegen gesetzte richtung (< oder >, je nach TDir) ändern, dann erfolgt eine Print ausgabe. Zusätzlich wird die richtugn umgeschaltet (TDir ändern).

So sollte es eigentlich funzen. aber der source (sehe ich gerade) hat da wohl noch so seine makken .. hab das nur kurz hin "gerotzt" ... ich bastel da ma kurz was ... sec...


MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 23.01.2014, 21:55    Titel: Antworten mit Zitat

Code:
'Datenvariablen
Dim TDatenD() as Integer                              'Test-Daten-Array
Dim TDatenC as Integer                                 'Anzahl der einträge im Test-Daten-Array



'array mit 600 speziellen zufälligen werten füllen
Randomize(Timer())
TDatenC = 600
Redim TDatenD(TDatenC) as Integer
For X as Integer = 2 to TDatenC
   TDatenD(X) = TDatenD(X - 1) + (-10 + Int(Rnd * 21))
Next



'hier suchen wir nach den "umkerhpunkten".
Dim TDatenM() as Integer                              'Ein Neus Array, welches die Position der Umkerhpunkte speichert
Redim TDatenM(TDatenC) as Integer                        'Wir machen das Arra ygenauso gross wie das der daten. Jeder umkerhpunkt
                                                'wird am selben index als 0(ncihts), 1(wird groeser) oder 2(kleiner) gespeichert.
Dim TShift as Integer = 25                              'Hier legen wir fest, wie gross die änderung sein muss, damit sie erkannt wird
                                                'Der wert muss also min. um min. 25 gröser oder kleiner sein, damit eine änderung eintritt.
                                                'damit
Dim TDir as Integer = IIf(TDatenD(1) < TDatenD(2), 1, 2)      'Hier wird die startrichtung festgelegt
Dim TVal as Integer = TDatenD(1)                        'ein temporärer speicher für steigungs werte
For X as Integer = 2 to TDatenC
   If TDir = 1 Then
      If TVal < TDatenD(X) Then TVal = TDatenD(X)            'NUR wenn der zwischenspeicher KLEINER ist, dann auffüllen
      If TVal > (TDatenD(X) + TShift) Then               'wenn der arraywert mit dem shift kleiner ist, dann haben wir eine Änderung
         TDatenM(X) = TDir                           'die stelle markieren
         TDir = 2                                 'richtungsänderung
         TVal = TDatenD(X)                           'den neuen zwischenwert abspeichern
      End If
   Else                                          'hier ist TDir = 1
      If TVal > TDatenD(X) Then TVal = TDatenD(X)            'Nur wenn er größer ist ...
      If TVal < (TDatenD(X) - TShift) Then
         TDatenM(X) = TDir
         TDir = 1
         TVal = TDatenD(X)
      End If
   End If
Next



'Daten zeichnen
ScreenRes 800, 600, 32                                                         'Grafikfenster öffnen
Line (10, 400)-(TDatenC + 30, 400), &HFF777777                                       '0-Linie (grau)
For X as Integer = 1 to TDatenC - 1                                                'Alle einträge durchgehen
   If TDatenM(X) = 1 Then                                                      'wenn 1, dann fallend
      Line (20 + X, 0)-(20 + X, 600), &HFFFF0000                                    'roter marker für fallend
   ElseIf TDatenM(X) = 2 Then                                                   'wenn 2 dann steigend
      Line (20 + X, 0)-(20 + X, 600), &HFF00FF00                                    'grüner marker für steigend
   End If
   Line (20 + X, 400 - TDatenD(X))-(21 + X, 400 - TDatenD(X + 1)), &HFFFFFFFF               'linie zwischen 2 elementen zeichnen
   Line (20 + X, 400 - TDatenD(X))-(21 + X, 400 - TDatenD(X + 1)), &HFFFFFFFF               'linie zwischen 2 elementen zeichnen
Next



'solange warten bis ESC gedrückt wurde
Do Until InKey() = Chr(27)
   Sleep 10, 1
Loop
end 0



MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 24.01.2014, 14:46    Titel: Antworten mit Zitat

Das sieht echt gut aus, danke.


Dank des Forums habe ich nun so viel hin bekommen Danke.

DANKE

Ihr seit der Hammer.
Nach oben
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 24.01.2014, 14:54    Titel: Antworten mit Zitat

Du könntest es natürlich auch etwas anders machen .. sehe gerade nochmal dein beispielbild an ...

meien Variante erkennt bei bestimmten einfachen schwellwerten eien änderung.

für dein Bild wäre hier wohl mehr etwas mit einer summe über mehrere elemente sinvoll.

Sprich: du nimmst z.B. 10 werte des arrays, summierst sie (+) und teilst diese durch die anzahl (z.B. 10) .. dann hast du eine quersumme ... die speicherst du temporär zwischen. Jetzt wiederholst du das ganze aber mit +1 versetzt. (die for schleife) .. wen sich jetzt die summe gravierend vom temporären ergebniss absetzt, dann tritt auch eine Änderung der richtung ein. Die richtung ist hierbei undefiniert. Aber du erkennst so nicht nur steigung und gefälle, sondern auch steigungsänderungen .. sprich, wenn du eine steigung von 1 pixel hast, und das über 100 pixel, dann ist diese gleichbleibend, und die werte bei der berechnung sind immer identisch .. steigt jetzt aber die steigung von sagen wir 1px pro pixel auf 2px pro pixel an, dann ändert sich auch die steigung. Das kann man dann auch erkennen. (was bei meiner obrigen variante nicht der fall ist. Diese erkennt nur den umkerhrpunkt. jedoch nicht eine steigungsänderung.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 24.01.2014, 15:00    Titel: Antworten mit Zitat

Das mit der Steigung Veränderung ist gut, so habe ich einen Trend und kann diesen verfolgen bei Änderung des Trend (%+-) kann ich reagieren lächeln
Nach oben
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 24.01.2014, 15:15    Titel: Antworten mit Zitat

Hast du das Excel-Beispiel, dass ich dir geschickt habe, noch nicht in FB-Code umgesetzt? Entspricht ja in etwa der letzten von Puppetmaster vorgeschlagenen Variante.

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz