Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР1 / ЧМ_Л1

.pdf
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
232.76 Кб
Скачать

double xOld = x0;

for (int i = 1; i <= maxIter; i++)

{

double xNew = xOld - Function(xOld) / Derivative(xOld);

if (StopByFunction(xNew, epsilon) || StopByDifference(xNew, xOld, epsilon))

{

return (xNew, i);

}

xOld = xNew;

}

return (xOld, maxIter);

}

static (double, int) SimpleIteration(double x0, double epsilon, int maxIter)

{

double xOld = x0;

for (int i = 1; i <= maxIter; i++)

{

double xNew = G(xOld);

if (StopByFunction(xNew, epsilon) || StopByDifference(xNew, xOld, epsilon))

{

return (xNew, i);

}

xOld = xNew;

}

return (xOld, maxIter);

}

static bool IsRootFound(List<double> roots, double x, double epsilon)

{

foreach (double root in roots)

{

if (Math.Abs(root - x) < epsilon * 10)

{

return true;

}

}

return false;

}

static void Main()

{

double intervalStart = -10; double intervalEnd = 10; double step = 0.1;

List<double> foundRoots = new List<double>();

List<(double, double)> intervals = FindIntervals(intervalStart, intervalEnd, step);

if (intervals.Count > 0)

{

foreach (var interval in intervals)

{

double a = Math.Round(interval.Item1, 3); double b = Math.Round(interval.Item2, 3);

Console.WriteLine($"Корень найден в интервале: [{a:F3}, {b:F3}]");

double x0 = Math.Round((a + b) / 2, 3); L = -1 / Derivative(x0);

Console.WriteLine($"Начальная точка для метода Ньютона: {x0:F3}");

var (rootNewton, iterNewton) = NewtonMethod(x0, Epsilon, MaxIterations);

double roundedRootNewton = Math.Round(rootNewton, 3);

Console.WriteLine($"Корень методом Ньютона: {roundedRootNewton}, количество итераций: {iterNewton}");

Console.WriteLine($"Начальная точка для метода простых итераций: {x0:F3}");

var (rootIter, iterIter) = SimpleIteration(x0, Epsilon, MaxIterations); double roundedRootIter = Math.Round(rootIter, 3);

Console.WriteLine($"Корень методом простых итераций: {roundedRootIter}, количество итераций: {iterIter}");

if (!IsRootFound(foundRoots, rootNewton, Epsilon))

{

foundRoots.Add(rootNewton);

}

if (!IsRootFound(foundRoots, rootIter, Epsilon))

{

foundRoots.Add(rootIter);

}

}

}

else

{

Console.WriteLine($"Корни не найдены на интервале [{intervalStart}, {intervalEnd}]");

}

Console.WriteLine("\nВсе уникальные найденные корни:"); foreach (double root in foundRoots)

{

Console.WriteLine($"Корень: {Math.Round(root, 3)}");

}

}

}

Соседние файлы в папке ЛР1