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

Interpolation von ziemlich vielen Daten

 

Poncho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2010, 19:49     Titel: Interpolation von ziemlich vielen Daten
  Antworten mit Zitat      
Hallo,

Ein paar Fragen zu den Interpolationsmöglichkeiten von Matlab:

Die Situation: ich habe ca. 5800 Wertetripel in einer Liste vorliegen die zusammen die Isolinien eines digitalisierten Kennfeldes wiedergeben (das Kennfeld sieht prinzipiell so aus). In der Endanwendung sollen 2 Werte (x und y) vorgegeben werden und der zugehörige dritte Wert (z) soll ausgegeben werden, und zwar über den gesamten Wertebereich, also auch zwischen den Isolinien.

Meine Idee war eine Matrix zu erstellen und sich jeden Wert über eine Look-Up Tabelle ausgeben zu lassen.
Dazu ein paar Fragen:

1. Wenn ich die Matrix erstelle sind das ca 75000 Einträge. Die meisten davon sind 0, weil dort eben keine Werte bekannt sind.
Ist es möglich, statt einer 0 auch gar nichts in eine Zelle schreiben zu lassen?

2. Ist es überhaupt möglich aus 5800 Werten alle anderen 75000 Werte zu interpolieren? Welche Methode wäre am besten geeignet?

3. Kann man eine Look-Up Tabelle erstellen die nicht eine Matrix-Form sondern eine Tabellenform mit den drei Spalten x,y und z hat? Dann könnte ich einfach nur die 5800 Wertetripel nehmen und den Rest soll mir Matlab interpolieren.
Wenn das geht, wie stell ich das an?

Wie ihr bestimmt merkt bin ich kein Profi was Matlab angeht, aber ich hoffe dass ihr mir ein paar Hinweise geben könnt.

Beste Grüße!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.11.2010, 21:06     Titel: Re: Interpolation von ziemlich vielen Daten
  Antworten mit Zitat      
Hallo Poncho,

Zitat:
1. Wenn ich die Matrix erstelle sind das ca 75000 Einträge. Die meisten davon sind 0, weil dort eben keine Werte bekannt sind.
Ist es möglich, statt einer 0 auch gar nichts in eine Zelle schreiben zu lassen?

Dann ist 0 also auf keinen Fall ein regulärer Wert?
Es ist auf jeden Fall nicht möglich gar nichts in eine "Zelle" zu schreiben - zumindest solange Du nicht von einem Cell-Array sprichst. Ein Cell-Array eignet sich aber sehr schlecht zum Rechnen.

Zitat:
2. Ist es überhaupt möglich aus 5800 Werten alle anderen 75000 Werte zu interpolieren? Welche Methode wäre am besten geeignet?

INTERP2 oder GRIDDATA. Ob das kubisch, linear oder per nearest neighbor Method interpoliert wird, musst Du entscheiden. Das hängt ganz von der Fragestellung ab.

Zitat:
3. Kann man eine Look-Up Tabelle erstellen die nicht eine Matrix-Form sondern eine Tabellenform mit den drei Spalten x,y und z hat? Dann könnte ich einfach nur die 5800 Wertetripel nehmen und den Rest soll mir Matlab interpolieren.

Ganz genau! Das ist die richtige Idee. Lies mal die Hilfe-Texte von INTERP2 und GRIDDATA.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Poncho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2010, 21:34     Titel: Re: Interpolation von ziemlich vielen Daten
  Antworten mit Zitat      
Hi,

Zitat:
INTERP2 oder GRIDDATA. Ob das kubisch, linear oder per nearest neighbor Method interpoliert wird, musst Du entscheiden. Das hängt ganz von der Fragestellung ab.


Das Ziel ist wie gesagt die bestmöglichen Interpolationswerte zu bekommen. Ich werde einfach ausprobieren was die besten Ergebnisse liefert.

Zitat:
Lies mal die Hilfe-Texte von INTERP2 und GRIDDATA.


ok, dann mal sehen ob ich das richtig verstanden habe, Korrekturen - wenn nötig - erwünscht!

ZI = griddata(x,y,z,XI,YI) bedeutet dass aus den nicht einheitlich verteilten Inputs x,y,z (= meine in der Tabelle vorliegenden Werte) eine Matrix ZI interpoliert wird. Dabei sind vermutlich x,y und z jeweils Vektoren.
Was spielt aber XI und YI für eine Rolle? Und was macht die Alternative TriScatteredInterp anders?
Außerdem: Wie kann ich die Schrittweite der Interpolation festlegen?

interp2 würde für meine Werte nicht funktionieren, wenn sie nicht gleichmäßig steigend (monoton) sind, korrekt?

