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

Benötige Hilfe für meine Abschlussarbeit!!! Indexierung???

 

RigoIce
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 00:35     Titel: Benötige Hilfe für meine Abschlussarbeit!!! Indexierung???
  Antworten mit Zitat      
Hallo,

ich benötige dringend Hilfe für meine Abschlussarbeit. Ich habe ein Programm mit zwei "for" Schleifen mit den Variablen i und j.


Code:
% %Schleife rechts = 1, links = 2
drehrichtung= 1;

% array aufbuen
steps = 5;
swL= 35;
swR= 75;
Werte50=zeros(4,swL*swR/steps^2);
Werte10=zeros(4,swR*swL/steps^2);

for i=0:steps:swL
    for j=0:steps:swR
     
% Matrix um den 0 Punkt verschoben
if(drehrichtung == 1)
    if(i<=swL)
        Mlinksverschoben= circshift(Mlinks,[0 i]);
       
    end

        Mrechtsverschoben = circshift(verschiebung,[0 j]);
else

        Mlinksverschoben = circshift(Mlinks,[0 -j]);

if(i<=swR)

Mrechtsverschoben = circshift(verschiebung,[0 -i]);    

end
end

% Matrix addieren
MVerschAdd= ((Mlinksverschoben./r^2)+(Mrechtsverschoben./r^2));
MVerschAddN= (MVerschAdd.*r^2);
 

---------------------------------------------------------------------------------

Jetzt möchte ich alle Werte i und j in ein "Index" schreiben.
In etwa so:

Code:
index= round(((i5+j*swL)/steps)+1)


Die +1 benötige ich damit ich keinen (
Attempted to access Werte50(1,0); index must be a positive integer or
logical) Fehler erhalte.

Danach sollen für die Werte aus der Schleife der Mittelwert/die Standardabweichung ect. berechnet werden.

Dieses habe ich so gelöst:



