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

3D-Dateninterpolation (Strömungsfeld)

 

Tantal
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.04.14
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 01.04.2014, 12:17     Titel: 3D-Dateninterpolation (Strömungsfeld)
  Antworten mit Zitat      
Servus,

ich habe ein numerisch berechnetes Strömungsfeld. Dieses lasse ich mir in 6 Vektoren ausgeben (3 Ortsvektoren: x,y,z und 3 Geschwindigkeitsvektoren: u,v,w).

Excel-Auszug (sortiert nach x-Koordinate):


Ich habe in MatLab ein Programm, welches zu jedem Ortspunkt (x,y,z) ein Geschwindigkeitsfeld (u,v,w) braucht. Dazu muss natürlich zwischen meinen diskreten Werten aus den oben genannten Vektoren interpoliert werden. Ich war leider nicht in der Lage dies zu bewerkstelligen. Ich habe in der MatLab-Hilfe von einem flow(n) und Interpolating Scattered Data-Befehlen gelesen, aber konnte sie nicht anwenden.

Hat hier jemand Ideen bzw. Vorschläge, wie ich an dieses Problem herangehen kann? Ich brauche eine Funktion, die mir zu einem bestimmten Ortspunkt die 3 Geschwindigkeitskomponenten u,v,w ausgibt, um damit weiterrechnen zu können. Das Einlesen der Daten von Excel nach MatLab kann ich!

So wie ich es mir vorstelle:
- jede Zeile in der Excel-Datei gehört zusammen
- mein gesuchter Ortspunkt wird sich zwischen 2 Excel-Zeilen befinden
- (lineare) Interpolation des Ortes
- daraus (lineare) Interpolation der Strömungsgeschwindigkeitskomponenten

Vielen Dank im voraus und schöne Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.04.14
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 01.04.2014, 14:47     Titel:
  Antworten mit Zitat      
Danke für den Hinweis, aber wie ich das sehe, brauche ich dazu eine beliebige Funktion "v", die ich aber nicht habe.

Man muss sich ein "Netz" aufspannen, auf dem dann interpoliert wird?! Gut, aber wie gesagt, habe ich keine Funktion, sondern diskrete Werte.

Oder verstehe ich dich nicht ganz richtig?

Danke und Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

in den Beispielen ergibt sich V durch Funktionsauswertung, das können aber auch Messwerte sein.

Meines Erachtens müsste es funktionieren, wenn du die ersten 4 Spalten als erste 4 Inputs übergibt. Bitte Daten in kopierbarer Form zur Verfügung stellen, dann kann man sowas auch mal eben testen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.04.14
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 01.04.2014, 15:04     Titel:
  Antworten mit Zitat      
Hallo,

anbei ein Strömungsfeld in einem kurzen Zylinderstück mit einer Kugel in der Mitte (Kugelumströmung).

Leider verwirren mich deine gut gemeinten Ansätze grade ein bisschen Very Happy

Danke und Grüße

PS: ich habe gerade das Beispiel durchgemacht, welches sich in der Hilfe unter interpn findet. Mit dem Befehl: VI=interpn(v,1,1,3,2) bekomme ich VI = 0.1888. Das ist wohl der Funktionswert bei den 4 Parametern. Ich brauche aber nicht einen Funktionswert an dieser Stelle bzw. bei diesem Parametersatz, sondern meine 3 Strömungsgeschwindigkeiten.

export.xls
 Beschreibung:

Download
 Dateiname:  export.xls
 Dateigröße:  8.23 MB
 Heruntergeladen:  618 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mit scatteredInterpolant geht das, was ich meinte:

Code:
data = xlsread('export.xls');
% Testdaten
needed_x = min(data(:,1)) + rand(10,1)*range(data(:,1));
needed_y = min(data(:,2)) + rand(10,1)*range(data(:,2));
needed_z = min(data(:,3)) + rand(10,1)*range(data(:,3));
% Interpolation
u = scatteredInterpolant(data(:,1), data(:,2), data(:,3), data(:,4));
needed_u = u(needed_x, needed_y, needed_z);
% dasselbe dann für v und w


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.04.14
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 01.04.2014, 15:58     Titel:
  Antworten mit Zitat      
Vielen Dank Harald,

ich kann deinen Code nachvollziehen was er macht, leider spuckt er mir folgende Fehlermeldung aus:

Undefined function 'scatteredInterpolant' for input arguments of type 'double'.

Ich habe es dann mal mit single probiert, aber leider gleiches Ergebnis:

Undefined function 'scatteredInterpolant' for input arguments of type 'single'.


Hast du eine Ahnung woran es liegen könnte? Benutze 2012b

Danke und Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.04.2014, 17:18     Titel:
  Antworten mit Zitat      
Hallo,

die Funktion gibt es in diesem Release noch nicht. Du kannst stattdessen TriScatteredInterp verwenden (einfach ersetzen).

Bitte das verwendete Release in deinem Profil angeben, dann kann man das bei den Vorschlägen berücksichtigen (oder das zumindest versuchen... Wink ).

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.04.14
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 01.04.2014, 21:04     Titel:
  Antworten mit Zitat      
Vielen Dank Harald,

dieser Befehl funktioniert Very Happy (Ich habe gleich meine ganzen Daten, statt deiner Testdaten eingelesen).


u = TriScatteredInterp(data(:,1), data(:,2), data(:,3), data(:,4));

Jetzt habe ich (nur für die Geschwindigkeitskomponente u) für u ein X (65535x3) und ein V (65535x1) mit Method "linear" - soweit so gut. Dein nächster Befehl soll jetzt meine gesuchte interpolierte Geschwindigkeitskomponente needed_u berechnen oder? Dazu habe ich einfach mal Werte eingesetzt, z.B.:

needed_u = u(0.001, 0.001, 0.001);

und er spuckt ein NaN aus Crying or Very sad
Ich habe schon geschaut, also es kommen nirgendwo in meinen Beispieldaten NaNs vor.

Danke und schöne Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.04.2014, 21:18     Titel:
  Antworten mit Zitat      
Hallo,

ich würde vermuten, dass [0.001, 0.001, 0.001] außerhalb des Bereichs liegt, in dem Datenpunkte zur Verfügung stehen.

Alternativ kannst du es mit griddatan versuchen.

scatteredInterpolant könnte auch extrapolieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.04.14
Wohnort: ---
Version: 2012b
     Beitrag Verfasst am: 01.04.2014, 21:31     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich bin natürlich ein Depp! Du hast vollkommen recht, ich war außerhalb des Definitionsbereichs Confused . Ich habe auch sogleich mit Excel linear-interpolierte Werte erzeugt und sie mit deiner Funktion abgeglichen - es passt hervorragend Very Happy.

Ein herzliches Dankeschön, ich werde jetzt weiter rumbasteln und hoffe auf keine weiteren Probleme.

Merci!
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.