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

NaN Datenpunkte in 2D Matrix interpolieren / ergänzen

 

of_nk
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 03.03.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2022, 13:11     Titel: NaN Datenpunkte in 2D Matrix interpolieren / ergänzen
  Antworten mit Zitat      
Hallo,
ich habe einen Datensatz einer 2D-Matrix (siehe Anhang), den ich für einen 2D-Lookup table in Simulink verwenden möchte. Dieser Datensatz enthält im "table data" Bereich bzw. in dem Bereich der ausgegeben werden soll einige unvollständige Datenpunkte.
Wenn ich diesen Datensatz in den 2D-Lookup table einfüge und die Simulation starten möchte, dann erscheint folgender Fehler:

In block 'test/2-D Lookup Table', the number of dimensions of 'Table data' is 1, but the block parameter 'Number of table dimensions' is 2. The dimensions of 'Table Data' and value of 'Number of table dimensions' must match.

Ich gehe davon aus, dass für die Verwendung im 2D-lookup table jedem X und Y Wert auch ein Z Wert zugewiesen sein muss. Abgesehen davon, möchte ich diese Matrix später grafisch (3D) darstellen. Und dafür bräuchte jeder Z-Wert einen X- und Y-Wert.

Nun habe ich mit verschiedenen Funktionen versucht, die mit "NaN" gekennzeichneten Datenpunkte zu interpolieren:

fillmissing

Damit wurden die Datenpunkte der Matrix zwar interpoliert, aber einige der interpolierten Werte wurden viel zu groß. Kann man diese Funktion erweitern, sodass die zu interpolierenden Werte nur im Bereich von z.B. 0 bis 100 eingesetzt werden? Eine Art Wertebereich für die einzusetzenden Werte schwebt mir vor, nur ich weiß nicht wie ich es mit der Funktion verbinden kann.

Code:

F=fillmissing(Matrix,'linear');
 


griddata
Unter Verwendung des Befehls "griddata" kam es mit folgendem Code:

Code:

xR=Matrix(:,1);
yR=Matrix(1,:);
yR(:,1)=[];
xR(1,:)=[];
outputdata=Matrix;
outputdata(:,1)=[];
outputdata(1,:)=[];
[xq,yq]=meshgrid(xR,yR);
Zq=griddata(xR,yR,outputdata,xq,yq);
 


immerwieder zu einer Fehlermeldung.

Fehler:
Error using griddata (line 106)
The lengths of X and Y must match the size of Z.

Wenn ich im code bei griddata dann x und y getauscht habe, hat Matlab zwar die Matrix erstellt aber alle Werte als NaN ausgegeben!

Code:

xR=Matrix(:,1);
yR=Matrix(1,:);
yR(:,1)=[];
xR(1,:)=[];
outputdata=Matrix;
outputdata(:,1)=[];
outputdata(1,:)=[];
[xq,yq]=meshgrid(xR,yR);
Zq=griddata(yR,xR,outputdata,xq,yq);
 


Vielleicht findet hier jemand meinen Denkfehler.

interp2
Mit dieser Funktion habe ich einen ähnlichen Code verwendet, der sich aber ebenfalls in einem Fehler äußert.

Fehler:
Error using griddedInterpolant
Sample points vector corresponding to grid dimension 1 must contain 5 elements.

Code:

xR=Matrix(:,1);
yR=Matrix(1,:);
yR(:,1)=[];
xR(1,:)=[];
outputdata=Matrix;
outputdata(:,1)=[];
outputdata(1,:)=[];
[xq,yq]=meshgrid(xR,yR);
Zq=interp2(xR,yR,outputdata,xq,yq);
 


Ich hoffe Ihr versteht mein Anliegen Smile

VG

workspace.mat
 Beschreibung:

Download
 Dateiname:  workspace.mat
 Dateigröße:  71.56 KB
 Heruntergeladen:  231 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Wenn ich diesen Datensatz in den 2D-Lookup table einfüge und die Simulation starten möchte, dann erscheint folgender Fehler:

In block 'test/2-D Lookup Table', the number of dimensions of 'Table data' is 1, but the block parameter 'Number of table dimensions' is 2. The dimensions of 'Table Data' and value of 'Number of table dimensions' must match.

Das spricht für mich für einen Fehler bei der Angabe der Parameter. Bitte das Modell zur Verfügung stellen. Es muss nicht das gesamte Modell sein, sondern nur der Lookup-Table und idealerweise noch Input, so dass man ihn testen kann.

Eine Schwierigkeit sehe ich darin, dass in der ersten Spalte von Matrix wiederholt identische Werte vorkommen. Das würde ich erstmal zusammenfassen, z.B. mit
Code:
xR=Matrix(2:end,1);
yR=Matrix(1,2:end);
outputdata=Matrix(2:end, 2:end);
[gp, xR_new] = findgroups(xR);
outputdata_new = cell2mat(splitapply(@(x){mean(x,1,"omitnan")}, outputdata, gp));
surf(xR_new, yR, outputdata_new')
shading interp

Dann lässt sich das auch schon als Oberfläche darstellen.

Vielleicht erübrigt sich damit schon der Bedarf von Interpolation (die hier ja zu einem großen Teil Extrapolation wäre).

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.