Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2021 14:43:34

x800
Зарегистрирован: 2021-10-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

экстремум функции

Добрый день.
Задался целью изучить Python.
Поставил перед собой задачу - портировать расчет, который используем в работе, из маткада в python.
И вроде все шло удачно, но столкнулся с таким моментом, который не получается реализовать, а именно найти экстремум функции Y(Х) в заданных интервалах X, с заданием начального приближения переменной Х. Вот аналогичный пример в маткаде ссылка на пример - интересующий фрагмент прикрепил картинкой.

Все, что смог накопать, это использование библиотеки sympy, а также использование функции maximum и minimum из sympy.calculus.util:
x = symbols(“x”)
f = -1*(x ** 7) + 5 * (x **3) - 3 * x
interv = Interval(-2.0, 0.0)
res_min = minimum(f, x, interv)
res_max = maximum(f, x, interv)

Но как задать начальное приближение переменной Х = 1, чтобы результаты получились как в примере -0,452 и -1,162 ?

Заранее благодарю.

Прикреплённый файлы:
attachment Снимок.PNG (122,0 KБ)

Офлайн

#2 Окт. 17, 2021 16:32:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8029
Репутация: +  728  -
Профиль   Отправить e-mail  

экстремум функции

x800
Задался целью изучить Python.
Поставил перед собой задачу - портировать расчет, который используем в работе, из маткада в python.
Зачем? Вот ты теперь сидишь и сделать ничего не можешь с этим. Обучение классное, конечно. Это как мальчишка решил научиться плавать и сиганул на десятиметровую глубину, а там понял, что плавать-то он не умеет, и орёт окружающим, чтобы спасли его, бросили ему спасательный круг.

Хочешь научиться - начинай, как все начинают, с простого чего-нибудь. Если плавать учишься, начинай с лужи, где воды по пояс. А если ты такой умный и тонешь уже в какой-то яме, то тони тихонько, не ори.



Отредактировано py.user.next (Окт. 17, 2021 16:36:47)

Офлайн

#3 Окт. 17, 2021 18:55:58

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 579
Репутация: +  58  -
Профиль   Отправить e-mail  

экстремум функции

 from scipy import optimize
def f(x):
	return -1*(x ** 7) + 5 * (x **3) - 3 * x
print(optimize.minimize(f,[1]))

       fun: -0.8981283963885099
 hess_inv: array([[0.07846038]])
      jac: array([-1.82539225e-06])
  message: 'Optimization terminated successfully.'
     nfev: 14
      nit: 5
     njev: 7
   status: 0
  success: True
        x: array([0.45161859])
Process finished with exit code 0
Вы чего-нибудь понимаете?…
я нет…

при x = -1

       fun: -1.49841576523223
 hess_inv: array([[0.01842377]])
      jac: array([5.96046448e-08])
  message: 'Optimization terminated successfully.'
     nfev: 16
      nit: 6
     njev: 8
   status: 0
  success: True
        x: array([-1.16240037])
Process finished with exit code 0

Отредактировано xam1816 (Окт. 17, 2021 19:04:46)

Офлайн

#4 Окт. 17, 2021 19:12:52

x800
Зарегистрирован: 2021-10-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

экстремум функции

xam1816
x: array(0.45161859)
xam1816
x: array(-1.16240037)


то, что нужно!
спасибо большое!

почитал про optimize.minimize, получается и интервал (как в примере, -2 < x < 0 ) задать можно через параметр bounds!

 x1=[(-2, 0)]
print(optimize.minimize(f,[1], bounds = x1))

то, что искал! спасибо, xam1816, еще раз.

Отредактировано x800 (Окт. 17, 2021 21:25:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version