Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
79.06 Кб
Скачать

2.Метод деления отрезка пополам решения алгебраических уравнений.

Другие названия: метод бисекции (bisectionmethod), метод дихотомии.

Метод половинного деления – простейший численный метод для решения нелинейных уравнений вида f(x)=0, где функция f(x) должна быть непрерывной на искомом отрезке [xL; xR], причем функция должна принимать значения разных знаков, т.е. должно выполняться условие:

f(xL) * f(xR) < 0.

С непрерывности функции f(x) следует, что на интервале [xL; xR] существует, по крайней мере, один корень уравнения (если их несколько, то метод находит один из них).

Выберем точку – середину интервала:

xM = (xR + xL) / 2.

Если f(xM) = 0, то корень найден. Если f(x)≠0, то разобьем этот интервал на два: [xL; xM] и [xM; xR].

Теперь найдем новый интервал, на котором функция изменяет знак. Повторим описанную процедуру до тех пор, пока не получим требуемую точность или превысим максимально допустимое количество итераций.

Геометрическая интерпретация метода:

Реализация методана C#:

public static double Bisection(string expression, double Left, double Right, double epsilon = 0.000001)

{

if (Helpers.Function(expression, Left) * Helpers.Function(expression, Right) >= 0)

{

throw new ArgumentException("F(a) and f(b) should have opposite signs.");

}

intiterationCount = 0;

double c;

do

{

c = (Left + Right) / 2;

if (Helpers.Function(expression, Left) * Helpers.Function(expression, c) < 0)

{

Right = c;

}

else

{

Left = c;

}

if (Math.Abs(Helpers.Function(expression, c)) <= epsilon || (Right - Left) <= epsilon || iterationCount == 1000)

{

break;

}

iterationCount++;

}

while (true);

return c;

}

3.Метод простой итерации решения алгебраических уравнений.

Уравнение f(x)=0 с помощью некоторых преобразований необходимо переписать в виде x=f(x).

Уравнение f(x)=0 эквивалентно уравнению x=x+λ(x)f(x) для любой функции λ(x)≠0. Возьмем f(x)=x-λ(x)f(x) и выберем функцию (или переменную) λ(x)≠0 так, чтобы функция φ(x) удовлетворяла необходимым условиям.

Для нахождения корня уравнения x=φ(x) выберем некоторое начальное значение x0, которое должно находиться как можно ближе к корню уравнения. Дальше с помощью итерационной формулы xn+1=φ(xn) будем находить каждое следующее приближение корня уравнения.

Пример: x2-5x+6=0

Преобразования в вид x=f(x):

x2-5x=-6, x*(x-5)=-6, x=-6/(x-5)=f(x).

Реализация метода на C#:

public static double SimpleIterations(string expression, double xa, double epsilon = 0.00001)

{

double x = 0.0;

doublexPrev = xa;

variter = 0;

do

{

x = Helpers.Function(expression, xPrev);

if (Math.Abs(x - xPrev) <= epsilon || iter == 1000){

break;

}

xPrev = x;

iter++;

}

while (true);

return x;

}