2017-07-04 1 views
-1

ich die folgende Warnung erhalten:aus der fraktionierten Umwandlung in Dezimaldarstellung in Octave

warning: Using rat() heuristics for double-precision input (is this what you wanted?) 

und meine resultierende Berechnung wird mit dem rationalen Ansatz, wenn ich die Dezimalform möchte. Wie kann ich die Berechnung zwingen, die rationale in eine dezimale Darstellung zu konvertieren? Hier

ist der Code:

pkg load symbolic 
syms a b c d real 
C = [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 0, 1; 0, 0, 1, 0] 
H = (1/sqrt(2))*[1, 1; 1, -1] 
I = [1, 0; 0, 1] 
X = [a, b, c, d] 

s = kron(H, I) 
s*C*X' 
+0

Die rationale Darstellung scheint in @ sym/sym.m hartcodiert zu sein (siehe Zeile 251; das von der privaten Funktion zurückgegebene Flag @ sym/private/const_to_python_str.m scheint standardmäßig 0 zu sein, es sei denn eine Ausnahme war erhoben, obwohl ich das falsch interpretieren könnte). Sie könnten versuchen, mit @ sym/sym.m zu experimentieren, wenn Sie möchten, aber nein, es scheint kein "Parameter" zu sein, den Sie übergeben können, um stattdessen die Float-Darstellung zu erzwingen. Ich habe auch keine Funktion gefunden, die die rationale Darstellung in eine 'float'-Form umwandelt (@ sym/double.m sah vielversprechend aus, aber es gab mir einen Fehler, als ich es hier versuchte). –

Antwort

1

Die rationale Darstellung kann in einen float umgewandelt werden, um eine mit vpa. vpa(x,n) wertet x zu mindestens n signifikanten Ziffern aus. Wenn Sie den aktuellen Wert digits verwenden möchten, können Sie n weglassen.

vpa(s*C*X.',4) 
% Above line evaluates the result to at least 4 significant digits 

Beachten Sie auch, dass ' nicht umsetzen wird. Es ist komplex konjugiert transponieren. Verwenden Sie Transpose (d. H. .'), wenn Sie transponieren sollen. Deshalb habe ich den Ersatz im obigen Code gemacht.


In Bezug auf die Warnmeldung, kann es turned off durch sein:

warning ('off', 'OctSymPy:sym:rationalapprox'); 

Sie können es wieder einschalten durch off mit on in dem obigen Code zu ersetzen.