Помогите объяснить строчки в коде:
//---------------------------------------------------------------------------
#include
#include
#include
//---------------------------------------------------------------------------
double func(double x)
{
double y;
y = -(expf(-x)) + 0.5 + sqrt(fabs(x));
return y;
}
double** findRoot(double xmin, double xmax, double step, int count_intervs)
{
double** intervs;
int n = fabs((xmax - xmin) / (2 * step));
intervs = (double**)malloc(sizeof(double*) * n);
for (int i = 0; i < n; i++)
{
intervs[i] = (double*)malloc(sizeof(double) * 2);
intervs[i][0] = 0.0;
intervs[i][1] = 0.0;
}
for (double x = xmin; x <= xmax; x += step)
{
double y = func(x);
printf("y: %lf\tx: %lf\n", y, x);
if (y * func(x + step) < 0)
{
intervs[count_intervs][0] = x;
intervs[count_intervs++][1] = x + step;
}
}
return intervs;
}
double Mpol(double a, double b, double step)
{
double c;
while ((b - a) / 2 > step)
{
c = (a + b) / 2;
if ((func(a) * func(c)) > 0) a = c;
else b = c;
}
return c;
}
double Mxo(double xmin, double xmax, double step)
{
double x_kor = 0;
double tmp;
do
{
tmp = x_kor;
x_kor = xmax - func(xmax) * (xmin - xmax) / (func(xmin) - func(xmax));
xmin = xmax;
xmax = tmp;
} while (fabs(x_kor - xmax) > step);
return x_kor;
}
int main(int argc, char* argv[])
{
int count_intervs = 0;
double** res = findRoot(-1.0, 1.0, 0.05, count_intervs);
printf("\nintervals: %d\n\n", count_intervs);
for (int i = 0; i < count_intervs; i++)
{
printf("[%lf;%lf]\n", res[i][0], res[i][1]);
}
double g1 = Mxo(-1.0, 1.0, 0.001);
double g2 = Mpol(-1.0, 1.0, 0.001);
printf("\nkor:%lf\n\n", g1);
printf("\nkor:%lf\n\n", g2);
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |