使 Maxima 代码运行得更快收敛半径

问题描述

我试图找到与应用于 Mandelbrot 集的牛顿方法相关的某些泰勒级数的收敛半径。为此,我编写了一些 Maxima 代码;计算出的 R 至少对于第一个注释案例(1 / inf 而不是 1 / 2)是不正确的,所以我试图打印一些值以查看它在数字上的表现。然而,Maxima 花费了太多时间(第一个值 1 秒,第二个值 17 秒,我放弃等待第三个值)。在第三个评论案例中的表现甚至更慢。我怎样才能加快速度?

f(c,z) := z^2 + c;
/* h(c) := f(c,f(c,0)); /* simpler case is much faster */ */
h(c) := ratsimp(f(c,0))) / f(c,0)); /* polynomial with roots at period 3 components */
/* h(c) := ratsimp(f(c,0)))) / f(c,0))); /* next case is much slower */ */
hh(c) := ratsimp(diff(h(c),c));
N(z) := ratsimp(z - h(z) / hh(z)); /* Newton's method */
M(z) := ratsimp(subst(c = c + z,N(c)) - c); /* perturbed */
for ct in allroots(h(c) = 0) do
(
  print(ct),/* coefficient of Taylor series */
  a(n) := at(diff((subst(lhs(ct) = bfloat(rhs(ct)),M(z))),z,n) / factorial(n),z = 0),R : 1 / limit(abs(a(n+1)/a(n)),n,infinity),/* radius of convergence */
  print(R),/* prints 1/inf,but this is incorrect at least for the first commented case */
  print(bfloat(1 / abs(a(11)/a(10)))),/* prints after 1 second */
  print(bfloat(1 / abs(a(101)/a(100)))),/* prints after 17 seconds */
  print(bfloat(1 / abs(a(1001)/a(1000)))) /* gave up waiting */
);

EDIT 纠正 infinityinf 的混淆,考虑第一个注释案例 h(c) = f(c,0)) = c^2 + c。然后 M(z) = (z^2 - h(c)) / (2 * z + 2 * c + 1) 为根 c = 0 给出 M(z) = z^2 / (1 - (-2 * z)),它是几何级数 z^2 (1 + (-2) * z + (-2)^2 * z^2 + ... + (-2)^n z^n + ...) 的总和。现在系数 a(n) = (-2)^n 所以 1 / limit(abs(a(n + 1)/a(n)),inf) 应该是 1/2,但 Maxima 报告除以零:

f(c,z) := z^2 + c;
h(c) := f(c,0));
hh(c) := ratsimp(diff(h(c),c));
N(z) := ratsimp(z - h(z) / hh(z));
M(z) := ratsimp(subst(c = c + z,N(c)) - c);
for ct in solve(h(c) = 0) do
(
  print(ct),a(n) := at(diff((subst(lhs(ct) = bfloat(rhs(ct)),invR : limit(abs(a(n+1)/a(n)),inf),print(abs(a(10+1)/a(10))),print(abs(a(100+1)/a(100))),print(abs(a(1000+1)/a(1000))),print(invR)
);

哪个打印

...
c = - 1 
`rat' replaced -1.0B0 by -1/1 = -1.0B0
`rat' replaced -1.0B0 by -1/1 = -1.0B0
2.0b0 
2.0b0 
2.0b0 
0 
c = 0 
`rat' replaced 1.0B0 by 1/1 = 1.0B0
`rat' replaced 1.0B0 by 1/1 = 1.0B0
2.0b0 
2.0b0 
2.0b0 
0 

我想以数字方式评估其他示例的高阶项以查看其行为,因为似乎没有正确计算限制。但是我的 Maxima 代码太慢而无法实现这一点,虽然 SymPy 在周期 3(三次)情况下运行正常(请参阅链接问题),但对于周期 4(度数 6)它也需要太长时间。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...