Verstehe ich es richtig dass in beiden Fällen eine Matrix erstellt wird, die ich dann in Simulink als 2D-Look-Up-Table verknüpfen kann?

Besten Dank!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.11.2010, 14:29     Titel: Re: Interpolation von ziemlich vielen Daten
  Antworten mit Zitat      
Hallo Poncho,

Zitat:
Was spielt aber XI und YI für eine Rolle? Und was macht die Alternative TriScatteredInterp anders?
Außerdem: Wie kann ich die Schrittweite der Interpolation festlegen?

Genau. XI und YI legen die Schrittweite der Ausgabe fest: das sind die Punkte, zu denen du ZI berechnet haben möchtest.

Welche Interpolationsmethode "am besten" ist, kann man eigentlich nur physikalisch klären. Wenn man z.B. die Höhe eines Lego-Stein-Gebirges misst, ist die "nearest" Method logisch, weil sich die Höhe der Steine nicht kontinuierlich ändern kann. Wenn man aber die Höhe von Meereswellen misst, ist eine bicubische Bestimmung der Höhe naheliegender. Wenn Du eine wissenschaftliche Arbeit verfasst, musst Du unbedingt begründen, warum Du eine bestimmt Methode ausgewählt hast.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Poncho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2010, 16:13     Titel:
  Antworten mit Zitat      
Hi Jan, danke für deine Mühe!

Zitat:
Genau. XI und YI legen die Schrittweite der Ausgabe fest: das sind die Punkte, zu denen du ZI berechnet haben möchtest.


Die Syntax mit der Schrittweite verstehe ich noch nicht ganz.

Angenommen mein Wertebereich geht insgesamt für x von 0:10 und für y von 0:1.

Für x,y und z sind aber z.B. jeweils nur 6 Werte vorhanden, in nicht-gleichen Abständen. Das könnte ganz willkürlich z.B. so aussehen:

x....y....z
0....0....0
2....0,1.100
2,7.0,3.120
4,1.0,2.130
5,3.0,6.135
9....0,8.170

Am Ende möchte ich eine Look-Up Table (= die Interpolierte Matrix ZI) mit x in 10er Schritten und mit y in 0,1er Schritten haben, also eine 10x10 Matrix. Jedem Wertepaar ist dann ein z zugeordnet (= der Zelleninhalt).

Dann würde also der Befehl ZI = griddata(x,y,z,XI,YI) so aussehen:

[i]ZI = griddata( x, y, z, XI(0,1,10), YI(0,0.1,1) )

Korrekt?

Leider habe ich selber kein Matlab hier zu Hause und kann's deswegen nicht direkt ausprobieren. Muss warten bis ich wieder Zugang zu einem entsprechenden Rechner habe...
 
Poncho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2010, 16:16     Titel:
  Antworten mit Zitat      
Hi Jan, danke für deine Mühe!

Zitat:
Genau. XI und YI legen die Schrittweite der Ausgabe fest: das sind die Punkte, zu denen du ZI berechnet haben möchtest.


Die Syntax mit der Schrittweite verstehe ich noch nicht ganz.

Angenommen mein Wertebereich geht insgesamt für x von 0:10 und für y von 0:1.

Für x,y und z sind aber z.B. jeweils nur 6 Werte vorhanden, in nicht-gleichen Abständen. Das könnte ganz willkürlich z.B. so aussehen:

x....y....z
0....0....0
2....0,1.100
2,7.0,3.120
4,1.0,2.130
5,3.0,6.135
9....0,8.170

Am Ende möchte ich eine Look-Up Table (= die Interpolierte Matrix ZI) mit x in 10er Schritten und mit y in 0,1er Schritten haben, also eine 10x10 Matrix. Jedem Wertepaar ist dann ein z zugeordnet (= der Zelleninhalt).

Dann würde also der Befehl ZI = griddata(x,y,z,XI,YI) so aussehen:

[i]ZI = griddata(x,y,z,XI,YI)

mit

XI = [0, 1, 10]
YI = [0, 0.1, 1]
und x, y, z entsprechend der Tabelle (s.o.)

Ist das korrekt?

Leider habe ich selber kein Matlab hier zu Hause und kann's deswegen nicht direkt ausprobieren. Muss warten bis ich wieder Zugang zu einem entsprechenden Rechner habe...
 
Jan S
Moderator

Moderator


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

XI = [0, 1, 10]
YI = [0, 0.1, 1]

Fast.
Code:

XI = 0:1:10;  % Oder einfacher:  0:10
YI = 0:0.1:1;
 

Gruß, Jan
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 - 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.