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

matrix

 

gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 11:14     Titel: matrix
  Antworten mit Zitat      
wie kann ich in einer matrix vier zeilen auf einmal ansprechen?
z.b. habe ich mit einer for-schleife
Code:

aber so spreche ich nur die vierte zeile, ich brauche aber die ersten 4 zeilen


Harald
Forum-Meister

Forum-Meister


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

Code:
M(i-3:i, :)

spricht die Zeilen i-3 bis i an.

Grüße,
Harald

PS: es sieht hier komisch aus, bis 151 zu gehen. Dir sollte klar sein, dass i als letzten Wert 148 annimmt.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.11.2009, 11:20     Titel:
  Antworten mit Zitat      
Hallo,

so
Code:

A= round(rand(151,5)*100);
A(1:4,:)

for k=4:4:151
  A( k-4+1:k, :)
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 11:28     Titel:
  Antworten mit Zitat      
Hallo denny,
kannst du mir bitte diese zeile erklären?
Code:

A= round(rand(151,5)*100);
 
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.11.2009, 11:39     Titel:
  Antworten mit Zitat      
Diese Zeile generiert mir einfach eine Matrix mit Zufallswerten.
Da rand die Werte zwischen 0 und 1 generiert, multipliziere ich mit 100
und runde diese (mit round), um Werte Zwischen 0...100 zu bekommen.

Das ist nur dafür da, um lauffähigen Beispiel zu bekommen.
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 11:57     Titel:
  Antworten mit Zitat      
ok, das hab ich soweit verstanden, danke schön

ich will jetzt aber vier zeilen auf einmal und aller vier mal, also zeile
1-4, 9-12, 17-20, usw.
Code:

for i=4:4:length(yi)
    if zahl < 0
        A(i,:) = circshift(I_Interp1(i,:),[0,round(zahl/0.05)]); % (-)verschiebt die Zeilen nach links
    else
        A(i,:) = circshift(I_Interp1(i,:),[0,round(zahl/0.05)]); % 0.05 Gradschritte
    end
end
 


ich kriege es nicht hin, das in diese schleife einzubauen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.11.2009, 12:07     Titel:
  Antworten mit Zitat      
Verstehe ich nicht, wo hackst denn genau? Oder was willst schlussendlich erreichen?

wie groß ist A? Wie Groß I_Interp1?

Code:

for i=4:4:length(yi)
   A(i-3:i,:) = circshift(I_Interp1(i-3:i,:),[0,round(zahl/0.05)]);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 12:25     Titel:
  Antworten mit Zitat      
I_Interp1 ist 201 x 401 groß. ich will jetzt vier zeilen aufeinmal haben aber nicht nacheinander sondern in vier zeilen abstand. ich habe noch eine schleife die genau so aussieht. ursprünglich wollte ich gerade und ungerade zeilen haben, deswegen auch zwei schleifen. jetzt will ich mit einer schleife die zeilen
1-4, 9-12, 17-20 usw. und mit der anderen schleife die zeilen 5-8, 13-19, 21-24, usw
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.11.2009, 14:05     Titel:
  Antworten mit Zitat      
Hallo dann musst du Schrittweite erhöhen und Startpunkt entsprechend definieren.

Code:

% Für Schritte 1:4, 9:12,...
for i=4:8:length(yi)
   A(i-3:i,:) = circshift(I_Interp1(i-3:i,:),[0,round(zahl/0.05)]);
end

% Für Schritte 5:8, 13:16,...
for i=8:8:length(yi)
   A(i-3:i,:) = circshift(I_Interp1(i-3:i,:),[0,round(zahl/0.05)]);
end
 
 
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 14:17     Titel:
  Antworten mit Zitat      
hey, suppi, das hat geklappt, vielen vielen dank Very Happy

hab mir schon so was ähnliches gedacht...aber aus mir wird nie ein programierer Crying or Very sad
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 14:34     Titel:
  Antworten mit Zitat      
zu früh gefreut... Embarassed

die matrix A muss ganau so groß sein wie I_Interp1, also auch 201 x 401, sie ist aber 200 x 401????

kann man das irgedwie beheben???
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.11.2009, 14:36     Titel:
  Antworten mit Zitat      
Du meinst es kommt eine Zeile weniger, als du erwartest?
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 14:41     Titel:
  Antworten mit Zitat      
ja, genau. die matrix muss genau die selbe rauskommen, nur ein wenig verschoben. scheint erstmal nicht so schlimm zu sein, aber da ich mit messwerten arbeite, kann ich nicht einfach eine zeile "weglassen"
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.11.2009, 15:01     Titel:
  Antworten mit Zitat      
Falls ich keinen Fehler gemacht habe, dann sollte durch IF-Abfrage das abgefangen sein
Code:

% Für Schritte 1:4, 9:12,...
for i=1:8:length(yi)
    if i+3 >= length(yi)
   A(i:length(yi),:) = circshift(I_Interp1(i:length(yi),:),[0,round(zahl/0.05)]);
   else
    A(i:i+3,:) = circshift(I_Interp1(i:i+3,:),[0,round(zahl/0.05)]);
   end
end

% Für Schritte 5:8, 13:16,...
for i=5:8:length(yi)
    if i+3 >= length(yi)
   A(i:length(yi),:) = circshift(I_Interp1(i:length(yi),:),[0,round(zahl/0.05)]);
   else
    A(i:i+3,:) = circshift(I_Interp1(i:i+3,:),[0,round(zahl/0.05)]);
   end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2009, 15:10     Titel:
  Antworten mit Zitat      
ich probiere das am montag aus, mache jetzt feierabend
melde mich dann fals es probleme gibt...wird bestimmt noch was auftauchen Confused

vielen dank, hast mir auf jeden fall sehr geholfen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.