2013-09-23 7 views
6

In MATLAB R2012 null ist:Komplexe Zahl Visualisierung als imaginärer Teil in MATLAB

>> rand(3) ; ans(1,1)=1+i 

ans = 
    1.0000 + 1.0000i 0.5060    0.9593   
    0.7513    0.6991    0.5472   
    0.2551    0.8909    0.1386 

Aber in R2013:

>> rand(3) ; ans(1,1)=1+i 

ans = 
    1.0000 + 1.0000i 0.9134 + 0.0000i 0.2785 + 0.0000i 
    0.9058 + 0.0000i 0.6324 + 0.0000i 0.5469 + 0.0000i 
    0.1270 + 0.0000i 0.0975 + 0.0000i 0.9575 + 0.0000i 

Wie kann ich es beheben?

Grüße.

+5

Warum brauchen Sie es den imaginären Teil zu verstecken, wenn es 0 ist? Wenn es für Ausgabezwecke ist, können Sie Ihre eigene Ausgabefunktion schreiben, um sie in genau dem gewünschten Format anzuzeigen, z. B. mit fprintf (auf dem Bildschirm oder einer Datei). Ab R2013 wurde die eingebaute Anzeigefunktion in MATLAB geändert, um die Imaginärteile auch dann anzuzeigen, wenn sie 0 sind - aus Gründen der Übereinstimmung mit der Arbeitsbereichsanzeige und da für einige Anwendungen es wünschenswert ist, den Imaginärteil zu sehen, auch wenn er Null ist. Ich glaube nicht, dass es eine Option gibt, den imaginären Teil zu verstecken, aber Sie könnten immer einen Vorschlag an mathworks schicken. – Brian

Antwort

1

Ohne die Option zu versuchen, kann ich nur vermuten, dass Sie vielleicht mit dem Format spielen möchten.

Meine beste Wette wäre format shortg, kann es den imaginären Teil verstecken oder einfach macht es weniger ablenkend:

rand(3) ; ans(1,1)=1+i 
format shortg 
rand(3) ; ans(1,1)=1+i 

Ja, das ist shortg statt short. Es versucht, keine irrelevanten Nullen und Dezimalzahlen anzuzeigen.

+0

Es funktioniert nicht, die Ausgabe ist jetzt [this] (http://i.imgur.com/5cz8jQZ.jpg). –

+0

@ NicolásTorresa Ich denke, das ist die minimale Ablenkung, die man nur durch Ändern des Formats erreichen kann. Ich weiß, dass es nicht dasselbe ist wie das Verschwinden des komplexen Teils, aber ohne eine komplexe Lösung anzuwenden, kann dies für die Standardausgabe so gut sein wie es geht. Wenn es Ihnen nichts ausmacht, eine Funktion aufzurufen, um Ihre Variablen anzuzeigen, können Sie eine erstellen, die nur die relevanten Zahlen ausgibt. –

0

Der beste Weg, dies zu schreiben, wäre als eine neue Funktion, die einfach im gewünschten Format ausgibt. Beispiel:

function [ out ] = new_display(in) 
for i=1:size(in,1) 
    for j=1:size(in,2) 
     fprintf('%.4f', real(in(i,j))); 
     if(imag(in(i,j)))>0 
      fprintf(' + %.4fi\t', imag(in(i,j))); 
     else 
      fprintf('\t\t\t'); 
     end 
    end 
    fprintf('\n'); 
end 

Gibt:

>> new_display(ans) 
0.8147 + 1.0000j 0.9134   0.2785   
0.9058   0.6324   0.5469   
0.1270   0.0975   0.9575 

Normalerweise, wenn Sie nur ans eingeben, Matlab ruft die Anzeige() Funktion. Sie könnten diese Funktion mit Ihren eigenen überladen, aber MathWorks sagt, dass es eine schlechte Idee ist (stimme zu).

Ref:

+0

Ich denke '' 'if (imag (in (i, j)))> 0''' sollte' '' sein if (imag (in (i, j))) ~ = 0''' (wegen negativ Imaginäre Teile). –