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

for schleife und imagesc

 

Becks
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 24.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2010, 23:43     Titel: for schleife und imagesc
  Antworten mit Zitat      
Hallo zusammen.

Ich bin absoluter Neuling was Matlab angeht.
Ich habe schon ein fertiges Programm mit dem ich *.VC7 dateien einlesen kann.

Code:


function [u,w,X,Z] = read_2C(filename2c,Diameter);

% Datei einlesen
imx = readimx(filename2c);
zeilen = imx.Nx;
spalten = imx.Ny;

% Geschwindigkeitskomponenten u,w im experimentellen Kosy einlesen
ue = double(imx.Data(1:zeilen,1:spalten)) .* imx.ScaleI(1);
we = double(imx.Data(1:zeilen,spalten+1:(2*spalten))) .* imx.ScaleI(1);

% Achsen x, z im experimentellen Koordinatensystem einlesen
xe = ([1:zeilen]-0.5)*imx.Grid*imx.ScaleX(1)+imx.ScaleX(2);
ze = ([1:spalten]-0.5)*imx.Grid*imx.ScaleY(1)+imx.ScaleY(2);

% Ersetzten der 'Nullen' im Vektorfeld durch NaN (Not a Number)
indices = find((ue+we)==0);
ue(indices) = NaN;
we(indices) = NaN;

% Transponieren, damit Daten aussehen wie Davis-Daten (wenn in Matlab-Figure Axen
% 'reverse' gesetzt und damit gewünschtes KOS angezeigt wird)
ue = ue';
we = we';

%'Ränder' = 1. Spalte stromauf und letzte Spalte stromab abschneiden
index_links = min(find(max(~isnan(ue))==1));
index_rechts = max(find(max(~isnan(ue))==1));

ue(:,index_rechts) = NaN;
we(:,index_rechts) = NaN;
ue(:,index_links) = NaN;
we(:,index_links) = NaN;

% Koordinatentransformation experimentell (e) -> global
u = ue;
x = -xe;
w = -we; % Bei Geschwindigkeiten muss hier kein Vz-Wechsel hin, bei RMS wohl!
z = -ze;

% dimensionslos machen mit Durchmesser
X = x./Diameter;
Z = z./Diameter;

end
 


Hier mit kann ich eine Datei einlesen und ich bekomme ein Bild davon.

Code:


function rms

%% Definition der einzulesenden Dateien und Winkel

rho = 1.125;
U_inf = 70;

% Raketendurchmesser in [mm]
Diameter = 108;


% Dateiname der einzulesenden Datei
file = ('rms.VC7');
   
