首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代牛顿递推法(Java)

迭代牛顿递推法(Java)
EN

Stack Overflow用户
提问于 2021-12-12 14:56:01
回答 1查看 67关注 0票数 0

我需要使用牛顿的方法,使用递归。我有一段使用迭代牛顿方法的代码,但是我对编程非常陌生,所以我无法思考如何将它转化为递归。我真的很想做一些视觉演示。

代码语言:javascript
复制
public static double f(double x){ 
    return x*x*x-3.5*x*x+0.5*x + 5;
}
public static double prf(double x) { 
    return 3 * x * x - 7 * x + 0.5;
}
// ВЫЧИСЛЕНИЕ КОРНЯ МЕТОДОМ НЬЮТОНА
public static double x_newton(double a, double e) {
    double x = a; 
    double razn;
    do {
        double xn = x - f(x) / prf(x); 
        razn = Math.abs(xn - x); 
        x = xn; 
    } while (razn > e); 

    return x - f(x)/prf(x); 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-12 20:28:23

通常我们想换一种方法,也就是消除递归。在尾部递归的情况下:

代码语言:javascript
复制
func(arguments) {
    if (condition) {
        return something(arguments)
    }
    arguments = modify_arguments(arguments)
    return func(arguments)
}

有一个机械重写:

代码语言:javascript
复制
func(arguments) {
    while (!condition) {
        arguments = modify_arguments(arguments)
    }
    return something(arguments)
}

现在您只需要向后应用它。

尽管如此,while (razn > e)并不是终止循环的健壮方法。如果导数很大,它可能终止得太早,远离根。

此外,使用英语作为标识符。对于俄语和英语读者来说,razn看起来同样丑陋。delta_x好多了。pr也是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70324693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档