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

Ergebnis-Ausgabe einer for-Schleife als Vektor

 

shania
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2015, 16:51     Titel: Ergebnis-Ausgabe einer for-Schleife als Vektor
  Antworten mit Zitat      
Hi,

ich bin neu unter den MATLAB-Usern und auch hier im Forum.

Ich möchte die Werte entf(k) meiner for-Schleife als Einträge in einem Vektor dargestellt bekommen und danach diese Einträge aufsummieren.

Mein Code dazu:

Code:
clear all
load FahrstreckenReRouting.mat

Latitude = (GPS_Protokoll_ReRout.TA_1.Latitude);
Longitude = (GPS_Protokoll_ReRout.TA_1.Longitude);
n = length(Latitude);  

%Berechnung der Distanz zwischen zwei aufeinanderfolgenden Geopunkten
%distance=sqrt(dx*dx+dy*dy)


for l = 1:n-1;
 for k = 2:n;    %beginnenden bei Eintrag 2 wird immer die Entfernung zwischen zwei nacheinanderfolgenden
               %Geopunkten errechnet, Latitude(k) ist der Eintrag des Vekotrs Latitude an der Stelle k
             
   
    %Berechnung von lat=(lat1+lat2)/2*0.01745
    lat = (Latitude(l) + Latitude(k))/2*0.01745;
   
    %Berechnung von dx=111.3*cos(lat)*(lon1-lon2)
    dx = (111.3*cos(lat)).*(Longitude(l) - Longitude(k));
   
    %Berechnung von dy=111,3*(lat1-lat2)
    dy = 111.3*(Latitude(l)-Latitude(k));
   
    %Berechnung der Entfernung zwischen zwei Geokoordinatenpunkten Punkt 1 und Punkt 2
    entf(k) = sqrt(dx^2+ dy^2);
 
   
   
end
end


 

