Методы решения нелинейных уравнений - C#
Формулировка задачи:
Доброго времени суток!
Знаю что тема уже довольно избита, но вопросы по ней всё таки имеются.
Если быть точнее, то вопрос касательно двух простых методов - Ньютона и простой итерации.
Делаю по аналогам, которые находил в интернете, но возникает 2 проблемы, которые не удается решить:
1. Метод Ньютона уходит в бесконечный цикл;
2. Метод простой итерации выдает бесконечность в большинстве случаев или выдает какую то хрень.
Собственно вот код:
За пару лет до этого, приходилось делать то же самое, только на С++ и алгоритм немного отличался. Я его переписал под шарп и результат всё тот же. Вот код:
И вот метод простой итерации тоже в двух вариантах:
Ниже пример расчета методов.
// Вычисляемое уравнение static double equat(double x) { return Math.Pow(x, 2) - Math.Cos(Math.PI / x); } // Его производная static double equatDiverative(double x) { return 2 * x + (1 / x); } public static void MethodNewton() { int n = 0; double x0, eps = 0.001, x = 1.2; Console.WriteLine("x0 = {0}\neps = {1}", x, eps); do { x0 = x - equat(x) / equatDiverative(x); x = x0; n++; } while (Math.Abs(equat(x)) >= eps); Console.WriteLine("Result: {0}\nIterat: {1}", x, n); }
do { x = x - equat(x) / equatDiverative(x); n++; } while (Math.Abs(equat(x)) >= eps);
public static void MethodIterat() { int n = 0; double a = 1.2, b = 0.6, eps = 0.0001, x = 0; Console.WriteLine("a = {0}\neps = {1}", a, eps); double xPrev = a; var iter = 0; do { x = equat(xPrev); if (Math.Abs(x - xPrev) <= eps || iter == 1000) { break; } xPrev = x; iter++; } while (true); Console.WriteLine("Result: {0}\nIterat: {1}", xPrev, n); }
do { x = equat(x); c = x; n++; } while (Math.Abs(x - с) >= eps || n == 1000);
Решение задачи: «Методы решения нелинейных уравнений»
textual
Листинг программы
do { x = equat(x); c = x; n++; } while (Math.Abs(x - с) >= eps || n == 1000);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д