Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 23:17   #1
Misha_Sil
 
Регистрация: 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();

}
}
}
Misha_Sil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Численное решение дифференциальных уравнений 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