【问题标题】:How to find nth digit of an irrational number of the form $\sqrt(x)$如何找到 $\sqrt(x)$ 形式的无理数的第 n 位
【发布时间】:2016-05-13 18:54:57
【问题描述】:

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

不知道有没有更简单有效的方法来做到这一点?

【问题讨论】:

  • 请发布一些代码和一些示例,输入和期望的输出是什么。谢谢
  • 感谢您的快速响应。我需要以这种形式使用它: output= findNthDigit(x, n) 所有这些都是整数。函数会将 x 视为 sqrt(x) 并将其第 n 位作为输出返回。
  • 我知道例如 pi(称为 BBP)有一个算法,但我需要有更多选择。
  • x 取什么值?整数?理性吗?
  • x 和 n 在这里都是整数。 (x 是非平方整数)

标签: algorithm matlab numerical-analysis


【解决方案1】:

如果您有符号工具箱,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);

【讨论】:

  • 虽然我上面说过我需要第n个数字,但这个版本也可能对我有用。谢谢,感激不尽。
【解决方案2】:

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

【讨论】:

  • 感谢您的回复,我会调查一下,看起来很有希望:)
猜你喜欢
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
相关资源
最近更新 更多