如何找到 $\sqrt(x)$ 形式的无理数的第 n 个数字

How to find nth digit of an irrational number of the form $\sqrt(x)$

我正在编写一个使用无理数数字的 matlab 代码。我尝试使用 $\sqrt(1+x)$ 的泰勒展开找到它。由于除以大数对于 Matlab 来说可能不是一个好主意,所以这种方法在我看来不是一个好方法。

请问有没有更简单高效的方法?

看来你需要一种 digit-by-digit root calculation 在计算机时代之前就被发现的方法。

如果您有 Symbolic Toolbox,vpa 就可以。您可以指定所需的有效数字位数:

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

结果是symbolic variable。如果需要,转换为字符串:

result = char(result);

在上面的例子中,

result =
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573

请注意,这会受到 舍入 的影响。例如,n = 7 的结果是 1.414214 而不是 1.414213

较新的 Matlab 版本(在 R2017b 上测试),不鼓励使用带有 vpa 的字符输入,并且将来可能会删除对此的支持。推荐的方法是首先将变量定义为符号变量,然后对其应用所需的操作:

x = sym(2);
n = 100;
result = vpa(sqrt(x), n);