2016-06-01 19 views
1

ich für eine Hilfe bin zu fragen, einen Code zu schreiben, die folgenden Aktionen ausführen in Matlab:Konvertierung in Dezimal in Matlab?

(1) Ich habe eine Spaltenvektor A der Dimension nx1 Auflistung der n Stellen nach dem Komma einer Reihe B in Basis 4 zwischen 0 und 1

Was meine ich mit Basis 4 erklärt here

Beispiel

n=18 
A=[1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2]' %representing B=0.121212121212121212 

(2) Ich möchte B zu Basis 10 (Dezimaldarstellung) und speichern Sie die erhaltene Dezimalzahl C in einer 1x1 Matrix konvertieren

Können Sie mir helfen, zu verstehen, wie dies zu tun?

Antwort

5

Hier ist eine Art und Weise:

C = base2dec(char(A(:).'+'0'), 4)*4^-numel(A); 

Dieser wandelt die Ziffern in eine ganze Zahl in Basis 4 und teilt sich dann durch die entsprechende Kraft der 4.

Berücksichtigen Sie, dass C durch double Genauigkeit begrenzt wird, so dass einige Dezimalstellen verloren gehen können. Wenn Sie mehr Präzision wünschen, müssen Sie symbolische Variablen verwenden.

+0

Danke, aber ich denke meine Frage war nicht klar, sorry. Du Code gibt mir 0.1212, was B zu sein scheint (mit nur 4 Ziffern nach dem Komma), das ist in Basis 4. Ich möchte B in Basis 10 umwandeln. – user3285148

+1

Ich bin mir nicht sicher, was du mit "base" meinst. Jedenfalls hat das Ergebnis "C" mehr als 4 Dezimalstellen. Matlab zeigt nur 4 standardmäßig an. Versuchen Sie 'format long' –

+0

Entschuldigung, jetzt sehe ich, was du meinst. Ich bearbeite meine Antwort, wenn ich an einen Computer komme –

2

Ich gehe davon aus, dass Sie die Dezimalstelle darin haben, um zu verlangsamen, dass Sie Potenzen weniger als 1 wollen. Hier ist eine Brute-Force-Schleife, um es zu tun.

C = 0; 
for x = 1:n 
    C = res + A(x) * 4^(-x); 
end 
C = 0.399999999994179 

Hier ist eine andere Art und Weise

exp = (-1 * (1:18))'; 
C = sum(A .* 4 .^ exp); 
C = 0.399999999994179 

mit Ihrem Link als Leitfaden betrachten wir die Zahl in Dezimal von 15 aussehen. Dies entspricht der Basis 4 von 33. In diesem Fall A = [3 3] und exp = [1 0]. Daraus ergibt sich:

A = [3 3]; 
exp = [1 0]; 
C = sum(A .* 4 .^ exp); 
C = 15 

Ihr Link eine link die Grundlagen der Umwandlungen zu erklären hat.