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

alle werte der for schleife speichern

 

ms1080
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 02.12.09
Wohnort: ---
Version: R2009
     Beitrag Verfasst am: 12.10.2010, 12:58     Titel: alle werte der for schleife speichern
  Antworten mit Zitat      
hi

ich habe eine for schleife, die mir 100 werte gibt, die will ich alle in einem zeilenvektor speichern

komme da nicht weiter:

Code:

for i=0:99
   
    wertx=wertx+betragx;
    vektorx=(wertx(100,1));
   
end
 


bitte um hilfe
Private Nachricht senden Benutzer-Profile anzeigen


Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 12.10.2010, 13:07     Titel:
  Antworten mit Zitat      
So wie's jetzt ist wird immer der gelcihe Wert gespeichert.
Um die alle zu speichern brauchst du eine Laufvariable.

Ich ändere aber noch i in n um, da i und j in Matlab für Komplexe Zahlen reserviert sind:

Code:

for n=0:99
   
    wertx=wertx+betragx;
    vektorx(n+1)=wertx;
   
end
 


du hast deine Lauvariable i beo 0 starten lassen. Da aber nur positive Integer erlaubt sind muss zu n noch +1 addiert werden:

Gruß Achi
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ms1080
Themenstarter

Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 02.12.09
Wohnort: ---
Version: R2009
     Beitrag Verfasst am: 12.10.2010, 14:40     Titel:
  Antworten mit Zitat      
du bist mein held

eins habe ich jetzt doch noch, habe jetzt ja 100 werte in einem vektor, insgesammt würde ich diese werte aber 100 mal untereinander im vektor brauchen.

mit ner 2. for schleife müsste das doch möglich sein?

mfg nitram
Private Nachricht senden Benutzer-Profile anzeigen
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 12.10.2010, 14:46     Titel:
  Antworten mit Zitat      
Mein du anstatt 1 2 3

1
2
3?

Das geht mit trarnsponieren:
lass dir vektorx so ausgeben: vektorx'
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ms1080
Themenstarter

Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 02.12.09
Wohnort: ---
Version: R2009
     Beitrag Verfasst am: 12.10.2010, 19:59     Titel:
  Antworten mit Zitat      
nee so meinte ich das nicht,
vektorx soll 100 hintereinander in einem vektor entstehen.
läßt sich ändern, ist ein riesiger wust aber muss leider so....

kannst du mir da helfen?
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: 12.10.2010, 22:39     Titel:
  Antworten mit Zitat      
Hallo ms1800,

Matlab wird (wie jede Programmiersprache) sehr langsam, wenn es einen Vektor stetig wachsen läßt. Deshalb ist Pre-Allocation extrem wichtig:
Code:

vektorx = zeros(1, 100);
wertx = rand;  % Sinnlose Test-Daten
betragx = rand;  % Sinnlose Test-Daten  
for n = 1:100
    wertx = wertx + betragx;
    vektorx(n) = wertx;  
end
 


Nun sind die Werte Deines Vektors ja sehr strukturiert, so dass man die Schleife auch leicht weglassen kann:
Code:

wertx = rand;  % Sinnlose Test-Daten
betragx = rand;  % Sinnlose Test-Daten  
vektorx = wertx + (1:100)*betragx;
 

Diesen Vektor nun 100 mal hintereinander zu hängen geht am leichtesten, indem man ihn zunächst in einen Spaltenvektor transponiert und dann per REPMAT eine Matrix daraus macht. Zum Schluss wird dann per RESHAPE wieder ein Zeilen Vektor erstellt:
Code:

M = repmat(vektorx(:), 1, 100);
vektorx100 = reshape(M, 1, []);
 

Allerdings ist es eine einfache Regel, dass man derart redundente Daten meist viel effizienter mit einem nicht-redunanten Daten-Modell lösen kann. Wozu benötigst Du einen Vektor, in dem sich die Zahlen dauernd wiederholen?

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

Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 02.12.09
Wohnort: ---
Version: R2009
     Beitrag Verfasst am: 12.10.2010, 23:27     Titel:
  Antworten mit Zitat      
