Verfasst am: 15.11.2015, 17:56
Titel: Bekommt man aus interpoliertem Graphen eine Funktion?
Hey Leute,
habe da eine Frage und zwar:
Ich habe aus einer Excel-TB einen Graphen interpoliert und auch geplottet.
Nun möchte ich aber daraus eine Kurvenfunktion bekommen um sie danach in Simulink weiter verwenden zu können.
geht das überhaupt und wenn ja - mit welcher Funktion?
Ich habe aus einer Excel-TB einen Graphen interpoliert und auch geplottet.
die beschreibung ist nicht sehr umfangreich. wie hast du das denn gemacht? du kannst eine funktion schreiben die dir den interpolierten wert zurück gibt. simulink hat doch auch etwas eigenes wie die lookup tables oder?
wenn du direkt eine bestimmt gleichung haben willst musst du nicht interpolieren sondern einen curvefit machen.
_________________
Es geht um die Ventilhubfunktion über Kurbelwellenwinkel beim Verbrennungsmotor. (Anders gesagt: Die Ventilhöhe im Motor ist abhängig von der Stellung der Kurbelwelle -> sie stellt eine näherungsweise parabelförmige Kurve dar)
Habe eine Excel TB mit x und y Werten bekommen für Ventilhöhe(y) und Kurbelwellenwinkel(x) und diese habe ich jeweils als Vektor ins MATLAB gebracht:
hv=[0......7];
KW=[-18....260];
Dann habe ich sie interpoliert, damit man auch Zwischenwerte bekommt und als Graphen dargestellt:
ein Polynom vom Grad 10 ist in den seltensten Fällen (mir ist noch keiner untergekommen) ein sinnvoller Fit. Entweder ein Polynom niedriger Ordnung (meist 1-3, je nach Verlauf) oder ich würde interpolieren.
Wie wäre es denn damit, einen Lookup Table zu verwenden? Da musst du nur die x- und y-Werte eintragen, und Simulink interpoliert dann linear.
Die beste Annäherung geschieht mit der 10. Grades.
Natürlich, weil du die meisten Freiheitsgrade hast. Lass dir das Polynom aber mal an Zwischenstellen und außerhalb des Definitionsbereichs plotten...
In dem Beispiel bietet sich wirklich interpolieren an, oder wenn man etwas fitten möchte, dann eher eine Glockenkurve.
Es geht ja um das Öffnen und Schließen eines Ventils in einem Motor. Dies wird nicht über der Zeit aufgetragen, sondern über den Kurbelwellenwinkel. Bei einem 4-Takt-Motor braucht der Motor für ein abgeschlossenes Arbeitsspiel (Verbrennung usw.) genau zwei Kurbelwellenumdrehungen -> bedeutet dass die x-Achse 720 ° umfasst und danach theoretisch wieder bei 0° anfängt.
In der Excel TB für die Höhe der Ventilöffnung in mm (y) und den Kurbelwellenwinkel (x) sind die ersten Werte noch negativ: Das Ventil öffnet bereits bei 700°, wird aber in der TB als -20° angegeben. (was ja auch richtig ist, vom Relativpunkt 0° ausgesehen).
Das Ventil schließt anschließend wieder bei 200°. Es ist also ingesamt "220° lang" offen.
In der Excel TB sind die Werte allerdings ja negativ gegeben.
Man kann also nicht mit einem normalen "Kurbelwinkel"zähler und einem Switch sagen: "Okay von 700° bis 200° stellst du die Funktion dar und ansonsten ist das Ventil ja geschlossen, die Öffnungshöhe ist also = 0".
Und wenn man die Werte positiv umrechnet, zerlegt das ja den Graphen, da er nicht weiß dass 720 = 0 entspricht.
Ich verstehe den Zusammenhang zur Original-Frage nicht mehr:
Zitat:
Nun möchte ich aber daraus eine Kurvenfunktion bekommen um sie danach in Simulink weiter verwenden zu können.
Ob die X-Achse die Zeit oder der Kurbelwinkel ist, spielt für Matlab keine Rolle. Es sind ja beides nur Zahlen.
Zitat:
In der Excel TB sind die Werte allerdings ja negativ gegeben.
Man kann also nicht mit einem normalen "Kurbelwinkel"zähler und einem Switch sagen: "Okay von 700° bis 200° stellst du die Funktion dar und ansonsten ist das Ventil ja geschlossen, die Öffnungshöhe ist also = 0".
Hier kann ich Dir nicht mehr folgen.
Wenn Du ein Polynom fittest, ist das Verschieben der Werte der X-Achse mathematisch gesehen trivial. Was ist also genau das Problem? Wie genau sehen die Inputs aus? Was sind die gewünschten Outputs?
Ich empfehle bei den Erklärungen alle Details wegzulassen, die nichts mit dem eigentlichen Problem zu tun haben: Die Physikalische Bedeutung der Zahlen oder so weit ich es verstehe spielt es auch keine Rolle, dass die Zahlen aus Excel stammen, oder?
Subtiler kann man oder ich das Thema leider nicht erklären.
Es geht ja auch nicht darum, dass du uns deine Anwendung erklärst, sondern was du in MATLAB machen möchtest. Wie Jan schon sagt, ist es relativ egal, welche Bedeutung deine x- und y-Werte haben.
Im Anhang habe ich mal ein Bild gemacht wie ich es mir vorstelle.
Ein Zähler zählt hoch auf der y-Achse und die x-Werte gehen von 0 bis 720 immer wieder. Daher ist 720 auch gleich 0 sozusagen. Die x-Achse geht dabei in Einser-Schritten.
Mein Code dazu ist nicht wirklich toll und funktioniert auch überhaupt nicht, da die x-Achse nicht wieder von 0 anfangen kann zwischendurch.
Was soll der Code genau tun?
Den Schleifenzähler phi innerhalb der Schleife zu erhöhen, ist sinnfrei, denn das bewirkt überhaupt nichts.
Das Bild ist auch nicht klar: Wie lang soll der X-Vektor denn sein? Dieses Detail ist nicht erratbar. Und ich sehe auch den Zusammenhang mit dem Code nicht.
Was genau ist "der Zähler der Y-Achse"?
Wo ist der Zusammenhang mit der Interpolation?
Ich verstehe Dein Problem immer weniger. Versuche es nochmal so klar wie möglich zu erklären.
Also, im Großen und Ganzen ist es so, dass sich durch verschiedenste Funktionen und Abhängigkeiten ein Wert "A" verändert. Dies wird so oft wiederholt bis der Wert "A" unter den Wert "B" fällt.. Dafür ist u.A. die Variable "x" wichtig.
Dies geschieht aber nicht über der Zeit sondern über die Anzahl der "Arbeitsspiele".
Ein "Arbeitsspiel" umfasst 720 Grad (Zwei Umdrehungen der Kurbelwelle).
Aufeinander folgende Arbeitsspiele verlaufen also so wie auf der y-Achse gezeichnet. Bis wohin ist erstmal egal.
Innerhalb dieses "Arbeitsspieles" von 720 Grad passiert etwas - da öffnet sich für eine gewisse Zeit etwas, nämlich von 340 bis 620 Grad. Bei jedem einzelnen "Arbeitsspiel".
Ausserhalb dieses Intervalls von 340 bis 620 Grad ist x=0. Innerhalb ist x bestimmt durch diese Polynomfunktion, die ich interpoliert habe (da ich nicht alle Werte in der ExcelTabelle vorliegen habe).
Habe auch schon mit Switches probiert usw. komme aber nicht auf vernünftige Lösungen. Ich möchte also im Prinzip keine Zeitabhängigkeit mehr in den Scopes und im Ergebnis haben sondern in Abhängigkeit von der Anzahl der "Arbeitsspiele".
Also wie viele "Arbeitsspiele" (oder: wie oft kamen 720 grad zustande) damit der Wert "A" unter den Wert "B" fällt?
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum 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. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.