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

Extrapolation analog zu Simulink Lookup-Tables

 

Jette
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.02.09
Wohnort: München
Version: R2010b, R2015b
     Beitrag Verfasst am: 21.11.2011, 11:46     Titel: Extrapolation analog zu Simulink Lookup-Tables
  Antworten mit Zitat      
Hallo,

ich habe ein Tool geerbt, in dem große Teile in MATLAB, kleine Teile in Simulink sind. Die meisten Simulink-Files machen eigentlich nichts anderes als Lookup-Tables zu verwenden, um Daten aus Kennlinien (1D) bzw. Kennfeldern (2D) "abzulesen". In Simulink wird hierbei entweder "Interpolation - Extrapolation" oder auch "Interpolation - Use End Values" verwendet.

Ich würde diese Code-Teile gerne in MATLAB überführen, habe aber Schwierigkeiten, analoge MATLAB-Funktionen zu finden. Die Interpolation funktioniert mit interp1bzw. interp2. Dort wird allerdings keine Extrapolation angeboten.

Weiss jemand
- wie Simulink die Extrapolation durchführt?
- ob es MATLAB-Kommandos gibt, die die entsprechende Extrapolation durchführen? Ich bin auch im FEX nicht fündig geworden.
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 21.11.2011, 13:48     Titel:
  Antworten mit Zitat      
Hallo,

eine Implementierung von "interpolation-Use end values" ist zwar etwas mühselig, aber nicht schwierig (gibt neben der Interpolation 8 Fälle zu unterscheiden, wobei bei den 4 Ecken (also x>xmin, y>ymin etc) der Eck-Kennfeldpunkt zu nehmen ist, und für z.B. xmin<x<xmax, aber y>ymax eine 1D-interpolation auf der zu y=ymax gehörenden Kennlinie erfolgen muss).

Schwieriger ist schon der Fall der linearen Extrapolation: hier müssen auch 8 Fälle betrachtet werden, wobei (für obiges Beispiel) zuerst die Kennlinie zu y extrapoliert werden muss aus den Kennlinien ymax und ymax-1, und auf der dann 1D-interpoliert werden.

Hoffe, zumindest einen Anhaltspunkt gegeben zu haben ...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Jette
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.02.09
Wohnort: München
Version: R2010b, R2015b
     Beitrag Verfasst am: 21.11.2011, 14:14     Titel:
  Antworten mit Zitat      
Für "interpolation-Use end values" ist mir - glaube ich - jetzt immerhin klar, was Simulink macht.

Für die lineare Extrapolation ist mir immer noch nicht klar, wie die genau funktioniert. Welche Punkte des Kennfeldes werden für die einzelnen Fälle herangezogen?

Gibt es wirklich keine MATLAB-Funktion, die das bereits macht?

Gruss
Jette
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 21.11.2011, 14:49     Titel:
  Antworten mit Zitat      
Hallo Jette,

grafisch sieht man das relativ einfach, was ich probiert habe, in Worte zu fassen. Daher mein Vorschlag: erstelle ein Simulinkmodell nur mit 2 Constant Blöcken, einer LookupTable2D sowie einem Ausgang. Setze als constant Werte zwei Variablen A und B.
Dann erzeuge in MATLAb mit meshgrid ein Gitter von Punkten (das größer ist als der Definitionsbereich des Kennfelds, wenn z.B. x und y die Gitterpunkte des Kennfelds sind, dann wäre sowas wie
Code:

[X,Y] = meshgrid([x(1)-5; x(:) x(end)+5], [y(1)-5; y(:); y(end)+5]);

das gesuchte Gitter (die 5 muss natürlich and die Werte von x und y angepasst werden).
Dann bilde 2 Schleifen und setze A = X(i,j), B=Y(i,j) und nutze sim zur Simulation. Fang das Ergebnis auf und mache einen surf-Plot von X,Y und dem Ergebnis.

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Jette
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.02.09
Wohnort: München
Version: R2010b, R2015b
     Beitrag Verfasst am: 24.11.2011, 10:51     Titel:
  Antworten mit Zitat      
Kann es sein, dass man das, was Simulink macht, mit 2 interp1-Kommandos nachbauen kann? Und zwar so:

Code:


KF_row = [1 2 3 4];
KF_col = [10 20 30];
KF     = [4 5 6 ; 16 19 20 ; 10 18 23; 12 15 18];

xx = 0:0.5:5;
yy = 0:5:50;

ZI_1 = interp1(KF_row,KF,xx,'linear','extrap');
ZI = (interp1(KF_col,ZI_1',yy,'linear','extrap'))';

 


Also zuerst eine lineare Interpolation + lineare Extrapolation entlang der Zeilen, dann eine lineare Interpolation + lineare Extrapolation entlang der Spalten der Matrix. Beim 2. Mal wird 2x transponiert um den interp1-Befehl in die richtige Richtung anwenden zu können und dann um die Matrix wieder zurückzudrehen.

Stimmt das so?

Gruss
Jette
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2024 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.