- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 C 语言编写 Riemann Zeta 函数,但我对负赔率有很大的问题。因为根据定义,偶数负数都是 0。只针对实数的函数,不复杂。所以 0..1 是未定义。我知道我犯了一些数学错误,但我今天开始阅读有关此函数的内容,并且我正在尝试学习。
https://en.wikipedia.org/wiki/Riemann_zeta_function
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double zeta(double s, long long int n)
{
double p=0.0;
if(s<0 && fmod(s,2)==0)
{
return p;
}
if(s==0) { return -0.5;}
if(s>0 && s<=1)
{
puts("Undefined. ");
exit(-1);
}
long long int i;
for(i=n; i>0; i--)
{
p+=pow(i,-s);
}
return p;
}
int main()
{
double s;
puts("Enter real number to Zeta function: ");
scanf("%lf",&s);
printf("\n%.15lf",zeta(s,1000000));
return 0;
}
这只是一个草图......这里没有什么专业的!
示例:zeta(-5) = -0.003968253968253它给出 1.036927755143338...
我只对负真实问题有疑问...我使用的是 Windows 10,使用 GCC 的 Codeblocks。
代码已使用@NPE 贡献进行了更新,但仍然无法处理负的实际赔率...
最佳答案
我没有参与评论,抱歉。
按照 zeta 函数的定义,简单的编码方式是(我只是将代码中的 s 更改为 -s,并添加了“收敛级别 n”作为参数)
double zeta_simple(double s, long long int n)
{
double p=0.0;
long long int i;
for(i=1; i<=n; i++)
{
p+=pow(i,-s);
}
return p;
}
但是问题是,您开始在“小”数字之前添加“大”数字,很快您就会遇到下溢操作。所以你想做的是
double zeta(double s, long long int n)
{
double p=0.0;
long long int i;
for(i=n; i>0; i--)
{
p+=pow(i,-s);
}
return p;
}
您可以使用 s=2 来测试收敛性,它会收敛到 PI^2/6.0,而 s=4 会收敛到 PI^4/90.0
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679L
int main()
{
long long int n;
for (long long int n=10; n<=100000000; n*=10)
{
printf("%28.16f\t %28.16f\n", zeta(4.0, n), zeta2(4.0, n));
}
printf("%s=%20.16f\n\n","PI^4/90", PI*PI*PI*PI/90.0);
for (long long int n=10; n<=10000000000; n*=10)
{
printf("%28.16f\t %28.16f\n", zeta(2.0, n), zeta2(2.0, n));
}
printf("%s=%20.16f\n","PI^2/6 ", PI*PI/6.0);
}
你得到了
1.0820365834937564 1.0820365834937566
1.0823229053444732 1.0823229053444725
1.0823232333783044 1.0823232333783073
1.0823232337108049 1.0823232337108359
1.0823232337111379 1.0823232337109849
1.0823232337111381 1.0823232337109849
1.0823232337111381 1.0823232337109849
1.0823232337111381 1.0823232337109849
PI^4/90= 1.0823232337111379
1.5497677311665408 1.5497677311665408
1.6349839001848929 1.6349839001848925
1.6439345666815597 1.6439345666815606
1.6448340718480596 1.6448340718480665
1.6449240668982261 1.6449240668982523
1.6449330668487265 1.6449330668487985
1.6449339668482315 1.6449339668477756
1.6449340568482265 1.6449340573291047
1.6449340658482263 1.6449340600880324
1.6449340667482264 1.6449340600880324
PI^2/6 = 1.6449340668482264
看看 zeta_simple
的收敛如何在一段时间后停止...为了继续收敛,您必须使用 zeta
您还可以看到,对于 10000000000 次操作(因此使用 long long int),您只能获得 s=2 的 9 位精度。随着 s 的增加,收敛速度也会增加。
因此,为了使小 s 变得高效,人们使用加速收敛公式。
如果您想进一步挖掘,我建议您查看 https://math.stackexchange.com/questions/183680/modern-formula-for-calculating-riemann-zeta-function
另外,当你开始探索 s
复杂性时,真正有趣的是
关于c - C 中负奇实数的黎曼 Zeta 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285193/
关于 zeta function 的 SciPy 文档状态: y=zeta(x,q) returns the Riemann zeta function of two arguments: sum((
我正在尝试用 C 语言编写 Riemann Zeta 函数,但我对负赔率有很大的问题。因为根据定义,偶数负数都是 0。只针对实数的函数,不复杂。所以 0..1 是未定义。我知道我犯了一些数学错误,但我
程序应该模拟一个行星围绕另一个行星旋转。 我使用 gltranslatef 让行星绕大行星移动,但问题是行星在大行星上方时应该隐藏起来,因为 dz 是 -0.5。 但是,如果我测试程序,我总是会看到红
我将 sympy 1.3 与 python 3.6.6 结合使用,并尝试使用 sympy_parser.parse_expr 来从字符串创建 sympy 表达式。使用 'zeta' 执行此操作效果很好
注:更新于 06/17/2015。当然这是可能的。请参阅下面的解决方案。 即使有人复制并粘贴此代码,您仍然需要做很多清理工作。另请注意,在从 Re(s) = 0 到 Re(s) = 1 :) 的关键地
在图 6 中 J. Brian Conrey 的论文“The Riemann Hypothesis”中,有素数定理中误差项的傅立叶变换图。请参阅下图中左侧的图: 在一篇名为 Primes out of
我是一名优秀的程序员,十分优秀!