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

Vektoreinträge vervieltältigen und in neuen Vektor schreib

 

Julia1991
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 19.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2013, 13:16     Titel: Vektoreinträge vervieltältigen und in neuen Vektor schreib
  Antworten mit Zitat      
Hallo liebes Matlab Forum,

Ich bin gerade dabei ein paar Übungen zu Matlab zu machen, aber habe leider ein Problem und hoffe ihr könnt mir da weiterhelfen. Smile

Ich habe einen Spaltenvektor mit 20 Einträgen und 2 weitere mit jeweils 60 Einträgen. Ich möchte Sie miteinander zu einer Matrix verbinden.

Aus dem 20-Einträge-Vektor (als Bild angehangen) möchte ich eine 60-Einträge-Vektor machen und zwar wie folgt:

Die Einträge des neuen Vektors soll in den ersten 3 Zeilen den ersten Eintrag der alten Matrix besitzen. Bei meinem Beispiel wäre das also:

Mneu = [3;3;3;7;7;7;8;8;8;usw.]

Das müsste wahrscheinlich mit einer Schleife gehen, aber ich weiß nicht wie das geht. Ich bin noch nicht so gut im Programmieren... :'(

Ich hoffe die Frage wurde noch nie gestellt, da ich in der Suche nichts dazu gefunden habe.

Danke und iebe Grüße,
Julia!

Unbenannt.JPG
 Beschreibung:

Download
 Dateiname:  Unbenannt.JPG
 Dateigröße:  18.35 KB
 Heruntergeladen:  335 mal
Private Nachricht senden Benutzer-Profile anzeigen


Daewun
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 08.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2013, 13:34     Titel:
  Antworten mit Zitat      
Hallo Julia,

Als ganz schnelle Lösung würde ich vorschlagen, wie du auch sagtest mit einer schleife

Code:
for i=1:3:60
     Mneu(i)=Malt;
     Mneu(i+1)=Malt;
     Mneu(i+2)=Malt;
 end
 


das ist aber eine sehr spontane Lösung, es gibt mit sicherheit elegantere und schnellere Versionen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Julia1991
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 19.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2013, 13:44     Titel:
  Antworten mit Zitat      
Danke für die rasante Antwort! Laughing

Ich habe den Code ausprobiert und er sieht bei mir wie folgt aus:

Code:
for i=1:3:60
     Mneu(i)=Knotennummer;
     Mneu(i+1)=Knotennummer;
     Mneu(i+2)=Knotennummer;
 end
 


Knotennummer ist dabei der Name des Vektors mit 20 Einträgen, doch leider bekomme ich eine Fehlermeldung:

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

Ich verstehe das Problem so, dass mein Mneu und Knotennummer nicht die selbe Länge haben. Embarassed ?
Private Nachricht senden Benutzer-Profile anzeigen
 
HauNei
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2013, 14:02     Titel:
  Antworten mit Zitat      
Hallo,
so wie ich es sehe, musst du in der For-schleife noch angeben welchen Wert du übergeben willst.
Also in der Art:
Zitat:
Mneu(i) = Knotennummer(i)

Mit diesem Befehl schreibst du in Mneu an der Stelle i, den Wert von Knotennummer an der Stelle i.
Wenn du die unten beschriebene Schleife verwendet willst, müsste es dann wie folgt aussehn
Code:
a = 0;
for i=1:3:60
     a = a+1
     Mneu(i)=Knotennummer(a);
     Mneu(i+1)=Knotennummer(a);
     Mneu(i+2)=Knotennummer(a);
 end

So kannst du nun dein Vektor mit 60Werten erzeugen.
Um das ganze in eine Matrix zu schreiben, muss du mal http://www.gomatlab.de/zusammenlege.....einzige-matrix-t1068.html schaun
Ohne for-Schleife besteht die Möglichkeit es so zu lösen:
Zitat:
Mneu(1:3:60)=Knotennummer
Mneu(2:3:60)=Knotennummer
Mneu(3:3:60)=Knotennummer

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Julia1991
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 19.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2013, 14:18     Titel:
  Antworten mit Zitat      
Hat super geklappt.
Ich danke euch beiden recht herzlich! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.08.2013, 08:10     Titel:
  Antworten mit Zitat      
bei schleifenlösungen sollte man immer drauf achten vorher den speicher zur reservieren. bei 60 elementen ist das unerheblich wird aber schnell langsamer bei großen matritzen
ohne schleife geht auch noch
Code:
Mneu=reshape(repmat(Knotennummer,1,3)',1,[])';

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Julia1991
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 19.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2013, 11:04     Titel:
  Antworten mit Zitat      
Hallo,

ich bins wieder. Ich habe nun folgendes neues Problem und hoffe Ihr könnt mir wieder tatkräftig helfen! Smile

Ich habe jetzt die zusammengesetzte Matrix:

1 577 -1
2 577 -2
3 577 -3
4 569 1
5 569 2
6 569 3
etc...

Nun möchte ich gern die Zeilen wo zB in der 2. Spalte 569 steht auslesen.
Wie mache ich das am besten?
Mein Ansatz ist das mit find zu machen.
Der folgende Befehl:
Code:
find(A(:,2)))569)

gibt mir einen Vektor mit den Stellennummern(1. Spalte) aus.
Doch wie verwerte ich diesen Vektor weiter? Embarassed

Arbeite ich weiter mit find? Ich habe es auch mit ismember probiert, aber das hat leider auch nicht geklappt.

Ich hoffe ihr könnt mir auf die Sprünge helfen! Ich bin noch dabei das Programm zu lernen und stelle dumme Fragen Confused
Ich hoffe es ist ok und habe darauf geachtet nicht noch ein neues Thema aufzumachen sondern diesen aufzufrischen.

Danke im Voraus!
Julia
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.08.2013, 11:22     Titel:
  Antworten mit Zitat      
logische indizierung ist hier sinnvoller.
Code:
A(A(:,2)==569),:)

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 28.08.2013, 11:22     Titel:
  Antworten mit Zitat      
Hallo Julia,

Die Frage ist nun, welchen Wert du willst?
find gibt dir den Index wieder, an dem die 569 steht. Also in deinem Beispiel die 4,5 und 6.
Wenn du jetzt z.B. die Werte aus der dritten Spalte haben willst, bei denen in der zweiten die 569 steht, würde das so gehen:

Code:
Spalte3_gleich_569 = A(find(A(:,2)==569),3)

alternativ
Code:
Spalte3_gleich_569 = A((A(:,2)==569),3)


In der Regel sollte man keine alten Threads kapern Wink da sonst meist Themen vermischt werden.

Grüße Chris
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.