Решение нелинейных уравнений
Решение нелинейных уравнений с помощью встроенных функций Engee
Использование функции find_zero
Для численного решения нелинейных уравнений в Engee существует функция find_zero, содержащаяся в библиотеке Roots. Ее аргументами являются функция , нули которой нужно найти (т.е. левая часть уравнения ), и интервал локализации корня (a, b).
Пример. Решим в Engee уравнение
с помощью функции find_zero.
Сначала построим график функции и локализуем корни.
using Plots, Roots;
x = -6:0.01:6;
f(x) = sin.(x) .- 0.1*x.^2 .+ 1;
plot(x, f(x))
График функции пересекается с осью Ox в четырех точках, т.е. уравнение имеет четыре корня. Определим по графику отрезки локализации каждого корня: , , и . Найдем корни уравнения на каждом отрезке с помощью функции find_zero.
x1 = find_zero(f, (-6, -4));
x2 = find_zero(f, (-4, -2));
x3 = find_zero(f, (-2, 0));
x4 = find_zero(f, (2, 4));
println("x1 = ", x1);
println("x2 = ", x2);
println("x3 = ", x3);
println("x4 = ", x4);
✏️Задание 1
Решите в Engee уравнение
с помощью функции find_zero.
Решение
using Plots, Roots;
x = -2:0.01:2;
f(x) = x.^2 .+ sin.(x) .- 0.5;
plot(x, f(x))
Из графика видно, что уравнение имеет два корня. В качестве отрезков локализации корня можно взять отрезки и .
x1 = find_zero(f, (-2, -1));
x2 = find_zero(f, (0, 1));
println("x1 = ", x1);
println("x2 = ", x2);
С помощью функции find_zero можно находить корень уравнения не только на заданном отрезке, но и вблизи некоторого начального приближения.
Пример. Решим уравнение из предыдущего примера
с помщью функции find_zero, задавая начальные приближения к каждому корню.
Сначала построим график функции .
using Plots, Roots;
x = -6:0.01:6;
f(x) = sin.(x) .- 0.1*x.^2 .+ 1;
plot(x, f(x))
В качестве начальных приближений выберем точки, дотаточно близкие к точкам пересечения графика с осью Ox: , , и .
x1 = find_zero(f, -4.6);
x2 = find_zero(f, -3);
x3 = find_zero(f, -1);
x4 = find_zero(f, 3.2);
println("x1 = ", x1);
println("x2 = ", x2);
println("x3 = ", x3);
println("x4 = ", x4);
✏️Задание 2
Решите в Engee уравнение из Задания 1
с помощью функции find_zero, задавая начальные приближения к каждому корню.
Решение
using Plots, Roots;
x = -2:0.01:2;
f(x) = x.^2 .+ sin.(x) .- 0.5;
plot(x, f(x))
В качестве начального приближения к первому корню можно взять значение , в качестве начального приближения ко второму корню – значение .
x1 = find_zero(f, -1.2);
x2 = find_zero(f, 0.4);
println("x1 = ", x1);
println("x2 = ", x2);
Использование функции find_zeros
Другая возможность – использование функции find_zeros, также содержащейся в библиотеке Roots. Эта функция находит все корни уравнения на заданном отрезке. Ее аргументами являются функция (левая часть уравнения ) и интервал (a, b), на котором нужно найти корни.
Пример. Решим в Engee уравнение
с помощью функции find_zeros.
Сначала построим график функции и найдем отрезок, на котором локализованы корни уравнения.
using Plots, Roots;
x = -1.2:0.01:1.2;
f(x) = x.^5 .- x .+ 0.5;
plot(x, f(x))
Из графика видно, что уравнение имеет три корня. Все они находятся на отрезке . Найдем корни уравнения на этом отрезке с помощью функции find_zeros.
X = find_zeros(f, (-1.2, 1))
✏️Задание 3
Решите в Engee уравнение
с помощью функции find_zeros.
Решение
using Plots, Roots;
x = -3:0.01:3;
f(x) = x.^4 .+ 3*x .- 20;
plot(x, f(x))
Из графика видно, что уравнение имеет два корня. Все они находятся на отрезке .
X = find_zeros(f, (-3, 3))