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

Zwei Fragen zu MATLAB

 

melanchos
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 21:26     Titel: Zwei Fragen zu MATLAB
  Antworten mit Zitat      
Hallo zusammen!

Hab vor kurzem dieses Forum per google gefunden und ich hab gleich einige Fragen zu MATLAB die ich bisher noch nirgends rausfinden konnte.

- Wie kann ich bestimmte Plätze/einen ganzen Vektor mit einer bestimmten Zahl (z.B. 0) beschreiben (nicht mit einer Schleife).

- Ausserdem würde ich gerne wissen, wie ich bei einer Zahl nur die letzten x Bits nehmen kann.

Hoffe ihr könnt mir diese Fragen beantworten Very Happy

mfg Patrick
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.05.2009, 21:51     Titel:
  Antworten mit Zitat      
Hallo,

1. Befehl zeros, z.B. für eine mxn - Matrix mit Nullen:
Code:
oder
Code:
A(logische Bed.) = 0
um bestimmte Elemente auf 0 zu setzen. Beispiel:
Code:
A(A<0) = 0
setzt alle Elemente in A, die <0 sind, auf 0.

2. Befehl bitget. Siehe Example 2 unter
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 21:51     Titel: Re: Zwei Fragen zu MATLAB
  Antworten mit Zitat      
melanchos hat Folgendes geschrieben:
- Wie kann ich bestimmte Plätze/einen ganzen Vektor mit einer bestimmten Zahl (z.B. 0) beschreiben (nicht mit einer Schleife).


Einen ganzen Vektor/Matrix mit Nullen beschreiben geht wunderbar mit der Funktion zeros.
Bestimmte Plätze gehen auch, aber dazu müsste das bestimmte etwas bestimmter sein ;) Grundsätzlich kannst Du über vektor(element) auf das Element "element" im Vektor zugreifen und auch Werte zuweisen. "element" muss dabei nicht ein Skalar sein sondern kann auch ein Vektor mit mehreren Werten sein -- dann wird auf alle Elemente zugegriffen.

Zitat:
- Ausserdem würde ich gerne wissen, wie ich bei einer Zahl nur die letzten x Bits nehmen kann.

Zum Beispiel so:
Code:

a = 5;
bitget(a, 1:8); %die letzten 8 Bit (die 8 niedrigwertigsten)
bitget(a, 2:4); %bit 2 bis 4
 


Die Reihenfolge ist bei der Ausgabe ungewohnt, die höchstwertigsten Bits stehen rechts. Wenn das nicht gewünscht ist, kannst du den Ausgabevektor mit fliplr spiegeln.
Wenn Du die gewünschten Bits maskieren und anschließend damit weiterrechnen willst, gibt es auch noch bitand - das dürfte etwas praktischer in der Handhabung sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
melanchos
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2009, 22:49     Titel:
  Antworten mit Zitat      
Vielen Dank euch beiden, das ist genau das was ich gesucht habe.

Das einzige problem ist, dass ich nachdem ich:

fliplr(bitget(123456789,1:6)) eingebe,

die letzten 6 Bits einzeln in einem Vektor x=[0,1,0,1,0,1] stehen.
Wie setzte ich diese nun am besten zusammen um sie mit bin2dec() wieder zu Dezimalzahlen machen kann?

Gibt es eine bessere Möglichkeit als
10^5*x(1)+10^4*x(2)+10^3*x(3)+10^2*x(4)+10*x(5)+x(6)
?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 06.05.2009, 08:32     Titel:
  Antworten mit Zitat      
bin2dec erwartet einen String als Eingabe.
Versuchs mal wie folgt:

Code:
x=[0,1,0,1,0,0,1]; % Bits als Zahlen im Vektor
y=mat2str(x); % Umwandlung in String '[0 1 0 1 0 0 1]'
bin2dec(y(2:end-1)) % Umwandlung  in Dezimalzahl dabei werden die eckigen Klammern durch die Indizizierung ausgelassen aus dem String
 

_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 08:41     Titel:
  Antworten mit Zitat      
melanchos hat Folgendes geschrieben:
die letzten 6 Bits einzeln in einem Vektor x=[0,1,0,1,0,1] stehen.
Wie setzte ich diese nun am besten zusammen um sie mit bin2dec() wieder zu Dezimalzahlen machen kann?


Das ist der Punkt mit dem Maskieren mit bitand. Durch ein bitweises, logisches UND mit einer Zahl, die nur an den Stellen 1 ist, mit denen Du rechnen willst, werden alle anderen Stellen 0. Du kannst dann direkt damit weiterrechnen:
Code:

maske = bin2dec('0111'); %Nur die letzten 3 Bit beachten, Maske kann beliebig angepasst werden
zahl = 21;
zahl_zum_weiterrechnen = bitand(zahl, maske)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
melanchos
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 10:36     Titel:
  Antworten mit Zitat      
Ok Danke, ich habe es jetzt mit der Methode von Maddy gelöst.
Private Nachricht senden Benutzer-Profile anzeigen
 
melanchos
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 16:21     Titel:
  Antworten mit Zitat      
Ich habe nochmals einen Frage wofür ich nicht ein eigenes Thema eröffnet wollte.

Ich versuche, in einem Vektor x zu zählen, wie oft ein bestimmtes Zahlenpaar, z.B. ....,5,5,... vorkommt.

Mit histc() hab ich es schon versucht, das funktioniert jedoch nicht wenn ich schreibe histc(x,[5,5]), da es ja immer in einem Feld des Vektors allein schaut und nicht 2 gleichzeitig.
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 - 2024 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.