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

Einzelne Punkte beim Scatteredinterpolant vernachlässigen

 

JuliaM

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2015, 19:39     Titel: Einzelne Punkte beim Scatteredinterpolant vernachlässigen
  Antworten mit Zitat      
Ich habe riesige Datensätze dabei geht es um Temperaturmessungen in einem dreidimensionalen Probekörper. Die möchte ich zu einzelnen Zeitschritten darstellen und interpolieren. Dafür verwende ich den scattered interpolant, weil die Werte nciht geordnet sind. Bei einigen Zeitschritten sind keine Werte gemessen worden, die in in Matlab als Nullwert übergebe. Wie kann ich bei meiner Interpolationsvorschrift die Nullwerte nicht berücksichtigen, weil sie mir im Moment die Grafik zerstören. DANKE
das ist mein Code, dabei ist i der x wert, j der y Wert und k der z wert, der aus dem WOrkspace aus der Matrix M2_65 geholt wird.In V finden sich die zugehörigen Temperaturen und der minimale z wert ist 8, den habe ich definiert, nur falls sich jemand wundert.

Code:
function Vq_time=interpolation(Eingabe, Zeit,minx, maxx, miny,maxy,minz,maxz,meshw,meshwz,extrap)
M2_65=Eingabe;
time=Zeit;
M2_65(isnan(M2_65))=0;

time2=num2str(Zeit);
mat='.mat';
a='Vsc_';
Speicher=[a time2 mat];

i=M2_65(19,:);
j=M2_65(20,:);
k=M2_65(21,:);

% Input grid
x = M2_65(19,:);
y = M2_65(20,:);
z = M2_65(21,:);
% Data

if minz < 8
    minz=8;
    save('minz.mat','minz');
end

if maxz > max(z)
    maxz = max(z);
    save('maxz.mat','maxz');
end

v_scatter=M2_65(time,:);
V_time = M2_65(time,:);

nullwerte=find(V_time==0);
i(nullwerte)=[];
j(nullwerte)=[];
k(nullwerte)=[];
V_time(nullwerte)=[];
v_scatter(nullwerte)=[];

save('i.mat','i');
save('j.mat','j');
save('k.mat','k');

save(Speicher,'v_scatter');
clear v_scatter

% Output grid
xp = [minx:meshw:maxx];
yp = [miny:meshw:maxy];
zp = [minz:meshwz:maxz];

% Interpolation
[X, Y, Z] = ndgrid(x, y, z);
[Xp, Yp, Zp] = ndgrid(xp, yp, zp);

Vq_time=zeros(length(xp),length(xp),length(zp));



InterpolFkt = scatteredInterpolant(i',j',k', V_time','linear',extrap);
for x3=0:length(zp)-1
       for x2=0:length(yp)-1
               for x1=0:length(xp)-1
            Vq_time(x1+1,x2+1,x3+1)=InterpolFkt(x1*meshw+minx,x2*meshw+miny,x3*meshwz+minz);
                    end
    end
end
end


Harald
Forum-Meister

Forum-Meister


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

du hast doch die Nullwerte von V_time schon rausgeworfen?
Hast du Beispieldaten, anhand derer man das Verhalten testen kann?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2015, 20:13     Titel:
  Antworten mit Zitat      
Hallo, danke für die schnelle Antwort. Das habe ich mich gefragt, ob das schon damit passiert. Ich habe drei dateien und in der letzten wird geplottet und da gab es bisher ein sehr komisches verhalten, da die Temperaturen radial abfallen sollten und im ursprung der heißeste Punkt ist. ich schicke mal einen excel Datensatz.

Heißt das, das die Punkte, bei denen V null ist, nicht benutzt werden?

M2_65.xls
 Beschreibung:

Download
 Dateiname:  M2_65.xls
 Dateigröße:  31 KB
 Heruntergeladen:  300 mal
 
JuliaM

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2015, 20:14     Titel:
  Antworten mit Zitat      
