【c++】牛顿法求方程的解
例:


point:牛顿法易失败,需要更换初始值重新进行迭代计算。
double Newton(double t, double y, double x ) { double epsilon = 1e-14; int M = 1000; double F; double dF; double ddy; int count; double dy; double dy_ = 0.0; int flag = 0; START: dy = dy_; count = 0; while (1) { F = pow(dy, 3) - 6 * pow(t, 3) * x * pow(y, 2) * dy + pow(t, 3) * pow(x, 3) + 8 * pow(t, 6) * pow(y, 6); dF = 3 * pow(dy, 2) - 6 * pow(t, 3) * x * pow(y, 2); ddy = F / dF; if (fabs(ddy / dy) <= epsilon) { return dy; } else { dy -= ddy; count++; } if (count < M) { continue; } else { flag++; if (dy_ == 0) { dy_ -= 2; } else if (dy_ < 0) { dy_ = -dy_; } else { dy_ += 2; dy_ = -dy_; } //std::cout << "迭代不成功,更换初始值为: " << dy << "\n"; if (flag >= 1000) { std::cout << "牛顿法失败" << '\n'; return 0; } } goto START; } return 0; }

浙公网安备 33010602011771号