Verfasst am: 19.06.2011, 18:59
Titel: Bei "whos" bzw. "who" kommt nix
Hallo liebes Forum,
ich habe untenstehendes Programm geschrieben.
es geht grob darum, für den Alpenraum durchschnittliche NS-Mengen, Temperaturen und Schneemengen zu plotten. Klappt auch alles super. Allerdings möchte ich bei den Plots öfter ein paar Kleinigkeiten verändern (Schriftgröße, Colorbar, Legende...).
Nun zum Problem: ich muss dann immer das gesamte Programm durchlaufen lassen, um die produzierte Grafik zu sehen. Das dauert etwa 3min. Jetzt dachte ich mir, es reicht doch auch, es einmal laufen zu lassen und ab dann immer nur noch den pcolor-Befehl zu ändern und ins Command Window zu kopieren, denn die vorher berechneten Variablen müssten ja eigentlich alle im Workspace gespeichert sein. Sind sie aber nicht.
Gebe ich "whos" oder "who" ein, so passiert nix.
%Daten einlesen
load('histalp_temp.mat','lon_ha','lat_ha','temp_ha1','height_ha1');
load('histalp_precip.mat', 'lon_ha','lat_ha','precip_ha1','anteil_schnee1');
disp('Temperatur- und Niederschlagsdaten der GAR für gesamten Zeitraum eingelesen')
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%Durchschnitte und Änderungen der Klimavariablen berechnen
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%durchschnittlichen Winterniederschlag, Wintertemperatur und Schneeanteil von 1801/02 - 2002/03 berechnen
%Temp und Schneeanteil könnten stimmen, NS noch nicht
for i=1:202
winterprecip_mean_1801_2003 = precip_ha1(:,:,nanmean(i*12:2+i*12)); %??????????
wintertemp_mean_1801_2003 = temp_ha1(:,:,nanmean(i*12:2+i*12));
winterschnee_mean_1801_2003 = anteil_schnee1(:,:,nanmean(i*12:2+i*12));
end disp('Winterniederschlag, Wintertemperatur und Schneeanteil von 1801/02 - 2002/03 berechnet')
%durchschnittlichen Winterniederschlag, Wintertemperatur und Schneeanteil von 1970/71 - 1999/00 berechnen
for j=170:199
winterprecip_mean_1970_2000 = precip_ha1(:,:,nanmean(j*12:2+j*12)); %????????????
wintertemp_mean_1970_2000 = temp_ha1(:,:,nanmean(j*12:2+j*12));
winterschnee_mean_1970_2000 = anteil_schnee1(:,:,nanmean(j*12:2+j*12));
end disp('Winterniederschlag, Wintertemperatur und Schneeanteil von 1970/71 - 1999/00 berechnet')
%Niederschlagsänderung in Prozent im Zeitraum 70/71-99/00 im Vergleich zu 1801/02-2002/03
winterprecip_diff = (1-((winterprecip_mean_1970_2000)./(winterprecip_mean_1801_2003)))*-100; %???????
disp('Niederschlagsänderung in % berechnet')
%Temperaturänderung in K im Zeitraum 70/71-99/00 im Vergleich zu 1801/02-2002/03
wintertemp_diff = (wintertemp_mean_1970_2000)-(wintertemp_mean_1801_2003);
disp('Temperaturänderung in K berechnet')
%Schneeanteilsänderung im Zeitraum 70/71-99/00 im Vergleich zu 1801/02-2002/03
winterschnee_diff = (1-((winterschnee_mean_1970_2000)./(winterschnee_mean_1801_2003)))*-100;
disp('Schneeanteilsänderung in % berechnet')
%{save bachelorarbeit_Klima.mat winterschnee_diff winterschnee_mean_1970_2000 winterschnee_mean_1801_2003...
% wintertemp_diff wintertemp_mean_1970_2000 wintertemp_mean_1801_2003... % winterprecip_diff winterprecip_mean_1970_2000 winterprecip_mean_1801_2003... % lon_ha lat_ha precip_ha1 anteil_schnee1 height_ha1
%--------------------------------------------------------------------------
%Grenzverlauf plotten
% ----Grenz data downloaded from: % http://rimmer.ngdc.noaa.gov/mgg/coast/getcoast.html % load World Data Bank II Data:
intbnd = load('grenzen.txt');
figure('Position',[100100600600]) axes('Position',[0.10.10.80.8]) hold on
h = plot(intbnd(:,1),intbnd(:,2),'k','LineWidth',1.5);
box on;
xlim([419]); ylim([4349]) xlabel('Longitude (deg E)') ylabel('Latitude (deg N)') hold on
h1 = pcolor(lon_ha,lat_ha,wintertemp_mean_1801_2003(:,:,1)');
title('Durchschnittstemperaturen im Winter von 1801/02 - 2002/03') colorbar axisimage grid on
shading interp
Verfasst am: 20.06.2011, 01:04
Titel: Re: Bei "whos" bzw. "who" kommt nix
Hallo Mr.Burns,
Alle Variablen innerhalb einer Funktion bleiben innerhalb der Funktion. Wenn Du die Werte ausserhalb benötigst, musst Du sie als Outputs definieren.
Du könntest auch die fertig berechneten Werte per SAVE in ein MAT-File schreiben und sie beim Wiederholten Durchlauf des Programms wieder einlesen, statt sie zeitrauben neu zu berechnen.
danke für die Antwort. Ja die Lösung ist plausibel. Zumal sich dann auch die Rechenzeit von 3min auf 10s verkürzt. So hab ich es dann mal ausprobiert. Geht bestens.
Eine kleine Zusatzfrage hätte ich dann noch. Ich habe mal das gesamte Skript in das Command Window kopiert und ausführen lassen. Dann waren alle Variablen im Workspace vorhanden. So weit so gut.
Kann es sein, dass Matlab anschließend den "out of memory" Fehler meldet, wenn man danach nochmal das Skript aus dem Editor heraus ausführen lässt? Weils dann halt einfach zu viel Speicher braucht?
Kann es sein, dass Matlab anschließend den "out of memory" Fehler meldet, wenn man danach nochmal das Skript aus dem Editor heraus ausführen lässt? Weils dann halt einfach zu viel Speicher braucht?
Ja. Du hast dann alle Variablen doppelt im Speicher, bräuchtest also doppelt so viel Speicher. Und wenn du den nicht hast, gibts die Fehlermeldung. Abhilfe: im Command Window
eingeben. Damit werden die Variablen gelöscht, und der Speicher sollte wieder zur Verfügung stehen.
Grüße,
Harald
Einstellungen und Berechtigungen
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
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.