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

schleife und vektoren

 

Waldemar
Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 26.10.2011, 16:53     Titel: schleife und vektoren
  Antworten mit Zitat      
hallo zusammen,


ich hätte kurz eine frage da mir noch bei weiten der durchblick fehlt:

ich möchte eine vektor erstellen, der einem anderen davor gebildeten vektor entspricht!der unterschied von beiden soll sein, dass dem zweiten stets also je schleifendurchlauf das letzte element des ersten vektors fehlt!

mal ausgeschrieben:

1.schleifendurchlauf: 1.vektor [23] _____________2.vektor[]
2.schleifendurchlauf: 1.vektor [23, 50]__________2.vektor[23]
3.schleifendurchlauf: 1.vektor [23, 50, 8]________2.vektor[23, 50]
4.schleifendurchlauf: 1.vektor [23, 50, 8, 41]_____2.vektor[23, 50, 8]

usw.

mein lsg.versuch ist:

Code:
list_all = dir;
list_all=list_all(~ismember({list_all.name},{'.','..'}));
dir_all={list_all.name};
length_list_all = length(dir_all);

y_position_all = zeros(length_list_all, 1); %erster vektor



for i=1:length_list_all

     dir_all_i = dir_all{i};
   
     index_y = strfind(dir_all_i, '_y');
     
     y_position_all(i) = sscanf(dir_all_i(index_y + 2), '%d', 1);
     
     
     if i==1
         
         y_position_versetzt(i,1)=0; %zweiter vektor
         
     else i>=2;
         
         y_position_versetzt(i,1)=y_position_all(i-1);
         
     end
     
end


 



das klappt auch so wie es mir vorstelle!


aber müsste es nicht noch eine lsg. ohne if-else-end geben?
also ein zweiter vektor der einfach vom ersten vektor immer die letzte zelle/eintrag abzieht?

z.b. so ewtas:

Code:


.
.
.

length_list_all = length(dir_all);


y_position_all = zeros(length_list_all, 1);

y_position_versetzt = zeros(length_list_all, 1);

for i=1:length_list_all

   
     
     dir_all_i = dir_all{i};
     
     index_y = strfind(dir_all_i, '_y');
     y_position_all(i) = sscanf(dir_all_i(index_y + 2), '%d', 1);
     
     
   
   
    %y_position_versetzt(i)=y_position_all(:)-y_position_all(i);
    %alle werte werden mit dem letzten
    %subtrahiert!führt auf falsche ergebnisse.also blödsinn!!!
   
    %oder:
   
    %y_position_versetzt(i)=y_position_all([1:i-1],1);
   
   
   

     
     
end


 



irgendwie habe ich in diesem bereich noch eine große lücke!!

vielleicht kann mir einer helfen.

mfg,

waldemar
_________________

Im "ich brauch Hilfe"-Status
Private Nachricht senden Benutzer-Profile anzeigen


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 26.10.2011, 18:00     Titel:
  Antworten mit Zitat      
Hallo Waldemar,
Code:

a = [1, 2, 3, 4]
b = a(1:end-1)
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 27.10.2011, 11:05     Titel:
  Antworten mit Zitat      
hallo zusammen,
hallo peter,

hab versucht auf deinen rat einzugehen:

raus gekommen ist:
Code:
.
.
.
length_list_all = length(dir_all);
y_position_all = zeros(length_list_all, 1);
y_position_versetzt = zeros(length_list_all, 1);

for i=1:length_list_all
     dir_all_i = dir_all{i};
     index_y = strfind(dir_all_i, '_y');
     y_position_all(i) = sscanf(dir_all_i(index_y + 2), '%d', 1);
     y_position_versetzt(i)=y_position_all(1:end-1);
end


allerdings gibt es einen fehler und zwar:

In an assignment A(I) = B, the number of elements in B and
I must be the same.


dazu glaube ich ,dass ich mein problem nicht ganz verständlich dargestellt habe. ich möchte, dass der vektor
Code:
y_position_versetzt

die y_position beim aktuellen schleifendurchlauf nicht zu geordnet bekommt sondern sich diesen ein schleife darauf aus
Code:
y_position_all
holt!

mein beispiel war ja:

1.schleifendurchlauf: 1.vektor [23] _____________2.vektor[]
2.schleifendurchlauf: 1.vektor [23, 50]__________2.vektor[23]
3.schleifendurchlauf: 1.vektor [23, 50, 8]________2.vektor[23, 50]
4.schleifendurchlauf: 1.vektor [23, 50, 8, 41]_____2.vektor[23, 50, 8]

deswegen glaube ich, dass
Code:
b=a(1:end-1)
nicht richtig ist!
weil nur der letzte eintrag abgeschnitten wird.

vielleicht hat ja jemand eine idee! (mit einer schleife gehts (siehe erster beitrag von mir), wundere mich nur warum ich es nicht ohne schleife nicht hingekriegt habe!hab nämlich ziemlich lange in diese richtung probiert!muss doch simpler sein, oder?

am ende noch eine frage:
wenn ich vektoren in einer schleife in kombination mit einer bedingten anweisung entstehen lasse brauche ich keinen vorab definierten vektor aus lauter nullen (siehe y_position_versetzt(i)):

Code:
length_list_all = length(dir_all);
y_position_all = zeros(length_list_all, 1);

for i=1:length_list_all
     dir_all_i = dir_all{i};
     index_y = strfind(dir_all_i, '_y');
     y_position_all(i) = sscanf(dir_all_i(index_y + 2), '%d', 1);
     
     if i==1    
         y_position_versetzt(i,1)=0;
     else i>=2;
         y_position_versetzt(i,1)=y_position_all(i-1);
     end
end


für y_position_all(i) muss ich damit mein skript durchläuft einen vektor mit lauter nullen erstellen!
worauf basiert der unterschied?

mfg,

waldemar
_________________

Im "ich brauch Hilfe"-Status
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: 27.10.2011, 11:23     Titel:
  Antworten mit Zitat      
Hallo Waldemar,

Ich gebe zu, dass ich immer weniger verstehe, wo das Problem liegt.

Bitte poste neben der Fehlermeldung noch die Zeile, in der der Fehler auftritt. Ich nehme an, es ist diese:
Code:
y_position_versetzt(i)=y_position_all(1:end-1);

Links steh ein Skalar, also ein [1x1] Array, rechts steht ein Vektor, der die Längen 0,1,2,... haben kann. Das geht nicht.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 28.10.2011, 11:48     Titel:
  Antworten mit Zitat      
Hallo Waldemar,
wie Jan schon sagt, ist dein Code so nicht lauffähig, weil die Dimensionen nicht stimmen.
Folgende Möglichkeiten hast du:
Code:
...
for i=1:length_list_all
     ...
     y_position_versetzt=y_position_all(1:end-1);
     % oder als Cell- Array:
     y_position_versetzt{1}=y_position_all(1:end-1);
end

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Waldemar
Themenstarter

Forum-Century

Forum-Century


Beiträge: 100
Anmeldedatum: 14.10.11
Wohnort: Neuss
Version: R2011b
     Beitrag Verfasst am: 03.11.2011, 11:42     Titel:
  Antworten mit Zitat      
hallo zusammen,
hallo peter,
hallo jan,

habe es noch zig mal probiert aber da ja die "schleifenlösung":

Code:

   for i=1:length_list_all

   
     
     dir_all_i = dir_all{i};
     length_dir_all_i=length(dir_all_i);
     
     z_position=dir_all_i(20:length_dir_all_i - 4);
     z_position_num=str2double(z_position);
     z_position_all(i)=z_position_num;
 
     
     if i==1
         
       
         z_position_versetzt(i,1)=0;
         
     else i>=2;
         
         z_position_versetzt(i,1)=z_position_all(i-1);
         
     end

        if ~ismember(z_position_num, z_position_versetzt(:))
         
           z_position_verschieden(i,1)=z_position_num;
         
        else
         
        end

             
z_position_verschieden=z_position_verschieden(z_position_verschieden~=0);
     
     
     
      z_positionen=sort(z_positionen_verschieden);


   end
 


ja wie gewünscht klappt, habe ich irgendwann aufgegeben.
eure tipps waren trotzdem sehr hilfreich.

vielen dank.

mfg,

waldemar
_________________

Im "ich brauch Hilfe"-Status
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.