Code:
Werte50(1,index)=mean(mean(MVerschAddN);
Werte50(2,index)=std(std(MVerschAddN));
Werte50(3,index)=sum(sum(MVerschAddN));
Werte50(4,index)=max(max(MVerschAddN));

Werte10(1,index)=mean(mean(MVerschAddN));
Werte10(2,index)=std(std(MVerschAddN));
Werte10(3,index)=sum(sum(MVerschAddN));
Werte10(4,index)=max(max(MVerschAddN));


Nur erhalte ich für Werte50 und Werte10 nicht die Anzahl an Werten aus der Schleife (35X75).

Meine Ausgabe hat auch immer wieder 0er Einträge. Hier ein Auszug.


1 2 3 4 5 6 7 8 9 usw.
WERT WERT 0 0 0 0 0 WERT WERT
WERT WERT 0 0 0 0 0 WERT WERT
WERT WERT 0 0 0 0 0 WERT WERT
WERT WERT 0 0 0 0 0 WERT WERT

Die Werte10 & Werte50 haben eine Größe von 4*107 double.

Es werden einfach nicht alle Werte i und j aus der Schleife in die Werte10 und Wert50 geschrieben. Ich vermute das ich bei dem Teil mit dem Index Fehler mache. Wer kann mir helfen???

Wäre für jeden Tipp dankbar!

Beste Grüße

Alex
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2014, 09:58     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es anders angehen. Statt

Code:
for i=0:steps:swL
% Verwendung von i
end

würde ich verwenden
Code:
Lsteps = 0:steps:swL;
for i = 1:numel(Lsteps)
% Verwendung von Lsteps(i)
end

Das sollte es deutlich einfacher machen, den Index für Werte10 und Werte50 zu finden.

Übrigens: wenn M eine Matrix ist, dann kannst du statt
Code:
auch
Code:
schreiben, was schneller und eleganter ist.

Achtung:
Code:
und
Code:
sind nicht (!!) das gleiche. Wenn du die Standardabweichungen aller Elemente der Matrix haben willst, musst du das letztere nehmen!

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
RigoIce
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 12:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine schnelle Antwort. Ich bekomme das mit der Indexierung leider nicht hin. Kannst du mir genau schreiben wie ich am Ende ein Array mit meinen 4 berechneten Werte für 10 & 50 für jeden Schleifendurchlauf (insgesamt 2625 Durchgänge) erhalte?

Ich habe den Code jetzt so aufgebaut:


Code:
% array aufbauen
steps = 5;
swL= 35;
swR= 75;
Werte50=zeros(4,swL*swR/steps^2);
Werte10=zeros(4,swR*swL/steps^2);

% das letzte
Lsteps= 0:steps:swL;
Rsteps= 0:steps:swR;
for i=1:numel(Lsteps)
    for j=1:numel(Rsteps)
 

if(drehrichtung == 1)
    if(i<=swL)
      Minksverschoben= circshift(Mlinks,[0 i]);
       
    end

Mrechtsverschoben = circshift(verschiebung,[0 j]);

else

Mlinksverschoben = circshift(Mlinks,[0 -j]);

if(i<=swR)
Mrechtsverschoben = circshift(verschiebung,[0 -i]);
   
end
end % if zu

% M addieren
MVerschAdd= ((Mlinksverschoben./r^2)+(Mechtsverschoben./r^2));
MVerschAddN= (MVerschAdd.*r^2);

% %M um berechnete Pixel verschieben
shiftM= circshift(MVerschAddN,[pixV pixH]);

% %Verschobene Matrix mit vorher erstellten Matrix multiplizieren
kompM1New= shiftM.*MB;
kompM2New= shiftM.*MB2;

% %MATRIX in Array umwandeln  und alle Werte mit 0 herausschmeißen
kompM1New(: );
kompM1Newohnenull=kompM1New(kompM1New~=0); [b]% Korrekt mit ~=0?

kompM2New(: );
kompM2Newohnenull=kompM2New(kompM2New~=0);[b]% Korrekt mit ~=0?

% --------------------------------------------------------------------------

%  index= round(((i/5+j/5*swL)/steps)+1)
n=numel(Lsteps);
m=numel(Rsteps);
index= round(i/numel(Lsteps)+i/numel(Rsteps))+1;

--------------------------------------------------------------------------

Werte50(1,index)=mean(komplvk1Newohnenull);
Werte50(2,index)=std(komplvk1Newohnenull);
Werte50(3,index)=sum(komplvk1Newohnenull);
Werte50(4,index)=max(komplvk1Newohnenull);
%
Werte10(1,index)=mean(komplvk2Newohnenull);
Werte10(2,index)=std(komplvk2Newohnenull);
Werte10(3,index)=sum(komplvk2Newohnenull);
Werte10(4,index)=max(komplvk2Newohnenull);

% Werte50(1,index)=mean(komplvk1Newohnenull(: ));
% Werte50(2,index)=std(komplvk1Newohnenull(: ));
% Werte50(3,index)=sum(komplvk1Newohnenull(: ));
% Werte50(4,index)=max(komplvk1Newohnenull(: ));

% Werte10(1,index)=mean(komplvk2Newohnenull(: ));
% Werte10(2,index)=std(komplvk2Newohnenull(: ));
% Werte10(3,index)=sum(komplvk2Newohnenull(: ));
% Werte10(4,index)=max(komplvk2Newohnenull(: ));

 


Vielen Dank schonmal für deine Hilfe!!!!!

Gruß Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2014, 18:15     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit:
Code:
Werte50=zeros(4,numel(Lsteps), numel(Rsteps));
und dann in der Schleife mit
Code:
Werte50(1, i, j)
etc. arbeiten. Danach kannst du das dann mit reshape in einer andere Form bringen.

zweite Möglichkeit:
index auf 1 initialisieren und am Ende der Iteration 1 addieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
RigoIce
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 23:30     Titel:
  Antworten mit Zitat      
Harald du bist der Beste!!!!

Vielen Danke!!!!!

Nach mehreren Stunden, läuft es jetzt so wie ich es mir vorgestellt habe.

Beste Grüße

Alex
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.