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

Hilfe bei contourf 2D plot :) Wo liegt der Fehler

 

gruenertee
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2013, 17:49     Titel: Hilfe bei contourf 2D plot :) Wo liegt der Fehler
  Antworten mit Zitat      
Hallo Matlab User,

eigentlich sollte folgender Code konzentrische Kreise zeigen, doch dies wird durch contourf so nicht dargestellt; wo liegt der Denkfehler Smile

Zitat:

% -------------------Konstanten------------------------------
lambda_sand=2.82; % [W/mK] --> Waermeleitfaehigkeit Sand
alpha_sand=8.81*10^-7; % [m^2/s] --> Temperaturleitfaehigkeit Sand
tmin=0; % [s] Startzeit
tmax=187200; % [s] --> 52 Stunden
zeitschritt=(tmax-tmin)/52; %3600s Zeitintervallbreite (=1h)
T0=zeros(53,53); % Leermatrix mit 53 Spalten und 1 Zeile
T0=295.24+T0; % [°K] --> ungest. Untergrundtemperatur 22.09°C
q=57.7; % [W/m] --> Entzugsleistung
xk=0.9; % [m] --> x Koordinate des Sondenmittelpunktes
yk=0.9; % [m] --> y Koordinate der Sondenmittelpunktes
T=zeros(53,53); % gleiche Spaltenanzahl wie Zeitvektor
zeit=[tmin:zeitschritt:tmax]'; %Zeitvektor aufspannen
zeit=repmat(zeit,1,53); %Vektor erweitern auf 53*53 Matrix
zeit=zeit';
% ---------------------Mesh aufbauen-----------------------------
%[xmesh,ymesh]=meshgrid(0.1:1.7/52:1.8,0.1:1.7/52:1.8 );
% ---------------------Infinite Linienquelle nach Mendez-----------------
%xmesh=xmesh';
xrechnen = [0:1.8/52:1.8]';
a=repmat(xrechnen,1,53);
yrechnen = [0:1.79/52:1.79]';
b=repmat(yrechnen,1,53);


T=T0+q/(4*pi*lambda_sand).*expint(((a-xk).^2+(b-yk).^2)./(4*alpha_sand*zeit));%expint(X)= Exponentialintegral

x = [0:1.8/52:1.8]';
y = [0:1.8/52:1.8]';

T(1:end,1)=295.1; %[K] --> 21,95°C Anfangstemperatur auf der Bohrlochwand
T(1,1:end)=295.1;
hold on;
contourf(x, y, T);
% shading interp;
%colormap(flipud(jet));


Vielen, vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.09.2013, 18:01     Titel:
  Antworten mit Zitat      
bitte die code umgebung benutzen.
Code:
xrechnen = [0:1.8/52:1.8];
a=repmat(xrechnen,53,1);
das?
warum hast du deinen meshgrid auskommentiert? meacht doch genau das.?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
gruenertee
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2013, 18:23     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort Smile

Ja über Mesh grid habe ich es auch schon versucht, aber weil mesh Grid den x koordinaten Matrix xmesh und den y koordinaten Matrix ymesh zeilen und spalten vertauscht darstellt, muss ich über xmesh=xmesh' dies ändern; das ergebnis ist das nur ein Gerade dargestellt wird
Code:

% -------------------Konstanten------------------------------
lambda_sand=2.82; % [W/mK] --> Waermeleitfaehigkeit Sand
alpha_sand=8.81*10^-7; % [m^2/s] --> Temperaturleitfaehigkeit Sand
tmin=0; % [s] Startzeit
tmax=187200; % [s] --> 52 Stunden
zeitschritt=(tmax-tmin)/52; %3600s Zeitintervallbreite (=1h)
T0=zeros(53,53); % Leermatrix mit 53 Spalten und 1 Zeile
T0=295.24+T0; % [°K] --> ungest. Untergrundtemperatur 22.09°C
q=57.7; % [W/m] --> Entzugsleistung
xk=0.9; % [m] --> x Koordinate des Sondenmittelpunktes
yk=0.9; % [m] --> y Koordinate der Sondenmittelpunktes
T=zeros(53,53); % gleiche Spaltenanzahl wie Zeitvektor
zeit=[tmin:zeitschritt:tmax]'; %Zeitvektor aufspannen
zeit=repmat(zeit,1,53); %Vektor erweitern auf 53*53 Matrix
zeit=zeit';

