我需要在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);
这是对的吗?
谢谢!
答案 0 :(得分:2)
使用数值方法来解决方程,例如Newton's method或(更容易使用,而且实践中不要太慢)secant method。对于最后一个,不重写下一个x的表达式,它是这样编写的,以便舍入错误(根目录附近的问题)不会影响太多。
答案 1 :(得分:1)
最简单的解决方案是迭代已经给出的公式,直到它收敛到解决方案。这是fixed-point iteration method用于求解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。
对于一般root finding,您可能会发现其他算法更有用,例如bisection method,secant method或Newton's或Halley's方法。