您的任务是使用牛顿法计算2的平方根-稍有扭曲。您的程序将使用牛顿法计算迭代,并输出后续迭代的源代码(必须能够执行相同的操作)。
牛顿的方法已在Wikipedia上进行了详尽的描述。
要使用牛顿法计算平方根2,您:
- 限定
f(x) = x^2 - 2
- 限定
f'(x) = 2x
- 定义
x[0]
(初步猜测)= 1
- 限定
x[n+1] = x[n] - (f[n] / f'[n])
每次迭代会将x [n]移到更接近于2的平方根。所以-
x[0] = 1
x[1] = x[0] - f(x[0])/f'(x[0]) = 1 - (1 ^ 2 - 2) / (2 * 1) = 1.5
x[2] = x[1] - f(x[1])/f'(x[1]) = 1.5 - (1.5 ^ 2 - 2) / (2 * 1.5) = 1.416666667
x[3] = x[2] - f(x[2])/f'(x[1]) = 1.416666667 - (1.416666667 ^ 2 - 2) / (2 * 1.416666667) = 1.414215686
- 等等
您的程序将:
- 计算
x[n]
其中n
是程序已经运行了的时间量 - 将源代码以相同的语言输出到有效的程序,该程序必须计算
x[n+1]
并满足此问题的相同条件。 - 源代码的第一行必须是计算结果,并带有正确的注释。如果源在第一行上要求某些特殊内容(例如shebang),则结果可以放在第二行上。
注意
- 您的程序必须使用初始猜测
x[0] = 1
- 该标准漏洞申请
- 禁止任何内置功能,平方根或xroot函数
- 您的程序不得接受任何输入。它必须完全独立。
您的分数是您初始程序的大小,以UTF-8字节为单位。最低分获胜。
对我来说,这种简化是有效的。只要它使用牛顿法执行计算
—
lochok
程序是输出近似值还是仅输出源代码?可以将先前的解决方案作为输入吗?
—
艾米丽
它必须在第一行输出近似值(带注释),并带有下一次迭代的源代码。如果语言需要,可以在逼近之前加上shebang。程序(也不生成程序)不得接受任何输入。
—
lochok 2014年
x = x-(x*x-2)/(2*x)
?