|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.04.2013, 23:17 | #1 |
Регистрация: 16.02.2013
Сообщений: 8
|
Численное решение алгебраических уравнений
почему не работает? цикл получается бесконечный....в чем ошибка?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _1_laba_АВМ { class Program { public static double Func(double x) { return x * x * x + 6 * x * x - 0.02 * Math.Exp(x) - 14; } public static double FuncFi(double x) { return x - (x * x * x + 6 * x * x - 0.02 * Math.Exp(x) - 14) / (3 * x * x + 12 * x - 0.02 * Math.Exp(x)); } public static void Niyton(double x0, double e) { double x1 = 0, x2 = 0; int k; for (k = 0; Math.Abs(x1 - x0) <= e; k++) { x0 = x1; x1 = FuncFi(x0); Console.WriteLine("x{0} = {1}", k, x1); if (Math.Abs(x1 - x0) > e) { Console.WriteLine("d{0}={1}", k, x1 - x2); } x1 = x2; Console.WriteLine(); } Console.WriteLine("Корень уравнения: х1={0}, k={1}", x1, k); Console.WriteLine("f({0})={1}", x1, Func(x1)); } public static void Main() { int a = -6, b = 2; int k; double e, h, x, y1, y2; Console.WriteLine("Значение шага h, точность e"); h = double.Parse(Console.ReadLine()); e = double.Parse(Console.ReadLine()); x = a; k = 0; Console.WriteLine("Задание1. Метод отделения корней"); do { y1 = Func(x); y2 = Func(x + h); if (y1 * y2 < 0) { k++; Console.WriteLine("Отрезок с корнем: a1={0}, b1={1}", x, x + h); } x += h; } while (x <= b); Console.WriteLine("Число корней: k={0}", k); Console.WriteLine("Задание 2. Метод Ньютона"); x = a; do { y1 = Func(x); y2 = Func(x + h); if ((6 * x + 12 - 0.02 * Math.Exp(x)) * Func(x) > 0) { Niyton(x, e); // Начало отрезка } else { Niyton(x + h, e); //Конец отрезка } x += h; } while (x <= b); Console.WriteLine("Число корней: k={0}", k); Console.WriteLine("Задание 4. Метод деления отрезка пополам"); double x0, x1, x2, y0; x0 = a; x1 = b; do { y0 = Func(x0); y1 = Func(x1); x2 = (x0 + x1) / 2; y2 = Func(x2); if ((y0 * y2) > 0) { x0 = x2; y0 = y2; } else { x1 = x2; y1 = y2; } } while ((x1 - x0) > e); Console.WriteLine("Число корней: k={0}", k); Console.ReadKey(); } } } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Численное решение дифференциальных уравнений | Sargil | Помощь студентам | 3 | 28.12.2012 11:00 |
решение алгебраических и трансцендентных уравнений | Золото | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 05.06.2012 07:42 |
Решение алгебраических и трансцендентных уравнений | sasa2 | Microsoft Office Excel | 1 | 13.04.2012 16:28 |
численное решение нелинейных уравнений | Люстик | Помощь студентам | 0 | 11.05.2011 21:14 |
решение системы линейных алгебраических уравнений | LediDashuta | Помощь студентам | 0 | 23.05.2010 18:40 |