2016-09-11 2 views
-1

Komplexe Zahlen werden je nach Format unterschiedlich in Octave angezeigt. Aber ich kann mit keinem der Formate (bis jetzt) ​​stehen.Zwei Formate zeigen verschiedene komplexe Zahlen in Oktave

Hier ist mein Code:

a = [-0.067000,-0.067000,-0.068000,-0.069000,-0.069000,-0.070000,-0.070000,-0.071000,-0.071000,-0.072000]; 
Y = fft(a); 
    fprintf(comp_print_log,"%s\n",num2str(Y)); 
    fprintf(comp_print_log,"\n"); 
    fprintf(comp_print_log,'%7.4f%+7.4fj\n',real(Y),imag(Y)); 
fclose(comp_print_log); 

Hier ist die Ausgabe von "fft (a)" auf Befehlsfenster:

>> fft(a) 
ans = 

Columns 1 through 8: 

    -0.69400 + 0.00000i 0.00331 - 0.00828i 0.00281 - 0.00439i 0.00219 - 0.00277i 0.00169 - 0.00140i 0.00400 + 0.00000i 0.00169 + 0.00140i 0.00219 + 0.00277i 

Columns 9 and 10: 

    0.00281 + 0.00439i 0.00331 + 0.00828i 

Hier ist der Ausgang:

-0.694+0i    0.003309-0.008282i  0.002809-0.004392i  0.002191-0.0027674i  0.001691-0.0014001i   0.004+0i    0.001691+0.0014001i  0.002191+0.0027674i  0.002809+0.004392i  0.003309+0.008282i 

-0.6940+0.0033j 
0.0028+0.0022j 
0.0017+0.0040j 
0.0017+0.0022j 
0.0028+0.0033j 
0.0000-0.0083j 
-0.0044-0.0028j 
-0.0014+0.0000j 
0.0014+0.0028j 
0.0044+0.0083j 

„num2str (Y) "zeigt die korrekten Ergebnisse OHNE Wagenrücklauf. Auf der anderen Seite zeigt "real (Y), imag (Y)" seltsame Ergebnisse MIT Wagenrücklauf. (By the way, was ist sie ???)

Ich brauche eine Lösung entweder: "num2str (Y)" mit Wagenrücklauf oder "real (Y), imag (Y)" mit dem richtigen Ergebnisse.

I genannt: How do you format complex numbers for text output in matlab

+0

Wow, es ist 9 Stunden her, seit ich geschrieben und alles, was ich nur downvote bekam ist. Diese Welt ist wundervoll. Zumindest sollten Sie mir einen Kommentar geben, warum Sie mir einen Downvote gegeben haben. (Wenn Sie mich für das Keyword 'Matlab' downvoted haben, ist das eine falsche Stimme, weil Stackoverflow das Hinzufügen vorgeschlagen hat.) – IanHacker

Antwort

3

Wenn Sie num2str mit einem Array aufrufen, erhalten Sie eine einzelne Zeichenfolge, die das Array repräsentiert zurück. Wenn das Array ein Zeilenvektor ist, erhalten Sie wieder einen String mit einer Linie (es ist alles eine Zeile), wenn das Array ein Spaltenvektor ist, erhalten Sie wieder ein Element pro Zeile:

octave> Y = [-0.694+0i 0.003309-0.008282i 0.002809-0.004392i 0.002191-0.0027674i]; 

octave> num2str (Y) 
ans = -0.694+0i    0.003309-0.008282i  0.002809-0.004392i  0.002191-0.0027674i 

octave> num2str (Y') 
ans = 

    -0.694-0i   
0.003309+0.008282i 
0.002809+0.004392i 
0.002191+0.0027674i 

Über Ihr Problem mit real und imag ist das Problem, wie Arrays in der Vorlage enthalten sind. Alle Elemente in einem Argumente werden in der Vorlage verwendet, bevor zum nächsten Argumente bewegt:

octave> printf ("%f %f\n", [1 2 3], [4 5 6]) 
1.000000 2.000000 
3.000000 4.000000 
5.000000 6.000000 

weshalb Sie die falsche Antwort, wenn es darum. Es liest den gesamten Realteil vor dem Lesen des Imaginärteils. Sie benötigen ein Array erstellen, wo diese Werte verschachtelt sind, wie so (denken Sie daran, wird Octave jede Spalte lesen unten):

octave> printf ("%f %f\n", [real(Y)' imag(Y)']') 
-0.694000 0.000000 
0.003309 -0.008282 
0.002809 -0.004392 
0.002191 -0.002767 
+0

Ich sehe! Der zweite funktioniert perfekt. (Es war ein bisschen schwierig für mich, weil Apostrophe sowohl innerhalb als auch außerhalb der eckigen Klammern benötigt werden.) Der erste Befehl funktioniert im Befehlsfenster. (Irgendwie funktioniert es nicht in printf() oder fprintf(); es druckt nur die erste Zeile. ... Aber wen interessiert das?). Vielen Dank! – IanHacker

+0

@IanHacker Wenn Sie 'num2str' verwenden, erhalten Sie einen String zurück, so dass Sie' printf() 'oder' fprintf() 'nicht brauchen. Diese Funktionen wirken auf eine Vorlage. Aber Sie haben bereits eine formatierte Zeichenfolge zum Ausdrucken, verwenden Sie stattdessen 'fputs()'. – carandraug

+0

Meinst du das? 'fputs (comp_print_log, num2str (Y '));' ... In diesem Fall bekomme ich nur die erste Zeile '-0.694-0i' (Es gibt 2 Leerzeichen vor der Zahl und 8 Leerzeichen hinter der Zahl. In diesem Kommentar Diese Leerzeichen werden automatisch entfernt ...) – IanHacker

Verwandte Themen