ja das ist nicht ganz einfach zu erklären:

insgesammt benötige ich eine 10000x3 matrix.
die erste zeile enthält von spalte 1 bis 10000 nur einsen.
die zweite enthält die werte x von x1 bis x100 und dass 100 mal
die dritte enthält dann y werte die auch von y1 bis y100 gehen, aber so, dass ich für die ersten x1 bis x100 werte immer y1 steht, dann kommt y2 in zusammen hang mit x1-x100, enden wird das dann mit y100.

der grund für diese ganze rechnerer ist, das ich damit eine verkippung einer oberflächenmessung errechnen will. die matrix stammt von der ebenengleichung:

z=a+bx+cy

zu jedem z wert sind ein y und ein x wert bekannt. z hat insgesammt 10000 werte (waren schonmal mehr)

z1=a+bx1+cy1
z2=a+bx2+cy1
.
.
.
z100=a+bx100+cy1
z101=a+bx1+cy2
.
.
.
z10000=a+bx100+cy100

Die matrix dient mir zum berechnen der werte a, b und c. daraus kann ich dann die verkippungswinkel berechnen. Berechnungsweg wurde mit mathematikern abgesprochen und gibt mir dann die genauen werte für a,b und c und dann über cosinus die winkel.

so hoffe das konntest du jetzt so verstehen, probiere es gleich mal aus, das mit deinem vorschlag, meide mich nochmal.


schonmal vielen dank an dich
Private Nachricht senden Benutzer-Profile anzeigen
 
ms1080
Themenstarter

Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 02.12.09
Wohnort: ---
Version: R2009
     Beitrag Verfasst am: 13.10.2010, 16:52     Titel:
  Antworten mit Zitat      
habe es jetzt so gelöst, kann jemand bitte nochmal sein okay geben, ob ich so richtig handle.
wie gesagt:
spalte1 soll nur 1 enthalten
spalte2 werte für x von 1-100 und das dann 100 mal
spalte3 werte für y, start bei y1 100mal dann y2 100mal usw.

Code:

spalte1=ones(10000,1);


%Aufteilung von 100 Messwerten auf jeweiliger Achse
%Beginn bei x=0 und y=0

XRange=0.106977;                                                           %Lämge der Messstrecke in x Richtung (in mm)
betragx = XRange/99;                                                       %gleichmäßige Aufteilung der Messpunkte auf x
wertx = 0;

vektorx = wertx + (0:99)*betragx;
vektorx = vektorx';
X = repmat(vektorx(:), 1, 100);
spalte2 = reshape(X, 10000, 1, []);


YRange=0.101432;                                                           %Länge der Messstrecke in y Richtung (in mm)
betragy = YRange/99;                                                       %gleichmäßige Aufteilung der Messpunkte auf y
werty = 0;

vektory = werty + (0:99)*betragy;
Y = repmat(vektory(:), 1, 100);
spalte3 = reshape(Y, 10000, 1, []);


A=[spalte1,spalte2,spalte3];

 


danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 13.10.2010, 17:01     Titel:
  Antworten mit Zitat      
Wenn in A die Werte drin stehen die du haben möchtest stimmt das.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ms1080
Themenstarter

Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 02.12.09
Wohnort: ---
Version: R2009
     Beitrag Verfasst am: 13.10.2010, 17:05     Titel:
  Antworten mit Zitat      
okay danke für das fatback, war mir halt mit den y werten nicht 100%ig im klaren....
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: 13.10.2010, 17:16     Titel:
  Antworten mit Zitat      
Hallo ms1080,

Code:

spalte2 = reshape(X, 10000, 1, []);
spalte3 = reshape(Y, 10000, 1, []);
 

Diese Zeilen würde ich noch ändern. Das [] ist dabei überflüssig:
Code:

spalte2 = reshape(X, 10000, 1);
spalte3 = reshape(Y, 10000, 1);
% Schneller wäre noch:
spalte2 = X(:);
spalte3 = Y(:);
 

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.