
- •2.Метод деления отрезка пополам решения алгебраических уравнений.
- •3.Метод простой итерации решения алгебраических уравнений.
- •4.Метод наименьших квадратов аппроксимации функций.
- •5.Интерполяционный многочлен в форме Лагранжа.
- •11. Численное решение обыкновенных дифференциальных уравнений. Метод Рунге-Кутта.
- •10.Численное решение обыкновенных дифференциальных уравнений. Метод Коши Задача Коши для одного обыкновенного дифференциального уравнения.
- •7.Квадратурные формулы вычисления определенных интегралов. Формула трапе-ций..
- •9.Численное решение обыкновенных дифференциальных уравнений.
- •15. Численное решение уравнения Пуассона
- •13. Сеток метод
- •14. Численное решение уравнения теплопроводности
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;
}