2016-05-13 9 views
2

Ich schreibe einen Matlab-Code, der Ziffern einer irrationalen Zahl verwendet. Ich habe versucht, es mit einer Taylor-Erweiterung von $ \ sqrt (1 + x) $ zu finden. Da die Aufteilung in große Zahlen für Matlab eine schlechte Idee sein könnte, erscheint mir diese Methode nicht gut.

Ich frage mich, ob es eine einfachere und effizientere Methode gibt, dies zu tun?

+0

Bitte einen Code schreiben und einige Beispiele, was die Eingabe ist und die gewünschte Ausgabe. Danke – tim

+0

Danke für die schnelle Antwort. Ich muss es in dieser Form verwenden: output = findNthDigit (x, n) alle von ihnen werden Integer sein. Funktion wird das x als sqrt (x) betrachten und die n-te Ziffer als Ausgabe zurückgeben. – thomass

+0

Ich weiß, dass es einen Algorithmus für Pi (BBP) gibt, aber ich muss mehr Optionen haben. – thomass

Antwort

3

Wenn Sie die Symbolic Toolbox haben, tut dies vpa. Sie können die Anzahl der signifikanten Stellen geben Sie wollen:

x = '2'; %// define x as a *string*. This avoids loss of precision 
n = 100; %// desired number of *significant* digits 
result = vpa(['sqrt(' x ')'], 100); 

Das Ergebnis ist ein symbolic variable ist. Bei Bedarf konvertiert in einen String:

result = char(result); 

In dem obigen Beispiel

result = 
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573 
+0

obwohl ich oben gesagt habe, dass ich n-te Ziffer brauche, könnte diese Version auch für mich nützlich sein. Danke, geschätzt. – thomass

+1

Nun, das gibt die n-te Ziffer am Ende :-) Es ist _significant_ digits, nicht _decimal_ digits, though –

1

Es scheint, dass Sie eine Methode von digit-by-digit root calculation benötigen, die lange vor Computerära entdeckt wurde.

+0

Dankeschön deine Antwort, ich werde mich darum kümmern, scheint vielversprechend :) – thomass

Verwandte Themen