% ---------------------Mesh aufbauen-----------------------------

    [xmesh,ymesh]=meshgrid(0:1.8/52:1.8,0:1.8/52:1.8);
     xmesh=xmesh';
     T=T0+q/(4*pi*lambda_sand).*expint(((xmesh-xk).^2+(ymesh-yk).^2)./(4*alpha_sand*zeit)); %feste Zeit einbauen zb52 stunden = 187200s
     T(1:end,1)=295.1;       %[K] --> 21,95°C Anfangstemperatur auf der Bohrlochwand
     hold on;
     contourf(xmesh, ymesh, T);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.09.2013, 18:29     Titel:
  Antworten mit Zitat      
Zitat:
Ja über Mesh grid habe ich es auch schon versucht, aber weil mesh Grid den x koordinaten Matrix xmesh und den y koordinaten Matrix ymesh zeilen und spalten vertauscht darstellt,
das ist ja auch der sinn dabei ^^
Code:
% -------------------Konstanten------------------------------
lambda_sand=2.82; % [W/mK] --> Waermeleitfaehigkeit Sand
alpha_sand=8.81*10^-7; % [m^2/s] --> Temperaturleitfaehigkeit Sand
tmin=0; % [s] Startzeit
tmax=187200; % [s] --> 52 Stunden
zeitschritt=(tmax-tmin)/52; %3600s Zeitintervallbreite (=1h)
T0=zeros(53,53); % Leermatrix mit 53 Spalten und 1 Zeile
T0=295.24+T0; % [°K] --> ungest. Untergrundtemperatur 22.09°C
q=57.7; % [W/m] --> Entzugsleistung
xk=0.9; % [m] --> x Koordinate des Sondenmittelpunktes
yk=0.9; % [m] --> y Koordinate der Sondenmittelpunktes
T=zeros(53,53); % gleiche Spaltenanzahl wie Zeitvektor
zeit=[tmin:zeitschritt:tmax]'; %Zeitvektor aufspannen
zeit=repmat(zeit,1,53); %Vektor erweitern auf 53*53 Matrix
zeit=zeit';

% ---------------------Mesh aufbauen-----------------------------

    [xmesh,ymesh]=meshgrid(0:1.8/52:1.8,0:1.8/52:1.8);
 
     T=T0+q/(4*pi*lambda_sand).*expint(((xmesh-xk).^2+(ymesh-yk).^2)./(4*alpha_sand*zeit)); %feste Zeit einbauen zb52 stunden = 187200s
     T(1:end,1)=295.1;       %[K] --> 21,95°C Anfangstemperatur auf der Bohrlochwand
     hold on;
     contourf(xmesh, ymesh, T);

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
gruenertee
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2013, 18:40     Titel:
  Antworten mit Zitat      
Meine Berechnung stimmt aber nur wenn die Zellen-Werte von xmesh = ymesh übereinstimmen; so ist zb. xmesh(1,5) = 0.1385 ; ymesh(1,5) = 0; bin da gerade verwirrt Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.09.2013, 18:44     Titel:
  Antworten mit Zitat      
Zitat:
Meine Berechnung stimmt aber nur wenn die Zellen-Werte von xmesh = ymesh übereinstimmen
das bezweifel ich ehrlich gesagt ^^ das macht keinen sinn Smile
dann berechnest du einfach 53 mal die selben koordinaten ^^
Zitat:
so ist zb. xmesh(1,5) = 0.1385 ; ymesh(1,5) = 0;
und wo ist das problem =?
du berechnest also z für den wert (0.1385,0) sehe da keine schwierigkeiten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
gruenertee
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2013, 19:17     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Zitat:
Meine Berechnung stimmt aber nur wenn die Zellen-Werte von xmesh = ymesh übereinstimmen
das bezweifel ich ehrlich gesagt ^^ das macht keinen sinn Smile
dann berechnest du einfach 53 mal die selben koordinaten ^^
Zitat:
so ist zb. xmesh(1,5) = 0.1385 ; ymesh(1,5) = 0;
und wo ist das problem =?
du berechnest also z für den wert (0.1385,0) sehe da keine schwierigkeiten.


