0

我需要在 C 中求解这个超越方程:

x = 2.0 - 0.5sen(x)

我试过这个:

double x, newx, delta;

x = 2.0 - 0.5; 
newx = sin(x);
delta = fabs(newx * x);

printf("%f", delta);

这是对的?

谢谢!

4

2 回答 2

2

使用数值方法来求解您的方程,例如牛顿法或(更容易使用,并且在实践中不会太慢)割线法。对于最后一个,不要为下一个 x 重写表达式,这样写是为了不影响舍入误差(根附近的问题)。

于 2013-03-25T16:44:35.903 回答
1

最简单的解决方案是迭代您给出的公式,直到它收敛到解决方案。这是求解类型方程的定点迭代方法x = f(x)

#define TOLERANCE 1e-8
#define MAX_ITER 50

double solve_equation() {
    double x = 1.0; /* 1.0 is our initial guess */
    double x_old;
    int i = 0;      /* iteration counter */
    do {
        x_old = x;
        x = 2 - 0.5*sin(x); /* magic! */
        i++;
    } while (fabs(x-x_old)/x > TOLERANCE && i < MAX_ITER);

    return x;
}

在这种特殊情况下,该方法收敛速度很快,迭代次数的上限是不必要的。答案原来是 1.50121007326。

对于一般求根,您可能会发现其他算法更有用,例如二分法割线法牛顿法或哈雷法。

于 2013-03-25T17:58:41.367 回答