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

Matlab speichert normale Zahlenwerte als komplexe Zahlen

 

txxxt
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2014, 20:28     Titel: Matlab speichert normale Zahlenwerte als komplexe Zahlen
  Antworten mit Zitat      
Hallo,

ich bin schon seit Stunden mit einem Problem beschäftigt, dass sich einfach nicht lösen lässt.

Ich verwende den untenstehenden Code. I2 ist ein 3D Array und enthält ganz normale Zahlen, auch TR ist eine ganz normale Zahl.

Ich will mit dem Code T1matrix berechnen und anschließend darstellen. Allerdings bekomme ich am Ende der Schleifen für T1matrix ein komplexes Array mit den Imaginärteilen 0i.

In der Schleife ist T1matrix immer ein ganz normales doubles Array. Und es gibt auch für mich keinen ersichtlichen Grund wieso Matlab dieses double Array einfach in ein komplexes Array umwandelt.

Wenn ich die Array Größe allerdings sehr viel kleiner mache, bekomme ich am Ende ein double Array.

Ich kann mir nicht erklären was hier passiert, vielleicht habt ihr ja eine Idee und könnt mir weiterhelfen.

Danke.

Code:

TR = info.RepetitionTime*10^(-3);

xMatrix = zeros (size(I2,1), size(I2,2), size(I2,3));
yMatrix = zeros (size(I2,1), size(I2,2), size(I2,3));

T1matrix = double(zeros (size(I2,1), size(I2,2)));
S0matrix = zeros (size(I2,1), size(I2,2));


for r =1:ds-2
   
    xMatrix(:,:,r) = I2(:,:,r)./tand(FlipAngles(r));
    yMatrix(:,:,r) = I2(:,:,r)./sind(FlipAngles(r));
   
end

for y = 1:size(I2,1)
   
    for x = 1:size(I2,2)
        p = polyfit(xMatrix(y,x,:),yMatrix(y,x,:),1);
        m = p(1);
        intercept = p(2);
       
        T1matrix(y,x) =double( TR/log(1/m));
       
        S0matrix (y,x)= intercept/(1-m);
    end
   
   
end
 
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: 09.03.2014, 20:54     Titel:
  Antworten mit Zitat      
Hallo,

kann es sein, dass m negativ wird? Dann würde der Logarithmus komplexwertig.

Empfehlung: Debugger verwenden und genau schauen, wann die Matrix zum ersten Mal komplexwertig wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
txxxt
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2014, 21:04     Titel:
  Antworten mit Zitat      
Danke für deine schnelle Antwort.

Der log wird nie negativ. Das m bewegt sich immer um 0,8 bis 0,999.
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: 09.03.2014, 21:08     Titel:
  Antworten mit Zitat      
Hallo,

kannst du ein reproduzierbares Beispiel liefern?

Also entweder Beispieldaten zu deinem momentanen Beispiel oder ein abgespecktes Beispiel, in dem das Problem auftritt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
txxxt
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2014, 21:28     Titel:
  Antworten mit Zitat      
Hier ist das m-file und die Datensätze, die man dazu braucht. Ich hoffe, dass es funktioniert.

T1matrix.zip
 Beschreibung:

Download
 Dateiname:  T1matrix.zip
 Dateigröße:  67.41 KB
 Heruntergeladen:  231 mal
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: 09.03.2014, 21:48     Titel:
  Antworten mit Zitat      
Hallo,

m wird wie vermutet negativ.

Geh mal in Zeile 30 und klicke vorne auf den Strich rechts, und verwende "Set conditional breakpoint".

Als Bedingung gib an
Code:
any(imag(T1matrix(:)) ~= 0)

(also dass T1matrix komplexwertige Einträge enthält)

Du siehst, dass der Haltepunkt erreicht wird. Wenn du dir dann m ansiehst, ist es negativ. Demzufolge wird z.B. T1matrix(1,54) wirklich komplexwertig.
Jetzt musst du herausfinden, was das für deine Anwendung bedeutet.

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