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

Schleifenproblem

 

andi_1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2010, 16:55     Titel: Schleifenproblem
  Antworten mit Zitat      
Hallo Leute,

In folgenden Code habe ich eine For-schleife. Die Schleife durchläuft das Line-array C, das eine bestimmte Anzahl an Tabellen enthält. Es wird also für jeden Schleifendurchlauf eine der Tabellen aus C bearbeitet. Für jeden Schleifendurchlauf soll ein W1 (3 spalten 1Zeile oder W1=0) in eine Tabelle W geschrieben werden. So dass ich für jeden schleifendurchlauf eine Zeile mit den entsprechenden werten in W habe. Wie kann ich das realisieren? bzw was habe ich hier falsch gemacht.

P.S. der Code funktioniert beim Einzeldurchlauf der Tabellen aus C, ist also richtig. Ich bekomme das nur nicht in die for-Schleife.



Code:

sw     = 1                       % schwelle (lage)
sw1    = 1                       % schwelle (höhe)
sw2    = 2                       % offset über mittl. höhe
radius = 1.5                     % radius um mittelpunkt
W = zeros(50, 3);

for o = 1:10
 
    P = (C{1,o});                % C in einzelne tabelle umwandeln

    [m1,n1]=size(P)
    if m1 <= 2                   % wenn C weniger als 2 zeilen hat nicht erfolgreich
        W1=0;
    else
   
    Q = P(1:3,1:3)            % erste 3 werte (maxima) in tabelle schreiben
    Q1(:,1)=Q(:,1)            % höhen abschneiden
    Q1(:,2)=Q(:,2)
    R = pdist(Q1,'euclid')     % abstandsmatrix bestimmen aus lage
    %index = find(R(1,1) < 1);
         
% 3 minima sollen lagetechnisch innerhalb einer schwelle liegen

    if (R(1,1)<sw),              % alle 3 abstände in der abstandsmatrix auf schwelle untersuchen
        Q3(1,:) = Q(1,1:3)       % wenn unterhalb der schwelle werte zwischen denen sich die abstände befinden in Q3 schreiben
        Q3(2,:) = Q(2,1:3),
    end
    if (R(1,2)<sw),
        Q3(1,:) = Q(1,1:3)
        Q3(3,:) = Q(3,1:3),
    end  
    if (R(1,3)<sw)
        Q3(2,:) = Q(2,1:3)
        Q3(3,:) = Q(3,1:3),
    end
   if exist('Q3')
    Q2(:,1)=Q3(:,3)               % Höhen aus Q3 in eigene tabelle (Q2) schreiben
    R1 = pdist(Q2,'euclid')      % abstandsmatrix aus höhen bestimmen
   
 % 3 minima die lagetechnisch innerhalb einer schwelle liegen sollen auch höhentechnisch innerhalb einer schwelle liegen  
 
     if (R1(1,1)<sw1),            % alle 3 abstände in der abstandsmatrix auf schwelle untersuchen
        Q4(1,:) = Q3(1,1:3)       % wenn unterhalb der schwelle werte zwischen denen sich die abstände befinden in Q4 schreiben
        Q4(2,:) = Q3(2,1:3),
    end
    if (R1(1,2)<sw1),
        Q4(1,:) = Q3(1,1:3)
        Q4(3,:) = Q3(3,1:3),
    end  
    if (R1(1,3)<sw1),
        Q4(2,:) = Q3(2,1:3)
        Q4(3,:) = Q3(3,1:3),      % Q4 enthält punkte, die lagetechnisch und höhentechnisch innerhalb der beiden schwellen sw und sw1 liegen
    end
  if exist('Q4')
    B = sum(Q4) ./sum(Q4~=0)
        % mittel aus Q4 bestimmen. dabei zeilen in denen zwangsläufig 0 steht, ausser acht lassen

abstaende=sqrt((P(:,1)-B(1)).^2+(P(:,2)-B(2)).^2)
P3=P(abstaende<radius,:)
 
P4=P3(:,3)> B(1,3)+sw2
anzEinser= sum(P4==1)

x2(:,1)=B(:,1) %alle punkte plotten
y2(:,1)=B(:,2)

if(anzEinser >= 1)          % anzahl der punkte höher als sw2 im kreis mit dem radius um B (28.7.)
   W1 = B;
 
  else
      W1=0
  end
   else
       W1=0
   end
    end
   
W(k, :) = W1;
end
 
Private Nachricht senden Benutzer-Profile anzeigen


andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 14:32     Titel:
  Antworten mit Zitat      
Hallo Leute,

im Prinzip geht es nur darum, dass ich in einer For-Schleife verschiedene W1 rausbekomme und diese fortlaufend in eine Tabelle schreiben möchte.

kann mir denn keiner helfen???

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 15:11     Titel:
  Antworten mit Zitat      
wie lautet denn die Fehlermeldung?


Code:


W = zeros(50, 3);
W1=0

W(k, :) = W1;
 


das sieht schon komisch aus. Und wo ist überhaupt die Schleife mit dem Zählindex k?
Private Nachricht senden Benutzer-Profile anzeigen
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 15:50     Titel:
  Antworten mit Zitat      
Hallo Thomas,

habs jetzt in folgender Form hinbekommen:

Code:

k = 0;
for o = 1:10
 
    P = (C{1,o})            
    k = k + 1
    [m1,n1]=size(P)
    if m1 <= 2    
        W1=0;
    else
        W1=[1,2,3];
    end
    W(k, :) = W1;
    end
 


gruß und danke für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2010, 16:19     Titel:
  Antworten mit Zitat      
Hallo nochmal,

ein kleines Problem hab ich noch. Gewisse Werte, die ich bei einem Schleifendurchlauf verwende, werden beim nächsten Schleifendurchlauf weiterverwendet. Das vermute ich zumindest, da ich fehlerhafte Ergebnisse bekommen.
Wie kann ich realisieren, dass Variablen nach jeden Schleifendurchlauf wieder zurückgesetzt werden?
Gruß
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: 01.09.2010, 13:35     Titel:
  Antworten mit Zitat      
Hallo Andi,

statt zu "vermuten", was das Problem ist, kannst Du einfach den Debugger verwenden und das Programm Zeile für Zeile abarbeiten lassen. Setze einfach ein paar Breakpoints (rote Punkte links neben dem Text) und starte das Programm. Dann kannst Du ja genau anschauen, welche Variable welchen Wert hat und das Problem finden.

andi_1 hat Folgendes geschrieben:
Wie kann ich realisieren, dass Variablen nach jeden Schleifendurchlauf wieder zurückgesetzt werden?

Nun, indem Du die Variablen nach jedem Schleifendurchlauf zurücksetzt, oder?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 14:08     Titel:
  Antworten mit Zitat      
Hallo Jan,

wenn ich wüsste wie man Variablen nach einem Schleifendurchlauf wieder zurücksetzt, würde ich hier nicht danach fragen...
Kannst du mir bitte sagen, wie ich das realisieren kann?
Gruß
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.09.2010, 22:38     Titel:
  Antworten mit Zitat      
Hallo Andi_1,

mir wird das Problem nicht klar.
Eine Variable kannst Du einfach am Anfang der Schleife auf den Wert setzen, den sie erhalten soll.

Es wäre hilfreich, wenn Du anhand des Programms zeigst, was Du genau meinst. Beschreibe dann das Ergebnis und Deine Erwartungen.

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.