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

Zahlen einer Matrix Ersetzen und neue Matrix erstellen

 

Johannes40
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2016, 11:03     Titel: Zahlen einer Matrix Ersetzen und neue Matrix erstellen
  Antworten mit Zitat      
Hallo
Ich beschäftige mich noch nicht lange mit Matlab und habe eine Frage.

Ich habe z.B. folgende Matrix gegeben:

A =[ 1 2 1 2; 1 2 1 2]

Nun möchte ich aus der Matrix A eine Matrix B erstellen, in der die 1 durch 10 und die 2 durch 20 ersetzt wird. Einmal soll es ohne und einmal mit Schleife programmiert werden, leider weiß ich auch nicht was Schleifen sind?

Für den 1.Fall habe ich folgenden Ansatz:

A(find(A==1))=10;A(find(A==2))=20

Aber wie mache ich es, ohne die Matrix A zu verändern? Also die neue Matrix soll B heißen und A soll nicht verändert werden.


Ich bedanke mich für jede Hilfe! Confused Wink
Private Nachricht senden Benutzer-Profile anzeigen


gs
Forum-Century

Forum-Century


Beiträge: 172
Anmeldedatum: 17.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2016, 07:09     Titel:
  Antworten mit Zitat      
Guten Morgen,

es gibt viele Möglichkeiten dein Problem zu lösen. Dein Ansatz ist erstmal nicht verkehrt. Du kannst deine Matrix A "klonen" und schon hast du die ursprüngliche Matrix noch in deinen Workspace.

Mit deiner Schleife sind auch verschiedene Möglichkeiten denkbar. Am einfachsten ist es sich vor dem Start der Schleife die Größe der Matrix zu merken und die ursprüngliche Matrix zu "klonen".

Man kann es z.B. folgendermaßen lösen:

Code:

A =[ 1 2 1 2; 1 2 1 2]; % Matrix A definieren
B = A; %Matrix A "klonen"
[AnzahlZeilen, AnzahlSpalten] = size(B);
for k = 1:1:AnzahlZeilen
    for j = 1:1:AnzahlSpalten
        if B(k,j) == 1
            B(k,j) = 10;
        end
        if B(k,j) == 2
            B(k,j) = 20;
        end
    end
end
 


Natürlich gibt es noch einfachere Varianten. Ich wollte dir hierbei nur die Schleifen zeigen. Prinzipiell geht das so:
1. Matrix definieren
2. Größe der MAtrix ermitteln (Zeilen, Spalten)
3. mittels geschachtelter for-Schleife alle Elemente durchlaufen und auf Werte Prüfen, ggf. ersetzen
4. Fertige Matrix bewundern Smile
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: 23.05.2016, 13:41     Titel: Re: Zahlen einer Matrix Ersetzen und neue Matrix erstellen
  Antworten mit Zitat      
Hallo Johannes40,

Schleifen werden unter doc while und doc for gut erklärt.

In Deinem Beispiel kann man auch auf das find verzichten:
Code:
A(A == 1) = 10;
A(A == 2) = 20

Das nennt sich "logical indexing" und ist effizienter.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2016, 21:06     Titel: Re: Zahlen einer Matrix Ersetzen und neue Matrix erstellen
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Johannes40,

Schleifen werden unter doc while und doc for gut erklärt.

In Deinem Beispiel kann man auch auf das find verzichten:
Code:
A(A == 1) = 10;
A(A == 2) = 20

Das nennt sich "logical indexing" und ist effizienter.

Gruß, Jan


Danke!

gs hat Folgendes geschrieben:


Danke! Und der Tipp mit dem klonen der Matrix hat mir sehr viel weitergeholfen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Tom_Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2016, 21:22     Titel:
  Antworten mit Zitat      
Code:

führt übrigens zum selben Ergebnis Smile

Gruß Tom
 
Johannes40
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2016, 21:27     Titel:
  Antworten mit Zitat      
Tom_Gast hat Folgendes geschrieben:
Code:

führt übrigens zum selben Ergebnis Smile

Gruß Tom


In dem Fall ja, aber das geht doch nicht immer mit jeder Zahl Very Happy Aber danke!
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.