Re: Lineare Interpolation
Hi mschaefer,
danke für deine Antwort, aber ist das nicht im Grunde genau das, was ich auch schon implementiert habe? Meine Erfolge damit kennst du ja... lg Six |
Re: Lineare Interpolation
Hallo Six,
dann wollen wir mal... Sei f0 die Startfrequenz, fn die Endfrequenz, t0 = t(f0) die Dauer eines Schaltzyklus, n die Anzahl der Schaltzyklen, T das abzudeckende Zeitintervall und d die Zeitdifferenz zweier aufeinander folgender Schaltzyklen. Summe(i, 1, n) sei die Notation für die Summe der ersten n Zahlen. Gesucht werden die Einschaltzeiten bei vorgegebenem T und der Randbedingung, dass die t(f) eine arithmetische Reihe bilden. Nach der allgemeinen Summenformel für die arithmetische Reihe ist dann T = Summe(t0 + i*d, 0, n) oder nach Gauss T = t0 (n + 1) + d (n (n + 1) / 2) Das lässt sich auflösen nach d = (T - 2 t0 (n + 1)) / (n (n + 1)) Wenn du jetzt noch n vorgibst, dann kannst du d bestimmen und in die allgemeine Summenformel einsetzen. Dann kannst du iterativ die Einschaltzeiten berechnen und wenn du noch das konstante Verhältnis von Ein- zu Ausschaltdauer in Ansatz bringst, dann hast du auch noch deine Ausschaltzeiten. Mir ist bewusst, dass T mit einer Pause endet. Eventuell musst du beim Laufindex eine mögliche off-by-one Falle beachten. Jetzt müsste das noch einer Korrektur lesen. Leg los. marabu |
Re: Lineare Interpolation
Hi marabu,
danke für deine Antwort, doch nach mehrmaligem durchlesen und verstehen versuchen, muss ich mir eingestehen, dass ich keinen blassen Schimmer habe, was ich machen soll. Bitte bedenke, ich habe bisher weder ein Mathe-, noch ein Informatikstudium hinter mich gebracht. :? Bedeutet Summe(i,1,n) ganz einfach i+1+n? Meinst du mit n die Herzzahl und wenn ja, welche der beiden? Ansonsten habe ich KEIN n. Was ich habe ist die Startfrequenz, Endfrequenz und ein Zeitintervall, in dem das ganze ablaufen soll. Am Ende soll das ganze dann so aussehen, wie auf der grünen Zeichnung (nicht als Zeichnung sondern als Werte in einer Tabelle).Vielleicht habe ich mich da noch nicht deutlich genug ausgedrückt. Was meinst du mit der "off-by-one Falle". Sorry, aber du sprichst hier mit einem Hobbyprogrammierer und keinem Experten. Bitte formuliere das ganze doch ein wenig allgemeiner verständlich :zwinker: Dankeschön! Six |
Re: Lineare Interpolation
Hi Six,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
So ein schöner thread und wir beide haben ihn ganz alleine für uns... marabu |
Re: Lineare Interpolation
Hi marabu,
Zitat:
Zitat:
Zitat:
Zitat:
Wenn ich wüsste, wie es geht, hätte ich hier sicher nicht gefragt und deine "Laienversion" hilft mir ohne weitere Kenntnisse leider nicht weiter. Wenn du mir also wirklich helfen willst, sag was du weißt und nimm den Zeigefinger runter :wink: Das Problem sollte sich meiner Ansicht nach mit einer Start- sowie Endfrequenz und einem Zeitintervall lösen lassen. Haufenweise anderer Programme lösen das Problem mit den gleichen Informationen. mfg Six |
Re: Lineare Interpolation
Zitat:
Es ist so, wie ich es sage. Solange keine Anzahl für die (immer kleiner oder größer werdenden) Schaltzyklen vorgegeben wird, sehe ich keine Möglichkeit zur Berechnung einer eindeutigen Lösung. Mir fällt auf die Schnelle auch keine Optimierungsfunktion ein, an deren Haaren ich mich aus diesem Sumpf ziehen könnte. marabu |
Re: Lineare Interpolation
Zitat:
Nun noch mal zum Problem. Da du es ja offenbar verstanden hast, kann ich mir zum Glück weitere Ausführungen sparen. Was sagst du denn zu meinem Code, der zumindest schon mal ein Ergebnis liefert, welches in die richtige Richtung geht (siehe Anhang). Kann man auf diese Weise nicht noch irgend etwas erreichen? Six |
Re: Lineare Interpolation
Moin, moin,
also ehrlich gesagt habe ich mich jetzt mit den Reihen nicht beschäftigt. Denke schon das es damit irgendwie geht, aber der Aussetzter in obigen Bild hat nichts mit der linearen Interpolation zu tun. Da ist ein Umsetzungsfehler drin. Die Zeitindexe dürfen sich nicht überschneiden, dann kommen diese Zeichenfehler durch überzeichnen. Da ich wenig Zeit im Moment habe würde ich folgendes Vorschlagen. Six bau doch mal ein kurzes Projekt zusammen, was folgende Aufgabe erledigt. Es soll eine Funktion haben die nur eine Schwingung zeichnet 01 halt. Die Zeichenstelle ergibt sich aus dem Zeitindex und die Zeichenbreite / Strichbreite und Leerbreite aus der übergebenen Hertzzahl. Den Rest mit den Interpolationsfunktionen können wir dann zusammen einsetzten. Vielleicht auch mal was anderes als nur linear. Das Problem an Deinem Beispiel oben ist in der Zeitindexansteuerung zu sehen. Du Interpolierst einen Zeitindex mit einer Schwingung jetzt kommt der nächste Zeitindex. Wie lange der aktuelle Index allerdings ist hängt an der Hertzzahl. Das heißt Du würdest das allgemein folgend aufbauen. Solage bis Endzeitindex erreicht -Funktion 1: Ermittler Hertzzahl/Frequenz durch Interpolation aus den Start/Endwerten zum Zeitindexe x -Funktion 2: Ermittle länge des Zeitindex x aus Hertzzahl -Funktion 3: Setze Position aus Addition der letzten Zeitindexsumme plus des aktuellen Zeitindexes (marabus Reihenidee(?)) Solange Ende Macht es Schrittweise, es ist schon der richtige Weg // Martin |
Re: Lineare Interpolation
Ich hätte es zwar selber nicht mehr gedacht, aber ich habe eine Lösung gefunden. Für alle die es interessiert werde ich sie morgen posten. Vielen Dank noch mal an alle, die mir versucht haben zu helfen.
mfg Six |
Re: Lineare Interpolation
Hallo Six,
lineare Interpolation, Abitur und nie was davon gehört? Da musst du aber schwer geschlafen haben. (Pisa lässt grüssen) Sieh mal in deinen Schulbüchern nach unter lineare Funktionen f(x)=mx+b Genau das ist es nämlich was du brauchst. Rainer (ich glaube hier will einer aus Klasse 9 seine Hausaufgaben lösen) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz