作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已尝试对多项式实现牛顿法。喜欢:
double xn=x0;
double gxn=g(w, n, xn);
int i=0;
while(abs(gxn)>e && i<100){
xn=xn-(gxn/dg(w, n, xn));
gxn=g(w, n, xn);
i++;
}
其中 g(w, n, xn)
计算函数的值,dg(w, n, xn)
计算导数。
作为 x0
,我使用起点 M
,这是我使用 Sturm 定理找到的。
我的问题是这种方法对于某些多项式是发散的,例如 x^4+2x^3+2x^2+2x+1
。也许它不规则,但我注意到当方程的解为负数时会发生这种情况。我在哪里可以找到解释?
编辑:dg
double result=0;
for(int i=0; i<n+1; i++)
result+=w[i]*(n-i)*pow(x, n-i-1);
其中 n 是多项式的次数
最佳答案
我不确定您为什么会说它是发散的。
我以与您类似的方式实现了牛顿法:
double g(int w[], int n, double x) {
double result = 0;
for (int i = 0; i < n + 1; i++)
result += w[i] * pow(x, n - i);
return result;
}
double dg_dx(int w[], int n, double x) {
double result = 0;
for (int i = 0; i < n ; i++)
result += w[i] * (n - i) * pow(x, n - i - 1);
return result;
}
int main() {
double xn = 0; // Choose initial value. I chose 0.
double gx;
double dg_dx_x;
int w[] = { 1, 2, 2, 2, 1 };
int i = 0;
int n = 4;
do {
gx = g(w, n, xn);
dg_dx_x = dg_dx(w, n, xn);
xn = xn - (gx / dg_dx_x);
i++;
} while (abs(gx) > 10e-5 && i < 100);
std::cout << xn << '\n';
}
它产生 -0.997576
,接近解 -1
。
关于c++ - 牛顿法对某些多项式发散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402371/
在 Nsight Visual Studio 中,我们将有一个图表来呈现“已采取”、“未采取”和“分歧”分支的统计信息。我对“不采取”和“分歧”之间的区别感到困惑。例如 kernel() { if
在 Nsight Visual Studio 中,我们将有一个图表来呈现“已采取”、“未采取”和“分歧”分支的统计信息。我对“不采取”和“分歧”之间的区别感到困惑。例如 kernel() { if
我想提交并将其复制到我的存储库中的其他地方。 现状: A--B--C--D (branch1) \ E--F (branch2) 期望的情况: A--B--C--D--F'(bran
以下一系列 git 命令导致 repos 出现分歧。我究竟做错了什么? 来自 GitLab 的 Fork 项目 call the parent project 'upstream' 从 fork 项目
我是一名优秀的程序员,十分优秀!