私はC++の助けを借りて次の方程式を解こうとしています:3sin(sqrt(x))+ 0.35x --3.8 = 0
解のある領域は[2、3]
です次のコードを書きました:
float f(float x)
{
return (3 * sin(sqrt(x))) + (0.35 * x) - 3.8; //this is equation i am trying to solve
}
float g(float x, float(*f_ptr)(float))
{
const float CONST = 0.1f; //const used to solve equation
return CONST * f_ptr(x) + x;
}
void Task4_CalculateSomething()
{
float x0, //starting aproximation
xk, //current aproximation
a = 2, //left barrier
b = 3, //right barrier
epsilon = 0.001; //allowed error
const float REAL_SOLUTION = 2.2985; //real solution of selected equation
printf("Setup starting aproximation: ");
scanf("%f", &x0);
do
{
xk = g(x0, f); //calc current aproximation
if (fabs(xk - x0) < epsilon) //if Xn - Xn-1 fits the allowed error, the solution must be found
break; //then we exit
else
x0 = xk; //else reset x values
}
while (fabs(a - x0) > epsilon && fabs(b - x0) > epsilon);
printf("Found solution: %f\nReal solution: %f\n", xk, REAL_SOLUTION);
}
しかし、それは私に-1。#IND00のような奇妙な結果を与えます。それは私がそれが何であるかさえ知りません。
そして、私はそこにエラーを見つけることができません...