gpt4 book ai didi

c - 如何在 C 中用连分数实现自然对数​​?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:17 25 4
gpt4 key购买 nike

这里有个小问题。从这个公式创建一些东西:

enter image description here

这就是我所拥有的,但它不起作用。弗兰基,我真的不明白它应该如何工作。我试着用一些错误的指令来编写它。 N 是迭代次数和分数部分。我认为它以某种方式导致递归但不知道如何。

感谢您的帮助。

double contFragLog(double z, int n)
{
double cf = 2 * z;
double a, b;
for(int i = n; i >= 1; i--)
{
a = sq(i - 2) * sq(z);
b = i + i - 2;
cf = a / (b - cf);

}
return (1 + cf) / (1 - cf);
}

最佳答案

中央环路很乱。返工。也不需要递归。只需先计算最深的项,然后再算出来。

double contFragLog(double z, int n) {
double zz = z*z;
double cf = 1.0; // Important this is not 0
for (int i = n; i >= 1; i--) {
cf = (2*i -1) - i*i*zz/cf;
}
return 2*z/cf;
}

void testln(double z) {
double y = log((1+z)/(1-z));
double y2 = contFragLog(z, 8);
printf("%e %e %e\n", z, y, y2);
}

int main() {
testln(0.2);
testln(0.5);
testln(0.8);
return 0;
}

输出

2.000000e-01 4.054651e-01 4.054651e-01
5.000000e-01 1.098612e+00 1.098612e+00
8.000000e-01 2.197225e+00 2.196987e+00

[编辑]

根据@MicroVirus 的提示,我找到了double cf = 1.88*n - 0.95;double cf = 1.0; 工作得更好.随着更多的术语被使用,所使用的值产生的差异越来越小,但一个好的初始 cf一个好的答案需要更少的术语,特别是对于 |z|接近 0.5。我学习时可以在这里完成更多工作 0 < z <= 0.5 . 2*n+1的@MicroVirus 建议由于 n 中的一个差一个,可能接近我的建议是。

这是基于逆向计算并注意到CF[n]的值作为n增加。我很惊讶“种子”值似乎不是一些漂亮的整数方程。

关于c - 如何在 C 中用连分数实现自然对数​​?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com