WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bekommt man aus interpoliertem Graphen eine Funktion?

 

Tkatschomacho
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2015, 17:56     Titel: Bekommt man aus interpoliertem Graphen eine Funktion?
  Antworten mit Zitat      
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?

Finde bei Google nichts dazu leider.

Mit freundlichen Grüßen Smile
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 15.11.2015, 18:26     Titel:
  Antworten mit Zitat      
Zitat:
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.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Tkatschomacho
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2015, 11:38     Titel:
  Antworten mit Zitat      
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:

Code:
x=-18:1:260

y=interp1(KW2,hv,x,'spline')


plot(KW2,hv,'o',x,y)
xlabel('Kurbelwellenwinkel [°KW]'),ylabel('Ventilhub [mm]')
set(gca,'XMinorTick','on','YMinorTick','on')
grid on
 

Nun hätte ich gerne daraus eine Kurvennäherungsfunktion à la "y=3x+5x^2" zB, damit ich die in Simulink weiterverwenden kann.

Die "Curvefit" Funktion habe ich noch nicht genau verstanden. Rolling Eyes

EDIT: Habe eine Kurvenfunktion herausbekommen mithilfe von CurveFit und Polynomfunktion 10. Grades Cool

Habe aber nicht verstanden, wie man diese Funktion nun ins MATLAB bzw dann ins Simulink bekommt ....

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.11.2015, 12:34     Titel:
  Antworten mit Zitat      
Zitat:
y=3x+5x^2"

Zitat:
Habe eine Kurvenfunktion herausbekommen mithilfe von CurveFit und Polynomfunktion 10. Grades

wenn du eine funktion 2. grades hast solltest du auch die funktion 2. grades fitten und nicht 10. grades ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.11.2015, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tkatschomacho
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2015, 13:23     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Zitat:
y=3x+5x^2"

Zitat:
Habe eine Kurvenfunktion herausbekommen mithilfe von CurveFit und Polynomfunktion 10. Grades

wenn du eine funktion 2. grades hast solltest du auch die funktion 2. grades fitten und nicht 10. grades ^^


Nein das war nur eine Beispielfunktion. Die beste Annäherung geschieht mit der 10. Grades. Im Anhang habe ich die Funktion mal dargestellt.

Liebe Grüße

asdsadasadsdsa.jpg
 Beschreibung:

Download
 Dateiname:  asdsadasadsdsa.jpg
 Dateigröße:  46.78 KB
 Heruntergeladen:  375 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.11.2015, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tkatschomacho
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2015, 14:02     Titel:
  Antworten mit Zitat      
Also das Problem ist folgendes:

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 hoffe, das war einigermaßen verständlich? Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.11.2015, 14:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich hoffe, das war einigermaßen verständlich?

Für mich leider nicht. Wenn jemand diese Hoffnung hegt, drückt das ja schon gewisse Zweifel aus. Warum dann also nicht die Formulierung überarbeiten?

Zitat:
Und wenn man die Werte positiv umrechnet, zerlegt das ja den Graphen, da er nicht weiß dass 720 = 0 entspricht.

Eine Möglichkeit kann sein, mit mod zu arbeiten.

Rein aus Neugierde: was bedeutet TB? Toolbox? Tabelle? Noch was anderes?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.11.2015, 15:01     Titel:
  Antworten mit Zitat      
Hallo Tkatschomacho,

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?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tkatschomacho
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2015, 15:07     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,
Zitat:
Ich hoffe, das war einigermaßen verständlich?

Für mich leider nicht. Wenn jemand diese Hoffnung hegt, drückt das ja schon gewisse Zweifel aus. Warum dann also nicht die Formulierung überarbeiten?


Das war eher eine rhetorische Frage. Subtiler kann man oder ich das Thema leider nicht erklären.

TB heißt Tabelle.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.11.2015, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Hast du denn mal Lookup Tables versucht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tkatschomacho
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2015, 11:30     Titel:
  Antworten mit Zitat      
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.

Code:
function y = fcn(x)
phi = 0;
for i=1:4
    for phi=0:5
        phi=phi+1
    end
end

x=[0:1:6]
y=phi
plot(x,i)
grid on
 


Phi entspricht der x-Achse und i dem Zähler der y-Achse.

20151119_112646.jpg
 Beschreibung:

Download
 Dateiname:  20151119_112646.jpg
 Dateigröße:  1.66 MB
 Heruntergeladen:  313 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.11.2015, 13:29     Titel:
  Antworten mit Zitat      
Hallo Tkatschomacho,

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tkatschomacho
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2015, 15:49     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.