Ne stimmt du hast vollkommen Recht, ich stand auf dem Schlauch; Was mich jetzt noch irritiert ist die Tatsache, dass mein Code keine konzentrischen Kreise zeigt, was mein eigentliches Ziel ist Smile


Code:

% -------------------Konstanten------------------------------
lambda_sand=2.82; % [W/mK] --> Waermeleitfaehigkeit Sand
alpha_sand=8.81*10^-7; % [m^2/s] --> Temperaturleitfaehigkeit Sand
tmin=0; % [s] Startzeit
tmax=187200; % [s] --> 52 Stunden
zeitschritt=(tmax-tmin)/52; %3600s Zeitintervallbreite (=1h)
T0=zeros(53,53); % Leermatrix mit 53 Spalten und 1 Zeile
T0=295.24+T0; % [°K] --> ungest. Untergrundtemperatur 22.09°C
q=57.7; % [W/m] --> Entzugsleistung
xk=0.9; % [m] --> x Koordinate des Sondenmittelpunktes
yk=0.9; % [m] --> y Koordinate der Sondenmittelpunktes
T=zeros(53,53); % gleiche Spaltenanzahl wie Zeitvektor
zeit=[tmin:zeitschritt:tmax]'; %Zeitvektor aufspannen
zeit=repmat(zeit,1,53); %Vektor erweitern auf 53*53 Matrix
zeit=zeit';

% ---------------------Mesh aufbauen-----------------------------

    [xmesh,ymesh]=meshgrid(0:1.8/52:1.8,0:1.8/52:1.8);
 
     T=T0+q/(4*pi*lambda_sand).*expint(((xmesh-xk).^2+(ymesh-yk).^2)./(4*alpha_sand*zeit)); %feste Zeit einbauen zb52 stunden = 187200s
     T(1:end,1)=295.1;       %[K] --> 21,95°C Anfangstemperatur auf der Bohrlochwand
     hold on;
     contourf(xmesh, ymesh, T);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.09.2013, 19:33     Titel:
  Antworten mit Zitat      
ich denke es liegt am zeit vektor. der hat ja quasi eine "orientierung". warum nimmt er in zeilenrichtung zu und nicht in spaltenrichtung? das muss irgendwie anders laufen. du rechnest quasi ja an jeder stelle mit einer anderen zeit. du hast ja selber dazugeschrieben das da eine feste zeit hin muss ^^ wenn du das berücksichtigst ist das ergebniss das erwartete ^^ wenn du quasi einen zeitlichen verlauf haben willst würde ich dann vieleicht in die 3. diemension arbeiten. dann kannst du auch zb ein movie erstellen von der ausbreitung.
so ich geh jetzt pennen. weitere antworten dann erst morgen von meiner seite Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
gruenertee
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2013, 07:28     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
wenn du quasi einen zeitlichen verlauf haben willst würde ich dann vieleicht in die 3. diemension arbeiten.


Vielen Vielen Dank für den Hinweis auf die Zeit-Matrix; ich versuche jetzt den T MAtrix in die 3 Dimension zu "heben"; dein hinweis hat viel Frust erspart ^^

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
gruenertee
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2013, 09:35     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
(...) dann kannst du auch zb ein movie erstellen von der ausbreitung.


Diesen Hinweis fand ich ganz interessant; ich habe meinen Code soweit überarbeitet, dass ich die Zeit Matrix in die 3D Ebene "gehievt" habe; jetzt möchte ich nur noch automatisiert für jede Zeit Matrix i=1:53 jeweils einen contourf plot erstellt haben Smile

Code:

 % -------------------Konstanten------------------------------
    lambda_sand=2.82;       % [W/mK] --> Waermeleitfaehigkeit Sand
    alpha_sand=8.81*10^-7;  % [m^2/s] --> Temperaturleitfaehigkeit Sand
    T0=zeros(53,53);        % Leermatrix mit 53 Spalten und 1 Zeile
    T0=295.24+T0;           % [°K] --> ungest. Untergrundtemperatur 22.09°C
    q=57.7;                 % [W/m] --> Entzugsleistung
    xk=0.9;                 % [m] --> x Koordinate des Sondenmittelpunktes
    yk=0.9;                 % [m] --> y Koordinate der Sondenmittelpunktes
    T=zeros(53,53);         % gleiche Spaltenanzahl wie Zeitvektor  
