Verfasst am: 10.11.2019, 04:08
Titel: for-Schleife bei Fehler weiterlaufen lassen
Hey Leute,
Ich bin normalerweise jemand, der selbst so lange rumtüftelt bis es funzt, aber hier geht es um die Bachelor Thesis, daher ist Zeit rar...
Das Ziel ist folgendes:
Ich will eine Variable, dessen Werte in einer Matrix 495x1964 (Höhe x Zeit) so umwandeln, dass die Werte nicht mehr von der Höhe, sondern von einem anderen Höhenvektor abhängig sind. Dieser "Distanzvektor" ("DIST" - siehe im Code) ist von der Zeit abhängig. Den konnte ich auch erzeugen...
Jedoch, wenn ich die neue WerteMatrix erzeugen möchte, jetzt nicht mehr Höhe x Zeit, sondern DIST x Zeit, dann kommt ein Fehler, sobald er die zu findende Distanz nicht mehr in der Zeile findet und bricht den Rest der for-Schleife ab. Bekomme dann diese Fehlermeldung:
"Unable to perform assignment because the size of the left side
is 1-by-1 and the size of the right side is 0-by-1."
Meine Idee wäre nun hier mit einem if zu arbeiten, jedoch weiß ich nicht wie das gehen soll, da es ja hier nicht um die Werte geht, die nicht passen, sondern mit der Tatsache, dass er die Operation dann nicht durchführen kann...
Danke schonmal vorab, falls jemand helfen kann, oder eine Möglichkeit findet das ganze zu umgehen.
Code:
time = ncread(****); % input time data
height = ncread(****); % input height data
lwf_kg = ncread(*****); % input lwf data
cloud_base_height = ncread*****); %input cloud_base_height data
a(1:80,1) = round(height(1:80)-height(73)); % creates vector with one value only
f = find(cloud_base_height == -999); % finds corrupted data
time(f) = []; %shortens the time-vector to only not-corrupted data
cloud_base_height(f) = []; %shortens the cbh-vector to only not-corrupted data
lwf_kg(:,f) = []; % shortens the lwf-matrix to only not-corrupted data
lwf = 1000*lwf_kg; %Scaling to g*m(^-2)*s^(-1)
t=length(time);
heightall = zeros(80,t);
for i=1:t
heightall(1:80,i)=height(1:80,1);
end
%_________________________________________________________________________________
%Meine Idee, um das zu automatisieren, funktioniert nicht, weil er bei a(61) ankommend die iterationen nicht weiterführt.
for j=1:1964 i=1:80
g(i,j) = find(DIST(:,j) == a(81-i));
end
was den Titel angeht, würde ich "continue" oder try/catch vorschlagen. Allerdings verstehe ich nicht recht, wie der Beitrag an sich zum Titel passt.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.