Модули и функции · встроенный MicroPython FEMM 5
scipy.optimize
Модуль предоставляет методы поиска корней и одномерного минимума вещественной функции.
Условия работы
- Алгоритмы вызывают пользовательскую f(x). Все ограничения допустимых физических параметров задаются самой задачей.
- После возврата корня проверяйте abs(f(root)); достижение лимита итераций само по себе не подтверждает сходимость.
scipy.optimize.bisectscipy.optimize.newtonscipy.optimize.fminscipy.optimize.bisectИщет корень делением интервала пополам.
scipy.optimize.bisect
scipy.optimize.bisect(f, a, b, *, xtol=2.4e-7, maxiter=100)Ищет корень делением интервала пополам.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
f | Непрерывная вещественная функция одного аргумента. |
a | Начало интервала. |
b | Конец интервала; f(a) и f(b) должны иметь разные знаки. |
xtol | Абсолютный допуск по x, по умолчанию 2.4e-7. |
maxiter | Предельное число итераций, по умолчанию 100. |
Возвращаемое значение
float — найденное приближение корня.
Пример
"Пример scipy.optimize.bisect.\nСреда: встроенный MicroPython FEMM 5.\nИщет корень делением интервала пополам.\nРезультат: float — найденное приближение корня."
import scipy as sp
def f(x):
return x*x-2
r=sp.optimize.bisect(f,1,2,xtol=1e-10)
assert abs(f(r))<1e-8
print(r)
Ожидаемый результат. Корень около 1,414.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
scipy.optimize.newtonИщет корень с численной оценкой производной по соседним значениям функции.
scipy.optimize.newton
scipy.optimize.newton(f, x0, *, tol=2.4e-7, rtol=0.0, maxiter=50)Ищет корень с численной оценкой производной по соседним значениям функции.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
f | Вещественная функция одного аргумента. |
x0 | Начальное приближение; выбирайте ненулевое. |
tol | Абсолютный допуск изменения x. |
rtol | Относительный допуск изменения x, по умолчанию 0. |
maxiter | Положительное максимальное число итераций, по умолчанию 50. |
Возвращаемое значение
float — последнее приближение корня.
Особенности вызова
- Явный аргумент производной здесь отсутствует. Начальная разность пропорциональна abs(x0), поэтому x0=0 не подходит.
Пример
"Пример scipy.optimize.newton.\nСреда: встроенный MicroPython FEMM 5.\nИщет корень с численной оценкой производной по соседним значениям функции.\nРезультат: float — последнее приближение корня."
import scipy as sp
def f(x):
return x*x-2
r=sp.optimize.newton(f,1.0,tol=1e-10)
assert abs(f(r))<1e-8
print(r)
Ожидаемый результат. Корень около 1,414.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
scipy.optimize.fminМинимизирует одномерную функцию симплексным методом.
scipy.optimize.fmin
scipy.optimize.fmin(f, x0, *, xatol=2.4e-7, fatol=2.4e-7, maxiter=200)Минимизирует одномерную функцию симплексным методом.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
f | Вещественная функция одного вещественного аргумента. |
x0 | Скалярное начальное приближение. |
xatol | Абсолютная точность по аргументу. |
fatol | Точность по значению функции. |
maxiter | Предельное число итераций, по умолчанию 200. |
Возвращаемое значение
float — аргумент найденного локального минимума.
Особенности вызова
- Скалярный алгоритм не задаёт границы допустимой области автоматически.
- Остановка происходит, когда выполнено хотя бы одно условие: разность значений функции меньше fatol ИЛИ разность аргументов меньше xatol. Подбирайте оба допуска с учётом масштаба f и проверяйте результат отдельно.
Пример
"Пример scipy.optimize.fmin.\nСреда: встроенный MicroPython FEMM 5.\nМинимизирует одномерную функцию симплексным методом.\nРезультат: float — аргумент найденного локального минимума."
import scipy as sp
def loss(x):
return (x-2)**2
# fatol имеет единицы функции, xatol — единицы аргумента.
x=sp.optimize.fmin(loss,1.0,xatol=1e-10,fatol=1e-16)
assert abs(x-2)<1e-7 and loss(x)<1e-14
print(x,loss(x))
Ожидаемый результат. Минимум около x=2; квадрат отклонения меньше 10 × 10⁻¹⁵.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.