%% Die Daten werden aus der Datei eingelesen (über Unterfunktion read_2C


[u_rms,w_rms,X,Z] = read_2C(file,Diameter);

% Turbulenzgrad T_u berechnen
Tu = 1/U_inf * sqrt(0.5 * ((u_rms.*u_rms)+(w_rms.*w_rms)));


figure()

% Turbulenzgrad plotten
imagesc(X,Z,Tu);
hold on

title('Turbulenzgrad T_u')
xlabel('x/D[-]')
ylabel('z/D[-]')

colorbar

% Raketenheck einzeichnen
plot([-0.15,0,0,-0.15],[-0.5 -0.5,0.5,0.5],'LineWidth',1.5,'Color','r')

axis equal

end

 


Meine Aufgabe ist es nun mehrere Dateien einzulesen und mehrere Bilder angezeigt zu bekommen.
Dies wollte ich mit einer for Schleife machen.
Ich finde jedoch keinen Ansatz.

Mir wurde gesagt ich kann mit:
A=strvcat ('Datei1', 'Datei2', 'Datei3');
A(i,: )

was anfangen.

Aber wie verbinde ich das mit dem imagesc?
Und wo setz ich meine Laufvariable ein? Bei file(i)?
Die Dateien besitzen alle andere Namen.
Es würde aber schon reichen wenn ich z.B. alle Dateien mit der Endung *.VC7 aus einem Ordner darstellen könnte.

Danke im vorraus.
Mit freundlichen Grüßen
Becks.
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.04.2010, 11:34     Titel:
  Antworten mit Zitat      
Hallo

da muss deine function um uigetfile/for-loop erweitern.

strvcat ist nur dafür da, um Strings zusammenzusetzen,
gemeint war wahrscheinlich Pfad zusammen mit Dateinamen zusetzen
z.B.
Code:

pfad = strvcat('C:\temp\', Dateiname)
 

Um den Pfad zusammenzusetzen gibt es unter Matlab dafür bessere Funktion fullfile


Code:

function rms

%% Definition der einzulesenden Dateien und Winkel

rho = 1.125;
U_inf = 70;

% Raketendurchmesser in [mm]
Diameter = 108;


% Dateiname der einzulesenden Dateien
start_path = pwd;
[files, path2file] = uigetfile(...
'*.VC7',...
'Select Images',...
start_path,...
'MultiSelect','on')

if isequal(path2file,0)
  return;
end

if ~iscell(files)
 files ={files}
end
   
% Die Daten werden aus der Datei eingelesen
% (über Unterfunktion read_2C

% über for_schleife Bilder einlesen
% wie diese dargestellt werden müssen, muss du selbst entscheiden
for f=1:length(files)
  file= fullfile(path2file,files{k}) ;
   [u_rms,w_rms,X,Z] = read_2C(file,Diameter);

  % Turbulenzgrad T_u berechnen
  Tu = 1/U_inf * sqrt(0.5 * ((u_rms.*u_rms)+(w_rms.*w_rms)));


   figure()

  % Turbulenzgrad plotten
  imagesc(X,Z,Tu);
  hold on

  title('Turbulenzgrad T_u')
  xlabel('x/D[-]')
  ylabel('z/D[-]')

  colorbar

  % Raketenheck einzeichnen
  plot([-0.15,0,0,-0.15],[-0.5 -0.5,0.5,0.5],'LineWidth',1.5,'Color','r')

  axis equal
end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Becks
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 24.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2010, 19:03     Titel:
  Antworten mit Zitat      
Erstmal vielen Dank für die Antwort.
Habs ausprobiert und es funktioniert.
Da ich keine Erfahrung mit MATLAB habe fällt es mir natürlich etwas schwer das ganze nachzuvollziehen.

Soweit ich es verstanden habe kann ich hiermit meine Dateien auswählen, ich definiere die Dateien mit *.VC7 und kann durch Multiselect 'on' mehrere auf einmal auswählen.

Code:


% Dateiname der einzulesenden Dateien
start_path = pwd;
[files, path2file] = uigetfile(...
'*.VC7',...
'Select Images',...
start_path,...
'MultiSelect','on')

 



Wofür stehen die beiden hier?

Code:


if isequal(path2file,0)
  return;
end

if ~iscell(files)
 files ={files}
end
 
 


Ich bräuchte jetzt noch eine Funktion bei der ich einen bestimmten Bereich der Bilder angezeigt bekomme. Die Bilder sind ja über eine X und Z Achse aufgetragen und jetzt möchte ich z.B. den Bereich 180-240 (X-Achse) und +- 15(Z-Achse) auf allen Bildern angezeigt bekommen.

Hoffe die ganzen Fragen bereiten keine allzu großen Umstände.

Danke im vorraus.
Becks.
Private Nachricht senden Benutzer-Profile anzeigen
 
Becks
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 24.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2010, 15:54     Titel:
  Antworten mit Zitat      
Hab mir die Befehle nochmal unter der Matlab Hilfe angeguckt.

uigetfile hab ich soweit nachvollzogen.

Code:


if isequal(path2file,0)
  return;
end

 


Wenn die ausgeählten Dateien gleich sind (also in meinem Fall *.VC7) dann soll er die ausgeben. Kommt das hin?


Code:


if ~iscell(files)
 files ={files}
end
 
 


Bestimmt ob die Dateien die ich auswähle cell array sind? Was genau ist cell array?

Wozu genau brauch ich die beiden Befehle?
Ich hab sie mal rausgelassen und der Ablauf funktioniert.
Nur wenn ich bei den Dateien auswählen auf "Cancel" gehe dann krieg ich ne Fehlermeldung von Matlab.

Könnte mir jemand noch erklären was genau diese beide If schleifen aussagen und wofür ich die genau brauche?

Danke im vorraus.
Becks.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.04.2010, 16:40     Titel:
  Antworten mit Zitat      
Code:

if isequal(path2file,0)
  return;
end
 


Das bedeutet, dass wenn du auf ABBRECHEN drückst, nichts weiter verarbeitet wird. Es wird zurückgekehrt.


Code:

if ~iscell(files)
 files ={files}
end
 


Das dient nur zur Sicherheit, weil, wenn man nur ein File auswählt, werden files als CHAR-ARRAY zurückgegeben, Bei mehreren Files ist es CELL OF STRINGs.
Und FOR-Schleife wurde dann nicht mehr funktionieren, weil es CELL erwartet wird.

CELL ist ein Sammelcontainer, der unterschiedliche Datatypen enthalten kann doubles, integers,strings, arrays, structs, cells
Private Nachricht senden Benutzer-Profile anzeigen
 
Becks
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 24.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2010, 17:03     Titel:
  Antworten mit Zitat      
Super, vielen Dank.
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.