gpt4 book ai didi

c++ - Newton Raphson 中的波动值

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

我正在尝试使用 Newton Raphson 方法找到 N 个根。这是我对相同的实现...

double derive(int guess, int m, int n) {
return guess - (pow(guess, n)-m)/(n*pow(guess, n-1));
}

double getNRoot(int m, int n) {
double guess = 1;
double nextGuess = derive(guess, m, n);
while (fabs(guess-nextGuess) >= 0.0001) {
guess = nextGuess;
nextGuess = derive(guess, m, n);
printf ("%f %f\n", guess, nextGuess);
}
return nextGuess;
}

它适用于许多值,但适用于 m=8n=4。当m=8n=4 时,guessnextGuess 在两个值之间波动。

2.750000 1.750000
1.750000 2.750000
2.750000 1.750000
...

那么这里有什么问题呢?

最佳答案

derive 函数返回一个 double 但操作 int 变量。即使在函数调用中您提供了 int,您也可以在函数原型(prototype)中放置 double 以获得适当的精度:

 double derive(double guess, double m, double n) {
return guess - (pow(guess, n)-m)/(n*pow(guess, n-1));
}

或者至少为非 pow 用途声明局部 double 变量:

 double derive(int guess, int m, int n) {
double d_guess = guess;
double d_n = n;
double d_m = m
return d_guess - (pow(d_guess, n)-d_m)/(d_n*pow(d_guess, n-1));
}

考虑到这一点,您可能应该审查整个实现。也就是说,在需要“实”数时使用 double ,在使用“整数”数时使用“int”。

关于c++ - Newton Raphson 中的波动值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19555570/

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