= np.linspace(0., 2., 201)
У = f(x)
pit.plot(x, y, label=’$2x-l+2\\cos(\\pi x) = 0$’) xO = optimize.brentq(f, 0., 1.)
= optimize.brentq(f, 1., 2.) print ’x:’, xO, ’,’, xl
Pit.scatter(xO, 0)
Pit.scatter(xl, 0)
Pit.Iegend(loc=0)
Рис. 3.45 Решение нелинейного уравнения
pit.xlabel(’$х$’) pit.ylabel(’$f(x)$9) pit.grid(True) pit.show()
x. 0.5 , 1.23648444824
Для решения систем нелинейных уравнений используется функция f solve в которой нужно задать уравнения системы и начальное приближение к шению. Рассмотренное выше уравнение 2х — 1 + 2cos(7rx) = 0 будем рассм ривать как систему
1 — 2х0 — Xi = 0,
Х\ — 2cos(7nr0) = 0.
В следующей программе решение (см. рис. 3.46) получено при использоваг функции fsolve().
import mimpy as np import matplotlib.pyplot as pit import scipy.optimize as optimize def F(x):
out = [1 - 2*x[0] - x [1] ]
o
Рис. 3.46 Решение системы уравнений
ut.append(х[1] - 2*np.cos(np.pi*x[0])) return out
x = np.1inspace(0., 2., 201)
yl = 1 - 2*x
y2 = 2*np.cos(np.pi*x)
pit.plot(x, yl, label=,$l - 2x$>)
pit.plot(x, y2, ’ — \ label=’$2\\cos(\\pi x)$>)
xO = optimize.fsolve(F, [0.5, 0.])
xl = optimize.fsolve(F, [1.5, 0.])
print ’x:’, xO, ’,*, xl
pit.scatter(xO[0], xO [1])
pit.scatter(xl[0], xl [1])
plt.legend(loc=0)
plt.xlabel(’$x$’)
Pit.ylabel(’ $f(x)$’)
Pit.grid(True)
Pit. showO
Для минимизации одномерных функций используются различные алгоритмы: например, в функции goldenO — метод золотого сечения, в brent() метод Брента (метод обратной параболической интерполяции). В нижеприведенной программе используется функция fminboundO для минимизации функции /(л;) = ж2(ж2 - ж - 6) на интервалах [-3,0] и [0,3] (рис. 3.47).
Рис. 3.47 Минимизация одномерной функции
import mimpy as np import matplotlib.pyplot as pit import scipy.optimize as optimize def f(x):
return x+x*(x*x - x - 6) x = np.linspace(-3., 3., 201) у = f(x)
pit.plot(x, y, labels$x~2(x~2 - x -6)$’)
xO = optimize.fminbound(f, -3., 0.)
xl = optimize.fminbound(f, 0., 3.)
print ’x:y , xO, W xl
pit.scatter(xO, f(x0))
pit.scatter(xl, f(xl))
pit.Iegend(loc=0)
plt.xlabel(’$x$’) pit.ylabel(’$f (x)$’) pit.grid(True) pit.show()
x: [-1.39718014] , [ 2.14718187]
При минимизации функций многих переменных обычно используются ква- зиныотоповскис методы. В этом случае мы можем задавать производные минимизирующей функции точно или же они будут вычисляться приближенно в процессе вычислений. Мы ограничимся примером использования функции fminO, в которой реализован симплекс-метод. Будем искать минимум функции F(x) = 100(.гд — Xq)2 + (1 — х0)2 (двумерная функция Розенброка).
Do'stlaringiz bilan baham: |