Ich habe bereits versucht mit der Hilfe hier (http://www.gomatlab.de/werte-aus-for-schleife-in-vektor-speichern-t4987.html) weiter zu kommen, doch hat das leider nicht geklappt. Sad

Über eure Hilfe wäre ich dankbar. Question

Grüße
shania Smile

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.11.2015, 17:59     Titel: Re: Ergebnis-Ausgabe einer for-Schleife als Vektor
  Antworten mit Zitat      
Hallo shania,

Zitat:
Ich möchte die Werte entf(k) meiner for-Schleife als Einträge in einem Vektor dargestellt bekommen und danach diese Einträge aufsummieren.

Was bedeutet das genau? Was funktioniert nicht? Bekommst Du eine Fehlermeldung oder weicht das Ergebnis von Deinen Erwartungen ab?

Die Ergebnisse der inneren Schleife werden imm wieder überschrieben. Das ist wahrscheinlich nicht so gewollt, oder?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
shania
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2015, 20:45     Titel:
  Antworten mit Zitat      
Danke für deine schnelle Antwort! Und entschuldige, die Code Umgebung habe ich jetzt erst entdeckt Embarassed

Mir ist bewusst, dass die Einträge immer wieder überschrieben werden. Doch das ist genau das was ich eigentlich nicht möchte. Ich möchte, dass alle in der Schleife berechneten Werte entf(k) in einem Vektor aufgezeichnet werden.
Meine bisherige Lösung funktioniert ohne Fehlermeldung, gibt mir jedoch nur den letzten Wert als Ergebnis aus.



Habe es schon damit versucht, was mir jedoch nur einen Nullvektor ausgibt.


Code:
vektor_entf= zeros(2,n);

for l = 1:n-1;
 for k = 2:n;    %beginnenden bei Eintrag 2 wird immer die Entfernung zwischen zwei nacheinanderfolgenden
               %Geopunkten errechnet, Latitude(k) ist der Eintrag des Vekotrs Latitude an der Stelle k
             
   
    %Berechnung von lat=(lat1+lat2)/2*0.01745
    lat = (Latitude(l) + Latitude(k))/2*0.01745;
   
    %Berechnung von dx=111.3*cos(lat)*(lon1-lon2)
    dx = (111.3*cos(lat)).*(Longitude(l) - Longitude(k));
   
    %Berechnung von dy=111,3*(lat1-lat2)
    dy = 111.3*(Latitude(l)-Latitude(k));
   
    %Berechnung der Entfernung zwischen zwei Geokoordinatenpunkten Punkt 1 und Punkt 2
   
    vektor_entf(k)= sqrt(dx^2+ dy^2)
   
end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2015, 10:15     Titel:
  Antworten mit Zitat      
Hallo shania,

Wie wäre es, die Daten dann nicht in einem Vektor, sondern in einer Matrix zu sammeln.
Code:
vektor_entf= zeros(n, n-1);

for l = 1:n-1;
  for k = 2:n;
    ...
    vektor_entf(k, l)= sqrt(dx^2+ dy^2)
  end
end

Hilft das bereits?

Gruß, Jan

Zuletzt bearbeitet von Jan S am 03.11.2015, 14:39, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
shania
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2015, 14:34     Titel:
  Antworten mit Zitat      
Leider nein,
auch hier wird die Matrix nur mit Nullen aufgefüllt und nicht mit den Ergebnissen der Schleife.
Ich hab mal ein screenshot, der die Ausgabe anzeigt, angehängt.

Ich bin ratlos Question

Gruß,
Janina

Screenshot 2015-11-03 13.31.28.png
 Beschreibung:

Download
 Dateiname:  Screenshot 2015-11-03 13.31.28.png
 Dateigröße:  175.21 KB
 Heruntergeladen:  320 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2015, 14:48     Titel:
  Antworten mit Zitat      
Hallo shania,

Der Screenshot sagt noch nicht viel. In der ersten Iteration enthjält die Matrix natürlich nur Nullen, da die Werte ja erst Element für Element aufgefüllt werden.

Verwende doch mal den Debugger und gehe Zeile für Zeile durch den Code. Schaue Dir die Werte von dx und dy an. Wenn Du das leidige clear all weglässt, wird der Debugger auch nicht mehr unnötig behindert, denn dieses brutale Löschen aller aktuellen Werte löscht leider auch die Breakpoints des Debuggers.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
shania
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2015, 16:58     Titel:
  Antworten mit Zitat      
Ja das war auch gar nicht das Problem, hab es behoben. Jetzt funktioniert alles wie ich es möchte Wink
Entschuldige wenn ich ein bisschen undeutlich war und Danke für deine Hilfe. Nachfolgend der funktionierende Code.

Code:


Latitude = (GPS_Protokoll_ReRout.TA_1.Latitude);
Longitude = (GPS_Protokoll_ReRout.TA_1.Longitude);
n = length(Latitude);  

%Berechnung der Distanz zwischen zwei aufeinanderfolgenden Geopunkten
%distance=sqrt(dx*dx+dy*dy)
index=1;
vektor_entf= zeros(n-1, 1);

for l = 1:n-1;
    %beginnenden bei Eintrag 2 wird immer die Entfernung zwischen zwei nacheinanderfolgenden
               %Geopunkten errechnet, Latitude(k) ist der Eintrag des Vekotrs Latitude an der Stelle k
             
   
    %Berechnung von lat=(lat1+lat2)/2*0.01745
    lat = (Latitude(l) + Latitude(l+1))/2*0.01745;
   
    %Berechnung von dx=111.3*cos(lat)*(lon1-lon2)
    dx = (111.3*cos(lat)).*(Longitude(l) - Longitude(l+1));
   
    %Berechnung von dy=111,3*(lat1-lat2)
    dy = 111.3*(Latitude(l)-Latitude(l+1));
   
    %Berechnung der Entfernung zwischen zwei Geokoordinatenpunkten Punkt 1 und Punkt 2
    %entf(k) = sqrt(dx^2+ dy^2);
 
    entf(l)= sqrt(dx^2+ dy^2); %Matrix versuch %vektor_entf(k)= sqrt(dx^2+ dy^2), Vektor versuch
   
    vektor_entf(index) = entf(l);
    index =index+1;

end



entf_gesamt = sum (vektor_entf , 'native')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.11.2015, 02:39     Titel:
  Antworten mit Zitat      
Hallo shania,

Gerne!

Und nur noch als Tipp, wie es auch ohne Schleife ginge - weniger Code == weniger Chancen sich zu vertippen:
Code:
Latitude = (GPS_Protokoll_ReRout.TA_1.Latitude);
Longitude = (GPS_Protokoll_ReRout.TA_1.Longitude);

lat = (Latitude(1:n-1) + Latitude(2:2)) / 2 * 0.01745;
dx = -111.3 * cos(lat) .* diff(Longitude);
dy = -111.3 * diff(Latitude);
entf = sqrt(dx.^2 + dy.^2);

entf_gesamt = sum(vektor_entf, 1)

Es lohnt sich, bei sum immer die Dimension anzugeben, wenn man mit Matrizen arbeitet. Denn wenn zufällig mal eine [1 x N] Matrix als Input genommen wird, wählt sum die "first non-singelton dimension", summiert also über die zweite Dimension. In Deinem Fall würde dies auftreten, wenn Latitude nur zwei Elemente hätte - möglich ist es also.

Gruß, Jan
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.