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

Komplexe zahlen in einer Matrix

 

T. Arnold
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2013, 17:00     Titel: Komplexe zahlen in einer Matrix
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleines Problem das denke ich einfach zu lösen ist aber leider habe ich bisher keie Lösung dafür gefunden.

Und zwar habe ich eine Matrix mit 1000x1000 Einträgen. Die Einträge sind komplexe Zahlen. Nun möchte ich auf den Realteil eines jeden Eintrags zugreifen, diesen ändern, bspw. auf 1 setzen, und dann wieder speichern.

Momentan hole ich mir den Real und den Imaginärteil eines jeden Eintrags aus der Grundmatrix und speichere diese in eine jeweils eine neue Matrix. Dann ändere ich den Realteil ab und füge anschließend beide Matritzen wieder zu einer Matrix zusammen. Das dauert leider sehr lange.

Gibt es eine schnellere Möglichkeit das zu lösen?

Vielen Dank für eure Hilfe.

Grüße
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: 19.12.2013, 22:27     Titel: Re: Komplexe zahlen in einer Matrix
  Antworten mit Zitat      
Hallo T. Arnold,

Statt den Code mit Worten zu beschreiben, wäre es klarer, wenn Du ihn direkt zeigst. Dann ist es viel leichter einen Verbesserungsvorschlag zu machen.
Statt "sehr lange" und "schneller" benötigen wir absolute Angaben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
T. Arnold
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2013, 09:45     Titel:
  Antworten mit Zitat      
Hallo,

hier der Code mit dem ich das oben genannte bisher durchführe.


Code:
N = 1024;
count = 6;

A=abs(N/3000*randn(count,2));

eingangsholo = zeros(N,N);
Re=size(eingangsholo);
Im=size(eingangsholo);
for n=1:N
    for m=1:N
        for t=1:count
           eingangsholo = eingangsholo+exp(1i*2*pi*(m * A(t,1) + n*A(t,2)));
         
        end
         Re(m,n)=real(eingangsholo(m,n));
           Re(m,n)=1;
           Im(m,n)=imag(eingangsholo(m,n));
    end
end

Holo=Re+1i*Im;

figure;
imagesc(abs(eingangsholo))

figure;
imagesc(abs(Holo))


[EDITED, Jan, Bitte Code-Umgebung benutzen - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
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.12.2013, 11:58     Titel:
  Antworten mit Zitat      
Hallo,

probier mal (außerhalb der for-Schleife)

Code:
Holo= 1 + i*imag(eingangsholo)


Grüße,
Harald
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: 20.12.2013, 13:45     Titel:
  Antworten mit Zitat      
Hallo T. Arnold,

Natürlich könnte man Ausdrücke wie "1i * 2 * pi" zusammenfassen und so 2*6*1024*1024 = 12.6 Millionen Multiplikationen sparen. Aber im Vergleich zur teuren EXP-Berechnung wird dies nicht viel ausmachen.

Der Profiler kann Dir helfen, das Bottleneck in Deinem Code zu finden. Leider schaltet der zwar die Schleifen-Optimierung von Matlab aus, so dass die Ergebnisse verfälscht sind. Aber Du bekommst immerhin raus, was kritisch sein könnte und wo man mit TIC/TOC genauer nachsehen sollte.

Ich vermute, die Laufzeit wird eindeutig von EXP dominiert. Wenn das so ist, musst Du überlegen, ob Du die Anzahl dieser Berechnungen reduzieren kannst (so weit ich sehe nicht). Wenn das nicht möglich ist, ist die Parallelisierung (PARFOR) der einzige, aber bequeme, Ausweg.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
T. Arnold
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2013, 13:39     Titel:
  Antworten mit Zitat      
Hallo Jan,

würde es denn etwas bringen wenn ich Sinus und Cosinuns statt dem Exponenten verwende oder sind diese auch so zeitauwändig? Nach Euler sollte das ja möglich sein.

Grüße

Thomas
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: 21.12.2013, 22:23     Titel:
  Antworten mit Zitat      
Hallo T. Arnold,

Es ist wert dies zu probieren. Ein paar TIC/TOCs werden helden, die herauszufinden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
T. Arnold
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.12.2013, 15:12     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für Antwort.
Leider bringt es nicht wirklich was mit sin und cos zu arbeiten.
Werde mir wohl etwas anderes überlegen müssen.

Grüße und schönes Fest euch allen

Thomas
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.