%---------------------Mesh aufbauen-----------------------------
  [xmesh,ymesh]=meshgrid(0:1.8/52:1.8,0:1.8/52:1.8); %x und y Achse von 0 bis 1.8 m mit 51 "Zwischenschritten"
%---------------------Zeit Matrix aufbauen-----------------------------
    tmin=0;                             % [s] Startzeit
    tmax=187200;                        % [s] --> 52 Stunden
    zeitschritt=(tmax-tmin)/52;         %3600s Zeitintervallbreite (=1h)
    zeit = [tmin:zeitschritt:tmax]';    %Zeitvektor aufspannen; Zeitvektor für die for Schleife
    zeit=repmat(zeit,1,53);             %Vektor erweitern auf 53*53 Matrix
    time=zeros(53,53);                  % Zeit Vektor für die Berechnung und Erweiterung als 3D Matrix
  for i = 1:53                          %53 Dimensionen, die die 52 Stunden TRT Test repräsentieren
        d=zeit(i,:);
        d=d';
        d=repmat(d,1,53);
        time(:,:,i)=d; %jede Dimension enthält eine 53 mal 53 Matrix mit demselben Zeit Eintrag
  end
%---------------------Infinite Linienquelle nach Mendez-----------------
for i = 1:53
     T(:,:,i)=T0+q/(4*pi*lambda_sand).*expint(((xmesh-xk).^2+(ymesh-yk).^2)./(4*alpha_sand*time(:,:,i))); %feste Zeit einbauen zb52 stunden = 187200s
     hold on;
     contourf(xmesh, ymesh, T(:,:,i));
     % shading interp;
    % colormap(flipud(jet));
end
 


Wo müsste ich noch den Hebel ansetzen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.09.2013, 09:44     Titel:
  Antworten mit Zitat      
die anhebung in die 3. dimension hatte ich nur vorgeschalgen um eventuell eine schleife auszulassen. bei 53 werten ist allerdings eine schleife kein problem.
Code:
% -------------------Konstanten------------------------------
    lambda_sand=2.82;       % [W/mK] --> Waermeleitfaehigkeit Sand
    alpha_sand=8.81*10^-7;  % [m^2/s] --> Temperaturleitfaehigkeit Sand
    T0=zeros(53,53);        % Leermatrix mit 53 Spalten und 1 Zeile
    T0=295.24+T0;           % [°K] --> ungest. Untergrundtemperatur 22.09°C
    q=57.7;                 % [W/m] --> Entzugsleistung
    xk=0.9;                 % [m] --> x Koordinate des Sondenmittelpunktes
    yk=0.9;                 % [m] --> y Koordinate der Sondenmittelpunktes
    T=zeros(53,53,53);         % gleiche Spaltenanzahl wie Zeitvektor  
%---------------------Mesh aufbauen-----------------------------
  [xmesh,ymesh]=meshgrid(0:1.8/52:1.8,0:1.8/52:1.8); %x und y Achse von 0 bis 1.8 m mit 51 "Zwischenschritten"
%---------------------Zeit Matrix aufbauen-----------------------------
    tmin=0;                             % [s] Startzeit
    tmax=187200;                        % [s] --> 52 Stunden
    zeitschritt=(tmax-tmin)/52;         %3600s Zeitintervallbreite (=1h)
    zeit = [tmin:zeitschritt:tmax]';    %Zeitvektor aufspannen; Zeitvektor für die for Schleife
%---------------------Infinite Linienquelle nach Mendez-----------------
for i = 1:53
     T(:,:,i)=T0+q/(4*pi*lambda_sand).*expint(((xmesh-xk).^2+(ymesh-yk).^2)./(4*alpha_sand*zeit(i))); %feste Zeit einbauen zb52 stunden = 187200s
     hold on;
     contourf(xmesh, ymesh, T(:,:,i));
     drawnow
     pause(0.1)
     % shading interp;
    % colormap(flipud(jet));
end

_________________

richtig Fragen
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.