当函数几乎是“平坦的”时,牛顿-拉夫森法不可能]]

问题描述 投票:0回答:1

我正在尝试计算x ^ x的值。我已经计算出它是导数,而我使用牛顿-拉夫森方法,找到给定a的f(x)= x ^ x-a的根。

这是我用来计算下一个近似值的函数:

double xkp1(double xk, double a){
    double lnxp1 = log(xk) +1;
    return xk -( (fx(xk, a))  /  (exp(xk*log(xk)) * (log(xk) + 1)  ));
}

其中函数fx的定义方式是:

double fx(double x, double a){
    return exp(x*log(x))-a;
}

现在,仅当xk的起始值已经接近根值时,此方法才能正常工作。如果相差+ -0.5,则xk会爆炸到非常高的值,并且f(x)变为无穷大。现在,我认为这里可能出问题了-与x ^ x的实际值相比,x ^ x的导数非常小,因此整个(fx(xk, a)) / (exp(xk*log(xk)) * (log(xk) + 1) )变为+无限大-切线超过了根。这意味着我需要更高的双精度,但有可能吗?如果没有,可以在方法中进行一些修改以使其在这种情况下适用吗?

我正在尝试计算x ^ x的值。我已经计算出它的导数,并且我正在使用牛顿-拉夫森方法来找到给定a的f(x)= x ^ x-a的根。这是我用来计算的函数...

c++ math double numeric
1个回答
0
投票

我假设您只对正x值感兴趣,而不对负整数(也有实数值)感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.