如何找到 $\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);
我正在编写一个使用无理数数字的 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);