Рис. 3.48 Минимизация функции Розенброка
import numpy as пр import matplotlib.pyplot as pit import scipy.optimize as optimize def f(x):
return 100*(x[l] -x[0]**2)**2 + (1 - x[0])**2 x = np.linspace(-2., 2., 101)
у = np.linspace(-l., 3., 101)
X, Y = np.meshgrid(x, у) z = f([X, Y])
v = np.linspace(0, 100, 21) plt.contourf(x, y, z, v, cmap=plt.cm.gray) pit. colorbarO xO = [0, 0]
xmin = optimize.fmin(f, xO)
pit.scatter(xmin[0], xmin[1], c=’w’)
print ’xmin:’, xmin
pit. showO
Optimization terminatbd suее essfu 11 уr
Current fuft c tipn v al ue 0> 0000ОЙ ;
хш in [1 0ОООИ39 1 6 op 6 i p ё 4j
В вычислительной практике особое значение уделяется минимизации функции, которая представляет собой сумму квадратов. Типичной является ситуация, когда нелинейная функциональная зависимость функции у = f(p\ х) от параметров рк = к = 0,1,...,п восстанавливается на набору приближенных данных г = 0,1,..., га (га > п). Для этого минимизируется функционал
тп
J(p) = -ш)2-
i=0
Можно использовать функцик) leastsqO.
В программе ищутся параметры алЬлс в представлении у = а + Ье~сх по зашумленным данным. Результаты расчетов иллюстрируются рис. 3.49.
import пшпру as пр import matplotlib.pyplot as pit import scipy.optimize as optimize, def res(p, y, x): a, b, c = p
err = у - a - b * np.exp(-c*x) return err
x = np.linspace(0., 1., 21) a, b, c = 2, 1, 3 у = a + b * np.exp(-c*x) np.random.seed(0)
yO = у +0.1 * np.random.randn(len(x))
pit.plot(x, y, label=>exact’)
pit .plot (x, yO, label=’ perturbation’)
p0 = [0, 0, 0]
plsq = optimize.leastsq(res, p0,args=(y0, x))
Рис. 3.49 Параметрическая идентификация
Pi = plsq [0]
print ’a, b, с: ’, pi
У1 = pi [0] + pl[l]*np.exp(-pl[2]*x)
Plt.plot(x, yl, label^ solution’)
pit.legend(1ос=0)
pit.xlabel(’$х$’)
plt.ylabel(’$f(x)$’)
pit.grid(True)
pit.show()
В более общем случае рассматриваются задачи минимизации с ограничениями, которые обычно формулируются в виде неравенств. В простейшем случае имеются ограничения на диапазоны независимых переменных. Для условной минимизации можно использовать функцию fmin_cobyla().
Интегрирование и ОДУ
В модуле integrate пакета SciPy представлено программное обеспечение для решения двух классов задач вычислительной математики. Рассматриваются
проблемы вычисления интегралов непрерывных и сеточных функций. Вто- рой класс задач связан с численным решением задачи Коши для системы обыкновенных дифференциальных уравнений.
О
~0.2
Рис. 3.50 Интегрирование функции f(x) = e 4х sin(47nr)
сновная функция вычисления определенных интегралов от функции непрерывного аргумента есть quad(). В нашем примере (см. рис. 3.50) для заданной функции /(;х) = е~4х sin(47ra;) вычисляется интеграл j(x) — fj f(t)dt ца равномерной сетке интервала [0,1].
Do'stlaringiz bilan baham: |