Die Nullwerte für i j und k will ich behalten, nur wenn die zugehörige Temperatur 0 ist, soll der Wert für die Interpolation nicht benutzt werden
 
Harald
Forum-Meister

Forum-Meister


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

bitte schreibe noch dazu, wie die Interpolation.m mit diesen Daten aufgerufen wird. Das ist ja doch etwas unübersichtlich.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2015, 21:02     Titel:
  Antworten mit Zitat      
Ich habe einfach einfach ab Spalte B alles als Double in den Workspace geladen.
und die Berechnungsdatei, die auf die Interpolation zurückgreift, sieht so aus:
Code:
clear;
filename=input('Dateiname: ','s');
minx=input('Minimaler x-Wert: ');
maxx=input('Oberster x-Wert: ');
minz=input('Unterster z-Wert: ');
maxz=input('Oberster z-Wert: ');
Zeit=input('Zeitschritt eingeben: ');
meshw=input('Maschenweite eingeben: ');
meshwz=input('Maschenweite in z-Richtung eingeben: ');
extrap=input('Extrapolationsverfahren: ','s'); % linear, cubic, nearest, none
time=num2str(Zeit);
mat='.mat';
a='Vq_';
Speicher=[a time mat];
miny=minx;
maxy=maxx;
save('minx.mat','minx');
save('maxx.mat','maxx');
save('minz.mat','minz');
save('maxz.mat','maxz');
save('Zeit.mat','Zeit');
save('meshw.mat','meshw');
save('meshwz.mat','meshwz');
load(filename);
Eingabe=M2_65;
clear M2_65
Vq_time=interpolation(Eingabe, Zeit,minx, maxx, miny,maxy,minz,maxz,meshw,meshwz,extrap);
save(Speicher,'Vq_time');
clear;
 
Harald
Forum-Meister

Forum-Meister


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

und wie soll man nun erahnen, was der User bei den input-Befehlen eingibt?
Stelle doch bitte einen möglichst einfachen, reproduzierbaren Aufruf von Interpolation zur Verfügung. Danke.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2015, 21:32     Titel:
  Antworten mit Zitat      
Die Interpolation wird nicht manuell aufgerufen. Ich verstehe nicht richtig welche Infos du noch brauchst. Bei Dateinamen wird die Excel tabelle aufgerufen, die in den Workspace importiert worden ist, dann der minimale/max x wert (zb 0 bis 40 )dann der min/max z-wert (zb 8 bis 60), der zeitpunkt ist zb 11, als maschenweite benutze ich in x 0.1 (so dass ich ein mesh bekomme, das mir dann alle 0.1 einen Wert ausgibt und in z richtung 1, weils sonst zu lang dauert und dann interpoliere ich linear
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Ich verstehe nicht richtig welche Infos du noch brauchst

Genau die Infos, die du nachher letztlich doch noch lieferst. Allerdings wäre es deutlich einfacher, das in einen Funktionsaufruf zu packen.
Code:
Vq_time = interpolation(data, 11, 0, 40, 0, 40, 8, 60, 0.1, 1, 'linear');

War doch jetzt nicht so viel verlangt, oder?

Dass der Code lange braucht, ist angesichts dreier verschachtelter for-Schleifen kein Wunder. Warum nicht
Code:
Vq_time = InterpolFkt(Xp, Yp, Zp);
?

Bitte auch den Code Analyzer nutzen. Es ist kaum sinnvoll, Codezeilen im Code zu behalten, deren Resultate nicht weiterverwendet werden.

Man kann leicht feststellen, dass in Vq_time keine Nullen enthalten sind.
Code:
any(Vq_time(:) == 0)


Du hast ja eingangs von einer Visualisierung gesprochen. Nur fehlt halt die Information, wie du die Daten visualisierst...

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2015, 22:43     Titel:
  Antworten mit Zitat      
Danke, das hilft mir schon weiter. Die Anzeige wird über einen slice plot gemacht.der funktioniert aber gut.
 
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.