You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

4-scipy_tutorial.ipynb 311 kB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# SciPy - Library of scientific algorithms for Python"
  8. ]
  9. },
  10. {
  11. "cell_type": "markdown",
  12. "metadata": {},
  13. "source": [
  14. "J.R. Johansson (jrjohansson at gmail.com)\n",
  15. "\n",
  16. "最新的[IPython notebook](http://ipython.org/notebook.html) 课程可以在这里找到: [http://github.com/jrjohansson/scientific-python-lectures](http://github.com/jrjohansson/scientific-python-lectures).\n",
  17. "\n",
  18. "其他的这个课程系列的笔记在这里[http://jrjohansson.github.io](http://jrjohansson.github.io)."
  19. ]
  20. },
  21. {
  22. "cell_type": "code",
  23. "execution_count": 1,
  24. "metadata": {},
  25. "outputs": [],
  26. "source": [
  27. "# 这一行的作用会在第四节讲到\n",
  28. "%matplotlib inline\n",
  29. "import matplotlib.pyplot as plt\n",
  30. "from IPython.display import Image"
  31. ]
  32. },
  33. {
  34. "cell_type": "markdown",
  35. "metadata": {},
  36. "source": [
  37. "## 1. 简介"
  38. ]
  39. },
  40. {
  41. "cell_type": "markdown",
  42. "metadata": {},
  43. "source": [
  44. "SciPy框架建立在用于多维数组的低级NumPy框架之上,并提供了大量的高级科学算法。SciPy涵盖的一些主题是:\n",
  45. "\n",
  46. "* Special functions ([scipy.special](http://docs.scipy.org/doc/scipy/reference/special.html))\n",
  47. "* Integration ([scipy.integrate](http://docs.scipy.org/doc/scipy/reference/integrate.html))\n",
  48. "* Optimization ([scipy.optimize](http://docs.scipy.org/doc/scipy/reference/optimize.html))\n",
  49. "* Interpolation ([scipy.interpolate](http://docs.scipy.org/doc/scipy/reference/interpolate.html))\n",
  50. "* Fourier Transforms ([scipy.fftpack](http://docs.scipy.org/doc/scipy/reference/fftpack.html))\n",
  51. "* Signal Processing ([scipy.signal](http://docs.scipy.org/doc/scipy/reference/signal.html))\n",
  52. "* Linear Algebra ([scipy.linalg](http://docs.scipy.org/doc/scipy/reference/linalg.html))\n",
  53. "* Sparse Eigenvalue Problems ([scipy.sparse](http://docs.scipy.org/doc/scipy/reference/sparse.html))\n",
  54. "* Statistics ([scipy.stats](http://docs.scipy.org/doc/scipy/reference/stats.html))\n",
  55. "* Multi-dimensional image processing ([scipy.ndimage](http://docs.scipy.org/doc/scipy/reference/ndimage.html))\n",
  56. "* File IO ([scipy.io](http://docs.scipy.org/doc/scipy/reference/io.html))\n",
  57. "\n",
  58. "这些子模块中的每一个都提供了许多可用于解决各自主题中的问题的函数和类。\n",
  59. "\n",
  60. "在这节课中,我们将看看如何使用这些子包。\n",
  61. "\n",
  62. "为了在Python程序中获得这些SciPy程序包,我们首先从调用`scipy`模块开始。"
  63. ]
  64. },
  65. {
  66. "cell_type": "code",
  67. "execution_count": 2,
  68. "metadata": {},
  69. "outputs": [],
  70. "source": [
  71. "from scipy import *"
  72. ]
  73. },
  74. {
  75. "cell_type": "markdown",
  76. "metadata": {},
  77. "source": [
  78. "如果我们只使用SciPy框架的一部分,我们可以选择性地包含那些我们感兴趣的模块。例如,为了将线性代数包包含在`la`名词下,我们可以这样做:"
  79. ]
  80. },
  81. {
  82. "cell_type": "code",
  83. "execution_count": 3,
  84. "metadata": {},
  85. "outputs": [],
  86. "source": [
  87. "import scipy.linalg as la"
  88. ]
  89. },
  90. {
  91. "cell_type": "markdown",
  92. "metadata": {},
  93. "source": [
  94. "## 2. 特殊功能"
  95. ]
  96. },
  97. {
  98. "cell_type": "markdown",
  99. "metadata": {},
  100. "source": [
  101. "有很多数学的特殊函数对于很多计算物理问题都很重要。SciPy提供了一组非常广泛的特殊函数的实现。有关具体的细节,参见参考文档中的函数列表http://docs.scipy.org/doc/scipy/reference/special.html#module-scipy.special. \n",
  102. "\n",
  103. "为了演示特殊函数的典型用法我们将会将会更多的讲到贝塞尔函数的细节:"
  104. ]
  105. },
  106. {
  107. "cell_type": "code",
  108. "execution_count": 4,
  109. "metadata": {},
  110. "outputs": [],
  111. "source": [
  112. "# scipy.special模块包含了一系列的贝塞尔函数\n",
  113. "# 在这里我们将会运用函数jn和yn,它们是第一类和第二类实值阶的贝塞尔函数。 \n",
  114. "# 我们同样包含了函数jn_zeros和yn_zeros,它们给出了函数jn和yn的零点\n",
  115. "#\n",
  116. "from scipy.special import jn, yn, jn_zeros, yn_zeros"
  117. ]
  118. },
  119. {
  120. "cell_type": "code",
  121. "execution_count": 5,
  122. "metadata": {},
  123. "outputs": [
  124. {
  125. "name": "stdout",
  126. "output_type": "stream",
  127. "text": [
  128. "J_0(0.000000) = 1.000000\n",
  129. "Y_0(1.000000) = 0.088257\n"
  130. ]
  131. }
  132. ],
  133. "source": [
  134. "n = 0 # order\n",
  135. "x = 0.0\n",
  136. "\n",
  137. "# 第一类贝塞尔函数\n",
  138. "print \"J_%d(%f) = %f\" % (n, x, jn(n, x))\n",
  139. "\n",
  140. "x = 1.0\n",
  141. "# 第二类贝塞尔函数\n",
  142. "print \"Y_%d(%f) = %f\" % (n, x, yn(n, x))"
  143. ]
  144. },
  145. {
  146. "cell_type": "code",
  147. "execution_count": 6,
  148. "metadata": {},
  149. "outputs": [
  150. {
  151. "data": {
  152. "image/png": "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\nTkSuQmCC\n",
  153. "text/plain": [
  154. "<matplotlib.figure.Figure at 0x108b03890>"
  155. ]
  156. },
  157. "metadata": {},
  158. "output_type": "display_data"
  159. }
  160. ],
  161. "source": [
  162. "x = linspace(0, 10, 100)\n",
  163. "\n",
  164. "fig, ax = plt.subplots()\n",
  165. "for n in range(4):\n",
  166. " ax.plot(x, jn(n, x), label=r\"$J_%d(x)$\" % n)\n",
  167. "ax.legend();"
  168. ]
  169. },
  170. {
  171. "cell_type": "code",
  172. "execution_count": 7,
  173. "metadata": {},
  174. "outputs": [
  175. {
  176. "data": {
  177. "text/plain": [
  178. "array([ 2.40482556, 5.52007811, 8.65372791, 11.79153444])"
  179. ]
  180. },
  181. "execution_count": 7,
  182. "metadata": {},
  183. "output_type": "execute_result"
  184. }
  185. ],
  186. "source": [
  187. "# 贝塞尔函数的零点\n",
  188. "n = 0 # 阶数\n",
  189. "m = 4 # 需要计算的根的数量\n",
  190. "jn_zeros(n, m)"
  191. ]
  192. },
  193. {
  194. "cell_type": "markdown",
  195. "metadata": {},
  196. "source": [
  197. "## 3. 积分"
  198. ]
  199. },
  200. {
  201. "cell_type": "markdown",
  202. "metadata": {},
  203. "source": [
  204. "### 3.1 数值积分:求积"
  205. ]
  206. },
  207. {
  208. "cell_type": "markdown",
  209. "metadata": {},
  210. "source": [
  211. "该类型函数的数值计算\n",
  212. "\n",
  213. "$\\displaystyle \\int_a^b f(x) dx$\n",
  214. "\n",
  215. "被称做*数值求积*,或者简单的讲*求积*。SciPy为不同形式的求积提供了一系列的函数,例如`quad`, `dblquad`和`tplquad`分别针对单,二重,三重积分。\n"
  216. ]
  217. },
  218. {
  219. "cell_type": "code",
  220. "execution_count": 8,
  221. "metadata": {},
  222. "outputs": [],
  223. "source": [
  224. "from scipy.integrate import quad, dblquad, tplquad"
  225. ]
  226. },
  227. {
  228. "cell_type": "markdown",
  229. "metadata": {},
  230. "source": [
  231. "`quad` 函数提供了很多的可选参数,这可以被用作调整函数的行为(尝试用`help(quad)`来查看更多细节)\n",
  232. "\n",
  233. "常用的方法如下:"
  234. ]
  235. },
  236. {
  237. "cell_type": "code",
  238. "execution_count": 9,
  239. "metadata": {},
  240. "outputs": [],
  241. "source": [
  242. "# 定义一个简单的被积函数\n",
  243. "def f(x):\n",
  244. " return x"
  245. ]
  246. },
  247. {
  248. "cell_type": "code",
  249. "execution_count": 10,
  250. "metadata": {},
  251. "outputs": [
  252. {
  253. "name": "stdout",
  254. "output_type": "stream",
  255. "text": [
  256. "integral value = 0.5 , absolute error = 5.55111512313e-15\n"
  257. ]
  258. }
  259. ],
  260. "source": [
  261. "x_lower = 0 # x的下限\n",
  262. "x_upper = 1 # x的上限\n",
  263. "\n",
  264. "val, abserr = quad(f, x_lower, x_upper)\n",
  265. "\n",
  266. "print \"integral value =\", val, \", absolute error =\", abserr "
  267. ]
  268. },
  269. {
  270. "cell_type": "markdown",
  271. "metadata": {},
  272. "source": [
  273. "如果我们需要去传递额外的参数到被积函数中我们可以用`args`关键字参数:"
  274. ]
  275. },
  276. {
  277. "cell_type": "code",
  278. "execution_count": 11,
  279. "metadata": {},
  280. "outputs": [
  281. {
  282. "name": "stdout",
  283. "output_type": "stream",
  284. "text": [
  285. "0.736675137081 9.3891268825e-13\n"
  286. ]
  287. }
  288. ],
  289. "source": [
  290. "def integrand(x, n):\n",
  291. " \"\"\"\n",
  292. " 一阶n的贝塞尔函数\n",
  293. " \"\"\"\n",
  294. " return jn(n, x)\n",
  295. "\n",
  296. "\n",
  297. "x_lower = 0 # x的下限\n",
  298. "x_upper = 10 # x的上限\n",
  299. "\n",
  300. "val, abserr = quad(integrand, x_lower, x_upper, args=(3,))\n",
  301. "\n",
  302. "print val, abserr "
  303. ]
  304. },
  305. {
  306. "cell_type": "markdown",
  307. "metadata": {},
  308. "source": [
  309. "对于简单的函数,我们可以使用lambda函数(没有名称的函数)而不是显式地为被积函数定义函数:"
  310. ]
  311. },
  312. {
  313. "cell_type": "code",
  314. "execution_count": 12,
  315. "metadata": {},
  316. "outputs": [
  317. {
  318. "name": "stdout",
  319. "output_type": "stream",
  320. "text": [
  321. "numerical = 1.77245385091 1.42026367809e-08\n",
  322. "analytical = 1.77245385091\n"
  323. ]
  324. }
  325. ],
  326. "source": [
  327. "val, abserr = quad(lambda x: exp(-x ** 2), -Inf, Inf)\n",
  328. "\n",
  329. "print \"numerical =\", val, abserr\n",
  330. "\n",
  331. "analytical = sqrt(pi)\n",
  332. "print \"analytical =\", analytical"
  333. ]
  334. },
  335. {
  336. "cell_type": "markdown",
  337. "metadata": {},
  338. "source": [
  339. "正如下面的例子所示,我们也可以用'Inf'和'-Inf'作为积分限制\n",
  340. "\n",
  341. "高维积分的工作方式相同:"
  342. ]
  343. },
  344. {
  345. "cell_type": "code",
  346. "execution_count": 13,
  347. "metadata": {},
  348. "outputs": [
  349. {
  350. "name": "stdout",
  351. "output_type": "stream",
  352. "text": [
  353. "0.785398163397 1.63822994214e-13\n"
  354. ]
  355. }
  356. ],
  357. "source": [
  358. "def integrand(x, y):\n",
  359. " return exp(-x**2-y**2)\n",
  360. "\n",
  361. "x_lower = 0 \n",
  362. "x_upper = 10\n",
  363. "y_lower = 0\n",
  364. "y_upper = 10\n",
  365. "\n",
  366. "val, abserr = dblquad(integrand, x_lower, x_upper, lambda x : y_lower, lambda x: y_upper)\n",
  367. "\n",
  368. "print val, abserr "
  369. ]
  370. },
  371. {
  372. "cell_type": "markdown",
  373. "metadata": {},
  374. "source": [
  375. "注意我们是如何通过函数来求y积分的极限的,因为这些可以是关于x的函数。"
  376. ]
  377. },
  378. {
  379. "cell_type": "markdown",
  380. "metadata": {},
  381. "source": [
  382. "## 4. 常微分方程 (ODEs)"
  383. ]
  384. },
  385. {
  386. "cell_type": "markdown",
  387. "metadata": {},
  388. "source": [
  389. "SciPy提供了两个不同的方式去求解ODE方程:一个基于方程`odeint`的API和面向对象的API基于类`ode`。\n",
  390. "\n",
  391. "通常`odeint`更容易上手,但是`ode`类提供了一些更好级别的控制。\n",
  392. "\n",
  393. "在这里我们将会用`odeint`方程。对于更多关于`ode`类的信息,尝试`help(ode)`。它和`odeint`所做的事情基本相同,但是以面向对象的方式。\n",
  394. "\n",
  395. "为了使用`odeint`,首先从`scipy.integrate`模块中导入它。"
  396. ]
  397. },
  398. {
  399. "cell_type": "code",
  400. "execution_count": 14,
  401. "metadata": {},
  402. "outputs": [],
  403. "source": [
  404. "from scipy.integrate import odeint, ode"
  405. ]
  406. },
  407. {
  408. "cell_type": "markdown",
  409. "metadata": {},
  410. "source": [
  411. "常微分方程系统通常在受到数值攻击之前以标准形式形成。标准的形式是:\n",
  412. "\n",
  413. "$y' = f(y, t)$\n",
  414. "\n",
  415. "在这里\n",
  416. "\n",
  417. "$y = [y_1(t), y_2(t), ..., y_n(t)]$ \n",
  418. "\n",
  419. "而且$f$是一些给出方程$y_i(t)$导数的方程。为了求解一个常微分方程我们需要知道方程$f$和一个初始条件$y(0)$。\n",
  420. "\n",
  421. "注意,通过为中间导数引入新的变量,高阶ode总是可以写成这种形式。\n",
  422. "\n",
  423. "一旦我们定义了Python函数`f`和数组`y_0`(也就是$f$和$y(0)$的数学表示),我们可以这样运用`odeint`函数:\n",
  424. "\n",
  425. " y_t = odeint(f, y_0, t)\n",
  426. "\n",
  427. "在这里`t`是一个具有时间坐标的数组,用来解决偏微分问题。`y_t`是仅有一行的数组对于每一个点在时间`t`,每一列对应于在那个时间点上的解`y_i(t)`。\n",
  428. "\n",
  429. "我们将会在下面的例子中看到如何将`f`和`y_0`应用在我们的Python代码中。\n"
  430. ]
  431. },
  432. {
  433. "cell_type": "markdown",
  434. "metadata": {},
  435. "source": [
  436. "#### 例子:双摆"
  437. ]
  438. },
  439. {
  440. "cell_type": "markdown",
  441. "metadata": {},
  442. "source": [
  443. "我们来考虑一个物理问题:双摆问题,具体的描述如下:http://en.wikipedia.org/wiki/Double_pendulum"
  444. ]
  445. },
  446. {
  447. "cell_type": "code",
  448. "execution_count": 15,
  449. "metadata": {},
  450. "outputs": [
  451. {
  452. "data": {
  453. "text/html": [
  454. "<img src=\"http://upload.wikimedia.org/wikipedia/commons/c/c9/Double-compound-pendulum-dimensioned.svg\"/>"
  455. ],
  456. "text/plain": [
  457. "<IPython.core.display.Image object>"
  458. ]
  459. },
  460. "execution_count": 15,
  461. "metadata": {},
  462. "output_type": "execute_result"
  463. }
  464. ],
  465. "source": [
  466. "Image(url='http://upload.wikimedia.org/wikipedia/commons/c/c9/Double-compound-pendulum-dimensioned.svg')"
  467. ]
  468. },
  469. {
  470. "cell_type": "markdown",
  471. "metadata": {},
  472. "source": [
  473. "在维基上给出的双摆运动方程如下:\n",
  474. "\n",
  475. "${\\dot \\theta_1} = \\frac{6}{m\\ell^2} \\frac{ 2 p_{\\theta_1} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_2}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}$\n",
  476. "\n",
  477. "${\\dot \\theta_2} = \\frac{6}{m\\ell^2} \\frac{ 8 p_{\\theta_2} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_1}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}.$\n",
  478. "\n",
  479. "${\\dot p_{\\theta_1}} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + 3 \\frac{g}{\\ell} \\sin \\theta_1 \\right ]$\n",
  480. "\n",
  481. "${\\dot p_{\\theta_2}} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + \\frac{g}{\\ell} \\sin \\theta_2 \\right]$\n",
  482. "\n",
  483. "为了让Python代码更加简单容易理解,我们建立新的变量名字和向量标记: $x = [\\theta_1, \\theta_2, p_{\\theta_1}, p_{\\theta_2}]$\n",
  484. "\n",
  485. "${\\dot x_1} = \\frac{6}{m\\ell^2} \\frac{ 2 x_3 - 3 \\cos(x_1-x_2) x_4}{16 - 9 \\cos^2(x_1-x_2)}$\n",
  486. "\n",
  487. "${\\dot x_2} = \\frac{6}{m\\ell^2} \\frac{ 8 x_4 - 3 \\cos(x_1-x_2) x_3}{16 - 9 \\cos^2(x_1-x_2)}$\n",
  488. "\n",
  489. "${\\dot x_3} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + 3 \\frac{g}{\\ell} \\sin x_1 \\right ]$\n",
  490. "\n",
  491. "${\\dot x_4} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + \\frac{g}{\\ell} \\sin x_2 \\right]$"
  492. ]
  493. },
  494. {
  495. "cell_type": "code",
  496. "execution_count": 16,
  497. "metadata": {},
  498. "outputs": [],
  499. "source": [
  500. "g = 9.82\n",
  501. "L = 0.5\n",
  502. "m = 0.1\n",
  503. "\n",
  504. "def dx(x, t):\n",
  505. " \"\"\"\n",
  506. " 双摆常微分方程的右侧\n",
  507. " \"\"\"\n",
  508. " x1, x2, x3, x4 = x[0], x[1], x[2], x[3]\n",
  509. " \n",
  510. " dx1 = 6.0/(m*L**2) * (2 * x3 - 3 * cos(x1-x2) * x4)/(16 - 9 * cos(x1-x2)**2)\n",
  511. " dx2 = 6.0/(m*L**2) * (8 * x4 - 3 * cos(x1-x2) * x3)/(16 - 9 * cos(x1-x2)**2)\n",
  512. " dx3 = -0.5 * m * L**2 * ( dx1 * dx2 * sin(x1-x2) + 3 * (g/L) * sin(x1))\n",
  513. " dx4 = -0.5 * m * L**2 * (-dx1 * dx2 * sin(x1-x2) + (g/L) * sin(x2))\n",
  514. " \n",
  515. " return [dx1, dx2, dx3, dx4]"
  516. ]
  517. },
  518. {
  519. "cell_type": "code",
  520. "execution_count": 17,
  521. "metadata": {},
  522. "outputs": [],
  523. "source": [
  524. "# 选择一个初始状态\n",
  525. "x0 = [pi/4, pi/2, 0, 0]"
  526. ]
  527. },
  528. {
  529. "cell_type": "code",
  530. "execution_count": 18,
  531. "metadata": {},
  532. "outputs": [],
  533. "source": [
  534. "# 解决常微分方程的坐标:从0到10秒\n",
  535. "t = linspace(0, 10, 250)"
  536. ]
  537. },
  538. {
  539. "cell_type": "code",
  540. "execution_count": 19,
  541. "metadata": {},
  542. "outputs": [],
  543. "source": [
  544. "# 解决常微分方程\n",
  545. "x = odeint(dx, x0, t)"
  546. ]
  547. },
  548. {
  549. "cell_type": "code",
  550. "execution_count": 20,
  551. "metadata": {},
  552. "outputs": [
  553. {
  554. "data": {
  555. "image/png": "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\n/B/NCqfN4Rm/ZwAAAABJRU5ErkJggg==\n",
  556. "text/plain": [
  557. "<matplotlib.figure.Figure at 0x108f90a50>"
  558. ]
  559. },
  560. "metadata": {},
  561. "output_type": "display_data"
  562. }
  563. ],
  564. "source": [
  565. "# 把角度作为时间的函数画出来\n",
  566. "\n",
  567. "fig, axes = plt.subplots(1,2, figsize=(12,4))\n",
  568. "axes[0].plot(t, x[:, 0], 'r', label=\"theta1\")\n",
  569. "axes[0].plot(t, x[:, 1], 'b', label=\"theta2\")\n",
  570. "\n",
  571. "\n",
  572. "x1 = + L * sin(x[:, 0])\n",
  573. "y1 = - L * cos(x[:, 0])\n",
  574. "\n",
  575. "x2 = x1 + L * sin(x[:, 1])\n",
  576. "y2 = y1 - L * cos(x[:, 1])\n",
  577. " \n",
  578. "axes[1].plot(x1, y1, 'r', label=\"pendulum1\")\n",
  579. "axes[1].plot(x2, y2, 'b', label=\"pendulum2\")\n",
  580. "axes[1].set_ylim([-1, 0])\n",
  581. "axes[1].set_xlim([1, -1]);"
  582. ]
  583. },
  584. {
  585. "cell_type": "markdown",
  586. "metadata": {},
  587. "source": [
  588. "简单的双摆运动模拟动画,我们将在第四节课看到如何制作更好的动画"
  589. ]
  590. },
  591. {
  592. "cell_type": "code",
  593. "execution_count": 21,
  594. "metadata": {},
  595. "outputs": [],
  596. "source": [
  597. "from IPython.display import display, clear_output\n",
  598. "import time"
  599. ]
  600. },
  601. {
  602. "cell_type": "code",
  603. "execution_count": 22,
  604. "metadata": {},
  605. "outputs": [
  606. {
  607. "data": {
  608. "image/png": "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\n",
  609. "text/plain": [
  610. "<matplotlib.figure.Figure at 0x108af5f90>"
  611. ]
  612. },
  613. "metadata": {},
  614. "output_type": "display_data"
  615. },
  616. {
  617. "data": {
  618. "image/png": "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\n",
  619. "text/plain": [
  620. "<matplotlib.figure.Figure at 0x108af5f90>"
  621. ]
  622. },
  623. "metadata": {},
  624. "output_type": "display_data"
  625. }
  626. ],
  627. "source": [
  628. "fig, ax = plt.subplots(figsize=(4,4))\n",
  629. "\n",
  630. "for t_idx, tt in enumerate(t[:200]):\n",
  631. "\n",
  632. " x1 = + L * sin(x[t_idx, 0])\n",
  633. " y1 = - L * cos(x[t_idx, 0])\n",
  634. "\n",
  635. " x2 = x1 + L * sin(x[t_idx, 1])\n",
  636. " y2 = y1 - L * cos(x[t_idx, 1])\n",
  637. " \n",
  638. " ax.cla() \n",
  639. " ax.plot([0, x1], [0, y1], 'r.-')\n",
  640. " ax.plot([x1, x2], [y1, y2], 'b.-')\n",
  641. " ax.set_ylim([-1.5, 0.5])\n",
  642. " ax.set_xlim([1, -1])\n",
  643. "\n",
  644. " clear_output() \n",
  645. " display(fig)\n",
  646. "\n",
  647. " time.sleep(0.1)"
  648. ]
  649. },
  650. {
  651. "cell_type": "markdown",
  652. "metadata": {},
  653. "source": [
  654. "#### 例子:阻尼谐振子"
  655. ]
  656. },
  657. {
  658. "cell_type": "markdown",
  659. "metadata": {},
  660. "source": [
  661. "常微分方程在计算物理中是非常重要的,因此我们将会再看一个例子:阻尼谐振子。这个问题在wiki网页被有着很好的介绍:http://en.wikipedia.org/wiki/Damping\n",
  662. "\n",
  663. "阻尼谐振子的运动方程是:\n",
  664. "\n",
  665. "$\\displaystyle \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} + 2\\zeta\\omega_0\\frac{\\mathrm{d}x}{\\mathrm{d}t} + \\omega^2_0 x = 0$\n",
  666. "\n",
  667. "在这里$x$是振荡器的位置, $\\omega_0$是频率,而且$\\zeta$是阻尼系数。为了以我们介绍的标准形式写这个二阶常微分方程$p = \\frac{\\mathrm{d}x}{\\mathrm{d}t}$:\n",
  668. "\n",
  669. "$\\displaystyle \\frac{\\mathrm{d}p}{\\mathrm{d}t} = - 2\\zeta\\omega_0 p - \\omega^2_0 x$\n",
  670. "\n",
  671. "$\\displaystyle \\frac{\\mathrm{d}x}{\\mathrm{d}t} = p$\n",
  672. "\n",
  673. "在这个例子的应用中我们将为ODE的RHS方程添加额外的参数,而不是像我们在之前的例子中使用的全局变量。作为额外参数到RHS的结果,我们需要传递一个关键字参数`args`到`odeint`函数:"
  674. ]
  675. },
  676. {
  677. "cell_type": "code",
  678. "execution_count": 23,
  679. "metadata": {},
  680. "outputs": [],
  681. "source": [
  682. "def dy(y, t, zeta, w0):\n",
  683. " \"\"\"\n",
  684. " 阻尼谐振子方程的右侧\n",
  685. " \"\"\"\n",
  686. " x, p = y[0], y[1]\n",
  687. " \n",
  688. " dx = p\n",
  689. " dp = -2 * zeta * w0 * p - w0**2 * x\n",
  690. "\n",
  691. " return [dx, dp]"
  692. ]
  693. },
  694. {
  695. "cell_type": "code",
  696. "execution_count": 24,
  697. "metadata": {},
  698. "outputs": [],
  699. "source": [
  700. "# 初始状态: \n",
  701. "y0 = [1.0, 0.0]"
  702. ]
  703. },
  704. {
  705. "cell_type": "code",
  706. "execution_count": 25,
  707. "metadata": {},
  708. "outputs": [],
  709. "source": [
  710. "# 为了求解常微分方程的时间坐标\n",
  711. "t = linspace(0, 10, 1000)\n",
  712. "w0 = 2*pi*1.0"
  713. ]
  714. },
  715. {
  716. "cell_type": "code",
  717. "execution_count": 26,
  718. "metadata": {},
  719. "outputs": [],
  720. "source": [
  721. "# 求解阻尼比的三个不同值的ODE问题\n",
  722. "\n",
  723. "y1 = odeint(dy, y0, t, args=(0.0, w0)) # 零阻尼\n",
  724. "y2 = odeint(dy, y0, t, args=(0.2, w0)) # 欠阻尼\n",
  725. "y3 = odeint(dy, y0, t, args=(1.0, w0)) # 临界阻尼\n",
  726. "y4 = odeint(dy, y0, t, args=(5.0, w0)) # 过阻尼"
  727. ]
  728. },
  729. {
  730. "cell_type": "code",
  731. "execution_count": 27,
  732. "metadata": {},
  733. "outputs": [
  734. {
  735. "data": {
  736. "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8U1X6/z8nS9ukS5rue4GyyCKLrIJIAVnc+CGIIFtR\nx8EZF2ZcvoMiWJFRZ9QZBxQHVxQGGVBUFhdcKKAg4ChFsOy0BVq6L+maND2/P24TkrZpcrfkpL3v\n1yuQ5J57zunJvc957nOe8zyEUgoFBQUFha6BytcdUFBQUFDwHorQV1BQUOhCKEJfQUFBoQuhCH0F\nBQWFLoQi9BUUFBS6EIrQV1BQUOhCiBb6hJB3CSFFhJBfXRxPJ4RUEUJ+aXk9LbZNBQUFBQVhaCSo\n4z0AawB80EGZvZTSaRK0paCgoKAgAtGaPqV0P4AKN8WI2HYUFBQUFMTjDZs+BTCaEJJNCPmcENLP\nC20qKCgoKLSDFOYdd/wMIJlSWkcIuRnApwB6e6FdBQUFBYVWyC70KaUmh/dfEELWEkIiKKXljuUI\nIUoQIAUFBQUBUEo9NqHLbt4hhMQSQkjL+xEASGuBb4NSqrwoxTPPPOPzPrDyUsZCGQtlLDp+8UW0\npk8I+RDAOABRhJCLAJ4BoG0R4usA3AngD4SQJgB1AOaIbVNBQUFBQRiihT6l9G43x18H8LrYdhQU\nFBQUxKPsyGWQ9PR0X3eBGZSxuIoyFldRxkI4RIhNSA4IIZSVvigoKCj4C4QQUB4Lud5w2VRQUGiH\nFv8GBQWPkUIxVoS+goIPUZ5uFTxFKiVBsekrKCgodCEUoa+goKDQhVCEvoKCgkIXQhH6CgoKsrF+\n/XqMHTvW191wS2ZmJhYsWODrbngFRegrKCh0ebqSJ5Ui9BUUFBS6EIrQV1BQcEKlUuH8+fP2z4sW\nLcLy5csBAFlZWUhKSsI//vEPxMbGIiEhAevXr7eXLSsrw7Rp02AwGDBy5EicO3fOqe4lS5YgJSUF\nBoMBw4YNw/fff28/lpmZiVmzZmHBggUICwvDwIEDcebMGbzwwguIjY1Famoqvv76a3v59PR0PPnk\nkxg5ciQMBgOmT5+Oioqr+Zx+/PFHjB49GkajEYMHD8bevXvtxy5cuIBx48YhLCwMkydPRmlpqWTj\nxzqK0FdQYJCmpibk5uaKfjU1NYnuCyHEyfxRVFSE6upqFBQU4J133sGDDz6IqqoqAMCDDz4IvV6P\nK1eu4N1338V7773ndO6IESOQnZ2NiooKzJ07F7NmzYLZbLYf37lzJxYuXIiKigoMGTIEkyZNAgAU\nFBRg+fLlWLx4sVPfNmzYgPfeew+FhYXQaDR45JFHAACXL1/GbbfdhhUrVqCiogIvv/wyZs6cibKy\nMgDA3LlzMXz4cJSVlWH58uV4//33u4yJRxH6CgoKbnHcRKbVarFixQqo1WrcfPPNCAkJwalTp2C1\nWrFt2zasXLkSOp0O/fv3R0ZGhtO58+bNg9FohEqlwqOPPorGxkacOnXKfvzGG2/EpEmToFarceed\nd6KsrAxLly6FWq3G7NmzkZubi+rqagDcZLRw4UL069cPer0ezz33HLZs2YLm5mZs3LgRt9xyC6ZO\nnQoAuOmmmzBs2DDs2rUL+fn5+Omnn/Dcc89Bq9Vi7NixuP3227vMRjllR66CAoNoNBp069bN191o\nl8jISKhUV/VFvV6PmpoalJSUoKmpCcnJyfZjKSkpTue+/PLLePfdd1FQUABCCKqrq51MKzExMfb3\nOp0OUVFRdg1cp9MBAGpqahAWFgYAbdqyWCwoLS1FXl4etm7dih07dtiPNzU1YcKECSgoKIDRaLTX\nBwCpqam4ePGiqHHxFxShr6Cg4IRer0ddXZ39c2FhoZNwdUV0dDQ0Gg3y8/PRp08fAEB+fr79+P79\n+/HSSy/hu+++Q//+/QEAERERojRsx/rz8/Oh1WoRHR2NlJQULFiwAG+++Wabc/Ly8lBRUYG6ujro\n9Xr7d2q1WnA//AnFvKOgoODE4MGD8Z///AdWqxVffvkl9u3b59F5arUaM2bMQGZmJurr6/Hbb785\n2cpNJhM0Gg2ioqJgNpuxcuVKu6lGCJRSbNy4ETk5Oairq8OKFSswa9YsEEIwf/587NixA7t374bV\nakVDQwOysrJw+fJlpKamYtiwYXjmmWdgsVjw/fffY+fOnYL74W8oQl9BQcGJf/3rX9ixYweMRiM2\nbdqEO+64w+l4Rwuer732GmpqahAXF4d7770X9957r/3Y1KlTMXXqVPTu3RvdunWDTqdzMv+0XjBu\nry3Hz4QQLFiwAIsWLUJ8fDzMZjNWr14NAEhKSsJnn32G559/HjExMUhJScErr7yC5uZmAMCmTZtw\n6NAhREREYOXKlcjIyOA5Sv6LEk9fQcFHtMRB93U3/Jbx48djwYIFThNLZ8bV9cI3nr6i6SsoKPgt\nyqTJH0XoKygo+C1dxbdeShTzjoKCj1DMOwp8UMw7CgoKCgq8UYS+goKCQhdCEfoKCgoKXQhF6Cso\nKCh0IRShr6CgoNCFUIS+goKCrMidMtFfUh065iXwJYrQV1BQ8Gv8xVe/vTATvkAR+goKCsxii5XT\nWWBhX4Yi9BUUFNogZ8rEkydPYtKkSYiMjMQ111yDrVu3OrXzhz/8AbfccgtCQkKQlZXVpm/uUh3O\nmjUL8fHxCA8Px7hx4/Dbb7851f/HP/4Rt9xyC0JDQzF27FhcuXIFS5YsgdFoRN++fXH06FF7+W7d\nuuHFF19E//79ERERgXvvvReNjY324zt37sTgwYNhNBoxZswY/Prrr/Zjv/zyC6677jqEhYVhzpw5\naGho8HD05UUR+goKCm6RKmVibW0tJk2ahPnz56OkpASbN2/GH//4R+Tk5Njr/vDDD7F8+XLU1NRg\nzJgxbfriLtXhrbfeirNnz6KkpATXXXcd5s2b53T+1q1b8de//hWlpaUICAjAqFGjMHz4cJSXl+PO\nO+/Eo48+6lR+06ZN2L17N86dO4fTp09j1apVADihft999+Gtt95CeXk5Fi9ejGnTpsFiscBsNmP6\n9OnIyMhARUUFZs2ahY8//pgJ8w4opUy8uK4oKHQd3F7zgDQvARBC6Llz5+yfFy1aRJ9++mlKKaV7\n9uyhOp2OWq1W+/GYmBh66NAh2tTURLVaLT116pT92FNPPUVvuOEGSimlmzdvpmPHjnVq6/e//z19\n9tlnKaWUZmRk0IyMDJf9ysvLoxqNhtbV1dm/mzt3Lp0/f3675SsqKighhFZXV9v/jt///vf242vW\nrKH9+vWzfz527BgNDw+3f+7WrRtdt26d/fPnn39O09LSKKWUPvDAA3T58uVO7fXp04fu3buX7t27\nlyYkJDgdGz16dJvyfHB1vbR877GsVTJnKSiwCgP2X1cITZmYl5eHQ4cOwWg02r9ramrCwoULAXBP\nFElJSS7bdZfq0Gq1YtmyZfjoo49QUlJi72NpaSlCQ0MBOKdkDAoKapOisaamxqnN1n9LQUGB/W/5\n4IMPsGbNGvtxi8WCwsJCUEqRmJjoVE9qaqpi01dQUGCT9lImemKacEyZaMPxfUpKCsaNG4eKigr7\ny2Qy4fXXX/eoX/Hx8fZUhzby8vLsfdu0aRO2b9+Ob7/9FlVVVbhw4QIAcQuorf8WmzBPSUnBsmXL\nnP6WmpoazJ49G/Hx8bh8+bJTPY799CWK0FdQUGiDXCkTb731Vpw+fRobN26ExWKBxWLBkSNHcPLk\nSQDuhbO7VIc1NTUIDAxEREQEamtr8dRTTzmdz1f4U0qxdu1aXL58GeXl5fjrX/+K2bNnAwDuv/9+\n/Pvf/8bhw4dBKUVtbS127dqFmpoajB49GhqNBqtXr4bFYsG2bdtw5MgRXm3LhSL0FRQU2iBXysTQ\n0FDs3r0bmzdvRmJiIuLj4/Hkk0/CbDbb63WnDXeU6nDhwoVITU1FYmIiBgwYgOuvv75NisWOPrf+\n2wghmDt3LiZPnoy0tDT06tULTz/9NABg6NCheOutt/DQQw8hIiICvXr1wgcffAAA0Gq12LZtG9av\nX4/IyEhs2bIFM2fO7PDv8hai4+kTQt4FcCuAYkrptS7KrAZwM4A6AIsopb+0U4ayYO9SUPAWSjx9\n9unevTveeecdTJgwwdddYSqe/nsApro6SAi5BUBPSmkvAL8H8IYEbSooKCgoCEC00KeU7gdQ0UGR\naQDebyl7CEA4ISRWbLsKCgoKCvzxhstmIoCLDp8vAUgCUOSFthUUFBQEY/P+6Ux4y0+/tb2pXUPm\nsuXLoFVrAQDp6elIT0+XuVtXOXToEC5fvow77rjDZ25VZrMZn3zyCfr3748BAwb4pA8AcODAAZSW\nlmLatGk+60NDQwM+/fRTDBkyBH369PFZP3744QdUVlbi1ltv9VkfFBQcycrKQlZWFmpqauy7oPng\nDe+dywCSHT4ntXzXhuLkCmRmZiIzM9OrAh8ATCYTxo4di+zsbK+268jBgwdxxx132Dd/+AKb69l1\n113ntDXe2/z444+YOXOmfdONL6CUor6+Hr1790Zubq7P+qGg4Eh6ejoyMzMxdepUvPXWW7zP94bQ\n3w5gIQAQQkYBqKSUtmva2ZS3GdlXvC90CwoKkJiYiOjoaJSXl3u9fRtWqxUBAQHQ6XR2FzZvc+HC\nBfTs2RNJSUkoLCz0SR8Abiy0Wi3UarXPIi0ePXoUQ4YMQa9evdoEDVNQ8DWOO6J5nSe2YULIhwAO\nAOhDCLlICLmXELKYELIYACilnwM4Twg5C2AdgD+6qitiz2O4f8f9sDZbxXaLFydPnsQ111zj1TY7\nYuDAgU7R+rzJhQsX0L17d5+0bYNSajexDRw4EMeOHfNJPyorKxEZGemTthUUOqK2thbBwcGCzpXC\ne+duSmkCpTSAUppMKX2XUrqOUrrOocxDlNKelNJBlNKfXdVVefBhBJJgrDm8xlUR2bAJGbVajaam\nJq+3f+XKFcTHxwMADAaDIFudFLRez/CFH/mlS5fs8VoiIyNRUdGRc5h8OP7tQrUqBQU5yM7OxuDB\ngwWdy9SVPFL9E+arXsGqfauQW5nrtXYdBV2PHj18smJ/5swZ9OrVq90+eRPHdpOTk3Hp0iWv9+Hs\n2bNIS0vzersdERoaiurqal93g0n+85//YMqUKS6P79+/X5In6W7duuHbb7/1qKzcKRpdkZ+fj9DQ\nUNmVJbPZjMDAQEHnMiX0B0acR+FeIx4f/Tge2PmAT7TMpKQknwg6q9UKjca3QU9b2867d+/uM5c1\nXwemMpvNCAgIsH/u16+fTxe2WWbevHn46quv7J9bJ2AZO3asPbaOGFhJN9gRKSkpMJlMTPeTKaHf\nv1sJjvxE8dj1j+FKzRVs+nWT7G2WlJQgKirK/pmlH8vbk15eXh66detm/6zRaGC1end9hRXOnz+P\nHj162D+3jjqpwOHq+lDCS7ALU0J/xLhg/HQ+AhqVFm/d/hYe2/0YSmpLZG3z9OnTTmYVX9H6JomP\nj8eVK1e82of8/HykpqZ6tU1PCAsL87pppbCw0L7G0hW5ePEiZsyYgZiYGERFReHhhx8GwJlNxowZ\ng0cffRRRUVHIzMx0MqXceOONAIBBgwYhNDQUW7duRVZWllNMeld1nzt3DhMmTEBUVBSio6Mxf/58\nj9e23KVoXLJkCVJSUmAwGDBs2DB8//339mOZmZmYNWsWFixYgLCwMAwcOBBnzpzBCy+8gNjYWKSm\npuLrr7+2l09PT8eTTz6JkSNHwmAwYPr06fZ1p9zcXKhUKvtTc3p6OlasWIEbbrgBYWFhmDJlCsrK\nyux1ffDBB0hNTUVUVBRWrVrlsQlLzKTKlNDvNy4NtMmKy5eB4YnDMe/aefjzV3+WtU2z2YygoCBZ\n2/CE1k8YPXr08LqbIKW0zYKltzW29trr0aOHk7nAW/1g6anPm1itVtx2223o3r078vLycPnyZdx9\n993244cPH0ZaWhqKi4uxbNkyp3NtIZiPHTsGk8mEWbNmua17zpw59uPLli1DYWEhcnJycPHiRWRm\nZnrU545SNALAiBEjkJ2djYqKCsydOxezZs1ycoveuXMnFi5ciIqKCgwZMgSTJk0CwLlzL1++HIsX\nL3Zqb8OGDXjvvfdQWFgIjUaDRx55xGXfPvzwQ6xfvx7FxcUwm814+eWXAQC//fYbHnzwQXz44Yco\nLCxEVVUVCgoK3F53NTU1CAkJ8Whc2oMpoa/umYbB6mP4pSUG58rxK/HjpR/x6clPfdsxmWlqaoJa\nrXb6LiAgABaLxUc9uoq3BV9lZaVTViUAMBqNqKys9Go/WIAQaV58OXz4MAoLC/HSSy9Bp9MhMDAQ\no0ePth9PSEjAgw8+CJVKxVthaq9uWx7ctLQ0TJw4EVqtFlFRUfjzn/+MvXv3uq3TarVi27ZtWLly\nJXQ6Hfr374+MjAwnBWLevHkwGo1QqVR49NFH0djYiFOnTtmP33jjjZg0aRLUajXuvPNOlJWVYenS\npVCr1Zg9ezZyc3PtT5uEECxcuBD9+vWDXq/Hc889hy1btriMgHnPPfegZ8+eCAoKwl133WVPvP7R\nRx9h2rRpGD16NLRaLVauXOnR/Zafn++UjYwvTAl9dOuGgZafceJX7tEoOCAY709/H3/Y9QcU1xZ7\nrRtardarAregoAAJCQlea48v3tT2L1686GQK8BUsaPlSJcnly8WLF5GamurSTVXM79NR3UVFRZgz\nZw6SkpJgMBiwYMECJ1OIK9ylaASAl19+Gf369UN4eDiMRiOqqqpQWlpqP946ZWJUVJT9GrClZnRM\no9i6LYvF4lSfI3FxcU512+opKChwSg2p0+k82hdSXFyM6Ohot+VcwZbQDwrCNfoLOP5Tvf2rMSlj\nsGjQIvx+x++9Jny87cHDiqBrj5iYGBQXe2/CLS8vR0REhNfa40N4eLjP9gx4k+TkZOTn57tcpBUz\nIXZU91NPPQW1Wo3jx4+jqqoKGzZs8Gg3trsUjfv378dLL72ErVu3orKyEhUVFTAYDJKmULQ9nfAh\nISHBSc7U19d7NMm1Z4blA1tCH0Cv2BIcP+b8Y2SmZ+JC5QV8kP2BV/qQmJjoVaHf2j2QJVJTU5GX\nl+fVNlnQstsjKSmpTd7TzsjIkSMRHx+PpUuXoq6uDg0NDThw4IDH58fGxrpcjxoxYoTLumtqahAc\nHIywsDBcvnwZL730kkftuUvRaDKZoNFoEBUVBbPZjJUrV4pyDKCUYuPGjcjJyUFdXR1WrFiBWbNm\nubxuXU0uM2fOxI4dO3Dw4EGYzWZkZmZ6RbFlTugnp9bhVH4QHDfFBmoCseGODXji6yeQVymdAHI1\nwFqt1ie7cn1Je+sKABASEoLa2lqv9YMFV7/6+vp2bdWRkZEuH+E7EyqVCjt27MDZs2eRkpKC5ORk\nbNmyBYDr9IKO32VmZiIjIwNGoxEfffSR03G1Wu2y7meeeQY///wzDAYDbr/9dsycOdNjBaCjFI1T\np07F1KlT0bt3b3Tr1g06nc7J/OMuZWLrz4QQLFiwAIsWLUJ8fDzMZjNWr17t8bm2z/3798eaNWsw\nZ84cJCQkIDQ0FDExMYI3XXkMpZSJF9cVSi9kZNA0YynNyaFteHH/i3Tsu2OpxWppe1AApaWlNDs7\nu91j3333nSRteIKrtrzZh9zcXHru3Dmf98NVW3v27PFaH86cOUPz8/PbPSblWNiueQX/Ij09nb7z\nzjuS12symahGo6G5ubntHrddL62vwZbvPZa1zGn62h490Fd/HsePtz32xJgnEKgJxHN7n5OkLbGr\n4HITEhICk8nklbYuXbrktKjkCAvmFpVK5bWNYgUFBV3aR1/BPVSiJ9IdO3agrq4OtbW1ePzxxzFw\n4EDZ98owJ/TD+vbFNTjertBXERU23LEBb/38FvZc2CO6rcrKShgMBtH1yIU3N2hZLBaX6wpSXeCe\n4GqC8eaCMgshMRTYRipFaPv27UhMTERiYiLOnTuHzZs3d1ieSrB/hDmhH9KnD/o3/tyu0AeAuJA4\nrJ++Hgs+WSDJbl0WtFhXxMbGoqio62SVpFdNfW1ITEz0aXIZBQUbe/bscVozEMNbb72FiooKVFZW\n4uuvv3YbHaCioqLNPha+MCf0SWIiBtUeQkfh5CenTcb8gfOR8WkGmqlvEmxIhdVqbXcBFfD+fgFX\neGtirK6uRlhYWLvHQkNDvWbq6giWlQSFzk9RURFiY2NF1cGc0EdEBK6xnEBeHkVDg+tiz41/DpUN\nlfjb93+TpRveurlLS0t5+/d6G2+Zd4qLizu8oL1pZlJQYJHWASKFwJ7QJwSINqBHkgUOu6TboFVr\nsWXWFqw5vAZfnf3KdUGBeGsRVYqZW240Go1XnjiKi4uddkayCCHEZ+kbFRSkWG9iT+gDaIyKQv+k\nKpw40XG5pLAkbL5zMxZ+uhDnK6QNyBUXF+eVHLHl5eWibXRyExMTg5ISeaOdAh0vJrNCV/HVV+i8\nsCv0I6+4FfoAcGPqjVg2dhlm/HcG6izSxTuPjY31ircIFbml2hvEx8d7ZQJ0Z77xlsmto3a8NQEq\nKMgFk9LGHBmJ/voLHgl9AHh4xMO4NvZa3L/jfsnsvqwsonoDd2PWlVIFWiwWlwvrAKfpexIfRUE6\nWmfiYpHWcfRZhkmh3xgVhf7kN4+FPiEE625bh5ySHLx84GWPzmloaJB/u7Of4M4NrCt5rJSWlnYY\nwVCtVvvFja2g4AomhX5zdDR61B/DpUtAfb378gCg1+rx2ZzP8K9D/8K2nG1uy7vzFGEFbywcFhUV\nOYV/7cr4w8J6Z6GrxbeSAikUMCaFvq5bN5DCfKSlAXzyKScbkvHZnM+weOdiHLl8pMOyntzcLGi4\n4eHhHqeME0pJSYlHcbzlxt14e8OLqLKyEuHh4bK24Q/k5OQgPT0dRqMRAwYMwI4dOwAAhw4dQnx8\nvJNJ8JNPPsGgQYMAAM3NzXjxxRfRs2dPREVFYfbs2W1SCb777rtITU3FTTfd1G7bL730EhISEpCU\nlIR3333X6diuXbswZMgQGAwGpKSk4Nlnn7Ufs9W/fv16pKSkIDIyEv/+979x5MgRDBw4EEaj0Z6a\nEbia+vHhhx9GeHg4+vbti++++85+vKqqCvfdd5+9L8uXL7crYM3NzXj88ccRHR2NtLQ07Nq1S8xw\nexUmhX5Yr15ovnIF/fvDYxOPjaEJQ/H27W9j+n+ndxiRU2zKMW8RFRUlu7eIJ25gLEyA3hgLgI2/\n1ZdYLBbcfvvtmDp1KkpKSrBmzRrMmzcPZ86cwciRIxEcHOyUx3XTpk2YN28eAGDNmjXYvn079u3b\nh8LCQhiNRjz44INO9e/btw8nT57EV1+1dbX+8ssv8corr+Cbb77B6dOn8c033zgdDwkJwcaNG1FV\nVYVdu3bhjTfewGeffeZU5vDhwzh79iw2b96MJUuW4Pnnn8d3332HEydOYMuWLfaUjrayPXv2RFlZ\nGZ599lnMmDHDnqVt0aJFCAgIwLlz5/DLL79g9+7dePvttwEAb775Jnbt2oWjR4/ip59+skcTlRtJ\n1iz5RGeT8wWHiIPWggLaGB5On32W0qVL3YSmc8E/D/6TDlg7gFbWV7Z73JNoid6I7OiuH/X19fTA\ngQM+7QOl3hkLd22UlpbSo0ePytoHb44F3ETZRCYkefFl3759NC4uzum7u+++m2ZmZlJKKX366afp\nvffeSymltLq6mgYHB9ujkvbt25d+++239vMKCgqoVqulVquVXrhwgRJC6IULF1y2fc8999Ann3zS\n/vn06dOUEOIyAuySJUvon//8Z0optddfUFBgPx4ZGUm3bNli/zxz5kz66quvUkopfe+992hCQoJT\nfSNGjKAbNmygV65coYGBgbS+vt5+bNOmTXT8+PGUUkrHjx9P161bZz+2e/duSgihVqvV5d8mFgD0\n8OHD7X5PechaJqNKqaKjoTGZ0P8aK97f6NqToiOWjFyCc+XnMP2/0/HFvC8QpPF98nMhBAUFobGx\n0dfdkB1X8fwdMRqN+LWj+BydDPqMb3YgFxQUtMnklpqaak8gc/fdd2PMmDF44403sG3bNgwdOtRe\nPjc3F3fccYeTG7JGo3GKIdVRlrjCwkIMHz7c/rl1FNxDhw5h6dKlOHHiBMxmMxobG3HXXXc5lXE0\n2+p0ujafHfNDJCYmtvk7CwoKkJ+fD4vF4hRttbm52d6fwsLCDtMzyoUUZlgmzTvQaNAUGor+8eW8\nzTs2CCH4183/QlxIHGZ/NBtNzewtGikeRFcpKytze0GrVColFIMXSEhIwMWLF53GOi8vzx56u1+/\nfkhNTcUXX3yBTZs2Ye7cufZyKSkp+PLLL1FRUWF/1dXVOQnPjswg8fHxLtMeAsDcuXMxffp0XLp0\nCZWVlXjggQdEOTq0zoSWl5eHxMREJCcnIzAwEGVlZfa/o6qqyq50uOunXHReoQ/AbDSiZ3AhCgqA\nOoF7rlREhfenvw+z1Yzfbf+doOBscgqZsrIyj+JoyC3oWLBhs5wbt6sxatQo6PV6/P3vf4fFYkFW\nVhZ27tyJOXPm2MvMnTsXr776Kvbv349Zs2bZv3/ggQfw1FNP2YVgSUkJtm/f7nHbd911F9avX29P\nRei4UAtwa3FGoxEBAQE4fPgwNm3axPv6dbyfiouLsXr1algsFmzduhUnT57ELbfcgri4OEyePBmP\nPvooTCYTmpubce7cOft6wF133YXVq1fj8uXLqKiowIsvvsirD0JxFZCQD8wKfUt4ODRlRejVC8jJ\nEV5PgDoAH836CKfLTuOJ3U/wEqAGg0HW+DueaLesILfnTFlZmV8J/c7sq6/VarFjxw588cUXiI6O\nxkMPPYQNGzagd+/e9jJ333039u3bh4kTJzr9bkuWLMG0adMwefJkhIWF4frrr8fhw4ftx90J6KlT\np+JPf/oTJkyYgN69e2PixIlO56xduxYrVqxAWFgYnnvuOcyePdvpfE8mAMcyI0eOxJkzZxAdHY3l\ny5fj448/tu9Z+eCDD2A2m9GvXz9ERERg1qxZ9vwW999/P6ZMmYJBgwZh2LBhvFI7ikGSNvgsAMj5\nQqtFrSstzjdiAAAgAElEQVQTJlC6YQOdM4fS998XsuzhTFldGR2wdgB9Zs8zlFLPFuzy8/Pp2bNn\nxTfugr1799Kmpia35eROV+hJ/Tk5ObSwsNCnfeBTTs5+HD16lJaWlopuq/U1r+Bd3nvvPXrDDTf4\nuhse4+p6gb+nS7RhNhqBoiJBbpvtEaGLwDcLvsGWE1uwcu9Kj86R20WwubnZ7eIlK3jLXdIdLJii\noqKiUF5e7utuKCgIglmhb4mIAIqLJRP6ABAbEos9GXuw+fhmbMjb4La8TqdDQ0dB/b0EC4LOaDQy\nIeiojOsbntbNylgoiIMQwsS95W2YFfqN4eGSavo2YkNi8V3Gd/i2+FuPEqzLKWRYoKPMXY7IHXOG\nhZuvrq4OwcHBbsvpdDrUCfUuUGCGjIwMp41aXQVmhb6lxbyTlgYUFQE1NdLVbVAb8PqI17Hp+Cas\n2LOCecEuZ/9YCTvAwm/gqQdRV9UQFToHzAp9xMaiuagIajXQu7c4D57WlJWVoXdCb+xdtBc7Tu/A\nki+X+CTXrqeCTs6ga/7kQQTI+0Tgb2OhoCAE0UKfEDKVEHKSEHKGEPKXdo6nE0KqCCG/tLye9qRe\nfbduoC3uUVKbeGw3d0xwDLIysnD0ylFkfJoBi5XN+PkGg0G2ePZ8BB0L2q1arZYtOmNVVRUMBoNH\nZVl4MlFQEIIooU8IUQN4DcBUAP0A3E0I6dtO0b2U0iEtr1We1B3WsydIaSlAqeRC39GkYQgy4Mv5\nX6K8vhwztsxAvcXDWM5exGg02iMVSk1DQwOCgjwLUcGCoDMajfaAWFLT3Nzs9SxmNlOR8lJe7l5S\nIfYKHwHgLKU0l1JqAbAZwP9rpxzvHhvj49Gs1QLV1Rg0CMjOFtlTB1q7Suq1enw6+1OEBYZh4gcT\nUVJ7NR2elIMtlIiIiE7vLeLpOHcmzxlXftR79uzxyN/6zJkz9nAJUr887QPfsnxf3333nUflsrOz\nUVpa6tM+yDkWFotFskVnsUI/EcBFh8+XWr5zhAIYTQjJJoR8Tgjp50nFWq0WlvBwoLgY110H/Pwz\nQGVUNLVqLTbcsQETuk/AqHdG4WQpF8ifytmoh4SGhsq2M5iFSY0PrEyAco1bc3MzExMgC9d9XV0d\ndDqdR2XlfBpmAXfZ7fggVuh7cmX8DCCZUjoIwBoAn3pauTk8HCgpQXw8oNUCFy+6P0cMKqLCqgmr\n8PTYpzFu/Thk5WbJ1panrpIAJ2BYuAnlorGxEQEBAR6V1el0qPc0nZofwmddITw8XDZTFwuUl5d7\nvN7EijIgF1I6GYgNrXwZgGOc1GRw2r4dSqnJ4f0XhJC1hJAISmmbXygzM9P+Pj09HQNaNH0Adm3f\nGxFM7xlyD1LDUzH7o9m4J+kepCNd8jYqKys9vrnlhIXJhG+wNRaeTuQaNz43t5x7J1gY47Kysg7D\nMDui1+tl2zvBwliUl5ejR48eAICsrCxkZWUJrkus0P8JQC9CSDcABQBmA7jbsQAhJBZAMaWUEkJG\nACDtCXzAWegDQGErof/LL8D06SJ77CETuk9AVkYWJr83GTWf1+AfU/6BALVn2qgnVFZWMiHoWLmg\nO0pG3pUoLy/HgAEDPC4v1+TDgjJQWVmJa6+91qOyLFzHcmI2m+1Pw+np6UhPT7cfax2J1B2izDuU\n0iYADwH4CsBvAP5LKc0hhCwmhCxuKXYngF8JIUcBvApgTvu1tcVm3gGuavpS4OkF0je6LzaO24jz\nZecx8YOJKDQVStMB8N8UxcJNqNVqZYm06Y9hleUyufGxY3d2fOFN1R4s3Hssee+AUvoFpbQPpbQn\npfSFlu/WUUrXtbx/nVI6gFI6mFI6mlL6o6d1mw2GNuYdb5MSk4LXbngNk3tMxvC3huPAxQOS1Gsy\nmZjI0cvngg4PD5dlsaypqcltjl5HWLgJQ0JCnDIwSQWllNcNzoKGq1KpYLVaJa+X798m13XBwhhL\nie+n0Q6wGI12TT8lBaivB1r2a3mNiIgIVFVWYfm45Xjz9jdxx3/vwCsHXhG9g9cfb+7O7iHBB7k8\nZ1j4nQF+/ZBz74Sv4TuRBAUFMe9owLTQNzvY9AkBhg4F/vc/7/YhNDTUvhv2ll634NDvDuHjnI9x\n66ZbUVRT5OZs1/ijFiOX0PdHQceKt4gc1wVfsworeyfkuI4aGhp4mdsiIiKYV4yYFvoWB5s+AIwa\nBRw86N0+tM7L2i28G/Yu2ouh8UMxZN0Q7D6327sdkhC+AqMzh5rmm6/YYDCgqqpK8n6wQHV1Na+0\nfP4g6ITCd+2NlQmwI5gW+o6aPgCMHi1e6PPZ/OIKrVqLVRNWYeOMjbj3s3vx6FePos7Cz12Mr8CV\nQ9DV19czsWjIgo2ej388wE6SdjmuC76CrjOHmhYi9Fk3dTEt9JvCw0FLS4EWX+RRo4AjRwAx8bZM\nJpMkyYUBzq3z6ANHUVhTiMH/HizZIm97yCFgWAmrzBdlLK7CwliwsnlQrrHgowxoNBrZAgJKBdNC\nPyQiAggOBlpmTqMRSE4Gfv1VeJ1S39xR+ih8OPNDvHjTi5i5ZSYe++oxWYK2yXExVVZWSra125vI\nIWSqqqp4XxcsCDo54Gve6cw0NjZ6HJBQTqS81pgW+kajEU0taRNtXH+9OBOPXBrdjL4z8OsffsVl\n02UMXjfYbQgHvo/lcmy5r6ioYGJXMN+x0Ov1kntI+Kt/vBzukqz4x/srrCsDTP+yERERaDQYnBZz\nR48GDoiwolRVVcmmxUTpo7D5zs34201/w8JPFmLBJwtEefg4IofnjNls5rV4CbBxQRsMBlnspqx4\nEfHBYDDIFoyPDyyMXVBQEBOOBqzDtNAPCwtDQ2hom8XcH34QXiefQGc2+Aq66ddMx28P/ob4kHgM\neGMA1h5ZC2uzszbGt045XARZuFGFIMdTj5DJjIXxk2sC5AsrykBn9KiSwvnEEaaFvkql4jR9B6Hf\npw+3SSs313v9EDLgIQEh+Pukv2NPxh5sPr4ZI98eif15+wX3oTN7SPAVGJ315rbFTudDZ420abFY\neO3SBrixYOG6kFoZqKmpQWhoqGT1MS30gba++oQAEycC33zjw07xYEDMAOxdtBePXv8o5n8yHzP+\nOwNnys7wvjCkzp4DsKGdWa1W3vbjoKAgNDY2ytQjz5F6/Orq6hAcHMzrnLCwMNlSafJB6mtTyMI6\nK089UiP1OqR/CH0HTR8AJk0Cvv7ae30Qe3MTQjD32rk4+eBJjEgcgevfuR5rz69FWV2ZRD30X0wm\nk6DFZKkFLgumGiE3t1qtliXuja8RMhZ6vV6WeEi+pusJfYf4OzYmTgS+/dbuvu8VpBAyOq0OS29Y\niqy7sqAOUKPPa33wbNazqGrwzSOpvwo6VpB6/Px5LKRGyFjI8TQsBDnciaV0PmFe6Jtb2fQBzlc/\nKgo4epR/fUIuCqldBLWNWrwy4RX8+Lsfcb7yPHqu6YlV+1ahutH3j+nukNpFUKigY+HmlhqhiXWk\nHgsh9Ukt6GpqanibuuToBwtYrVbe6xsdwb7Qb2XTtzFpkvfs+lIvltk2RfWM6In3p7+PH+79ASdL\nT6Ln6p54fv/zqGzwjl1SyA0SFhYmqYtgVVWVpItUQhEyFhqNRtL8AhaLhbcLLcCOoOuMJjchsN5v\n/xD6rTR9AJgyBdi1S8KGTp0CFiwAHnkEKC11OiS1V0B9fb3TLr/ekb2xccZG7F20F7+V/Ia01Wl4\nfPfjuFTtlHmSiZtb6gmwubmZtwstwMZYdGYvIr7o9XomfORZELiEENnSWEoB80LfGh4OlJcDrUwK\nN90EZGe3+xDAn8JCYMIEoH9/wGzmZhQHc47UXgGuYun3je6LjTM24pfFv6CZNmPgGwOx6NNFOF58\nXLK2HRFyg0g9AbJwkwJsjIVQWBjDzug5I1SxkPppWGqYF/pUrQZsgt+BoCBg8mRg+3YJGlm2DJg3\nD1i6FHjjDaBbN+D55x3a8q6LYIohBf+Y8g+ce+Qc+kT2waQNkzBpwyTsL92PpmbfBnMKCwtjQtCx\nQGf0kRe6EagzjgXfWPo2WJ8AmRf6AIDo6HZNPHfcAXzyici6Cwq4SpYt4z4TArz6KvD660CZb10q\njTojnhz7JHKX5OKewfdg66Wt6P6v7nhu73Oi8/UKffxUq9VMPLpKqd0K2QgEcCkTWdbohCA0Ci0r\nTz1SItTJgPUJkHmhTykFYmLatePccguwfz/gaUiadgNJbdgA3Hkn4Og1kZzMzSivvSai567hK7AC\nNYGYe+1crBmyBjvv3olL1ZfQb20/3LnlTuw6vUuQ9i/1Lj+hsGCb5xtL3wYrIYWlRKig64xxb4SO\nBetPw8wLfQCgLjR9gwGYOhX47389q6dNyFhKgfXrgXvuaVv4sceAdevswftZubkHxQ3CutvXIXdJ\nLib1mIRV+1ch+Z/JeGL3E7xs//4aVtmGlL+HGP94FuzpUqLsFbiKUBdajUbD9IY55oV+SEgImtrZ\noGUjI4OT257Q5oI+cwYwmbh4za3p14/Lxi7D1l+hAsvRR94QZMDiYYtx8L6DyMrIglatxdSNUzHs\nzWH458F/4mLVxQ7rUm7uqwjZ8t9ZEbMRiAXFSMo+iImlz7IywLzQNxgMqG8VadORyZOBvDzg5En3\ndbURdF9+yT0quPqBFi3yfEbxAq7irPSJ6oPnJz6PvD/l4YWJL+BEyQkMWTcEo98Z7XICqKysZCJR\nhtCbIzAwULLFdZPJhJCQEEHnsiDoAOn6IdSFVsEZVq6L9mBe6IeHh6NWr3cp9DUa4N57gbVr3dfV\nxrxjE/qumDWLKyNxwg6hgs7dYplapcaktEl4e9rbKHysECvGrcDx4uMYvG4wRr8zGi8feBknS0+C\nUir5Lj9v01ldR4UQHBzMRARWFsaws8YikhLmhb7BYEB1UFCHDvl//COwcaM9q6JLnBZyLRZuFXji\nRNcnREYCw4YBu3czcUHzcQXTqrWY2nMq3vl/76DwsUIsv3E5zpWfw6QNk9BrTS+8fu51fHP+G5it\nZpl7LQ9SusWJ0cr87bqQExa0W1aijkqF1LH0AT8Q+oGBgagLDnap6QNAYiJw883AW2/xqDg7G+je\nnUu82xF33AFs28ajYveI2fQh5IIOUAfg5l43443b3kD+n/Lx8V0fw6A1YPme5Yh5KQYz/jsDa4+s\nxanSU16/cYW2x7pbHF+ExNK30dncJYW60AKd77qQw8uOeaEPtB9pszX/93/AP/4BeBxZ9ccfgVGj\n3JebPh3YuRNEoqTkYoSqFI+uhBAMihuE+SnzcfC+gzjz8BnM6DsDRwqOYNKGSUj+ZzIyPs3AB9kf\n4HL1ZVFtucPVzmRP0Ov1kpk0xGhSUk2S9fX10Ov1gs5lRdOXSiMVs7DOygQo1VjI4XDhF0bd9iJt\ntmbQIGDcOGD1auDJJz2o9McfudAL7khKAnr2RFh2Nhf7QST19fWCogfKRXRwNOYPnI/5A+eDUoqz\n5Wfx7YVvsf3Udvz5qz8jQheBMcljuFfKGFwTdY1kbYvRYlgwq0iJmJs7MDAQZrN/munaQ8xYhIaG\ndirzTkVFBZKTkyWt0y+EviU0FKiu5nzmO3jsW7kSGDOGW9iNjW173EkrO3gQeOopzzpw++2IOnCA\n890XiVDfXxtSCbv26iGEoFdkL/SK7IUHhj2AZtqME8Un8MPFH7Avfx9e+P4FVDVWobeuN6app2FU\n0ihcF38dDEHC/p7O4DYqpUYXGRkpSV3+TmVlJa65RphywcqOcamoqqrCgAEDJK3TL4Q+1GogIoKL\nfhkX57JY797cPqvHHuMWdl1SXMyFWPD0wpo2DVFr16LJYoFGq+XX91b4082tIipcG3stro29Fg8M\newAAUGgqxJtfvoni2mI8vedpZF/JRkJoAoYmDMXQ+KEYljAM18Vfh7BA9+6glZWVSEhIENw/qUwr\nLCxAVlVVoUePHr7uBhOmLqGx9KWGhbGQw4XWP4Q+cDX+TgdCHwCeeQYYMAD4/HMuTEO7HD4MjBgB\neJqb9dproSYENYcPI3zMGH79bgUrN7dQ4kPjMSV5CgYPHoygoCBYm604WXoSPxX8hP8V/g/bcrbh\nWNExJIQmYFDcIAyIHoABMdwrLSINGtXVS06MRscKtjC6fPP8tkbMRqDOSGcz37GEXwh9QojL+Dut\nCQ4G3n8fuOsu4MgRLoxOG7KzgSFD+HQAjZMno/nTTzn7kQg6w81tWziMi4uDWqVG/5j+6B/THxmD\nMwAATc1NOFl6Er8W/YrjxcfxwbEPcLz4OApNhegT1QcDYgbg2phrYSmyILoqGj2MPRCgDuDdDxYE\ng82jyt/NVFKg0WjQ1NTk1/s/pMIWl4mFa7Q1fvHrUEpdRtpsjxtvBP70J2DGDGDPHqDNZstjx4Bp\n03j1gUyfjoDly4GXXuJ1HquIefy0ucXFuXjq0qg0du3ekRpzDXJKcnC8+Dh+Lf4VBwoPYP2H63Gx\n6iISwxLRK6IXekX0Qu/I3tzaQkQvpIanOj0dyIGYG9PmLaII/atJZXxtvpTCtCK2DlsAOiGhmeXG\nL4Q+AI81fRt/+Qtw9iwn+D/9FHDyhsvOBp5+mlfz+ilTYJ0/H7hyxa2JSTC5uVxkz/37uUXr664D\nfvc7YORIexEW7M8GgwH5+fm8zwsJCMHwxOEYnjgcAJAVmIX09HRYrBZcqLyAM2VncKb8DHJKc7D9\n9HacLjuNKzVXEB8Sj9TwVKQaUtEtvBtSDalIDU/FlboraGxqRKCGf4pBqQgPD0d+fj5SU1N91gep\nELsRyKYM+FroS4FYgW1TBhShLwYemj7AhdP597+5hd2bbnJItlJXxwXr6dOHV/OqoCCUDhuGmF27\ngPvu43WuR7z/PrcCfd993IYDrRbYt48L+zx2LBffX6KomGIfO3U6naTb/rVqLXpH9kbvyN5tjpmt\nZlysuoi8qjzkVeYhryoP+/P3Y+OvG3Hqyinc9/N9iNRFIiksCQmhCfZXfEi80+dIfSRUpK3d3Wq1\nirLHsx5Glw9iNwKFh4fj7NmzEvZIGFKYVMR6ljmaQFnDf4R+TAzw88+8TtFoOFm6bBkwbBjFn/5k\nxPjQ3ziBH8Dfhlw6ejRiduwQJfTb1dRfew145RVOw+/b9+r3I0ZwMSaeegoYOhT47DPB7TpSU1Mj\nOMAYIJ0t3ZOnlgB1ANIi0pAWkdbmWFZWFsbeOBYFpoI2r+8vfo8CUwEKTYUoMBWgurEacSFxiA+N\nR0xwDKL10YjWRyNYFQzUAjVnahClj+K+D45GsDbYo7+zM8V6ESvoWEkqI8XTcGVlJSIiIgSfHx4e\njry8PNH9kOPJXrTQJ4RMBfAqADWAtymlf2unzGoANwOoA7CIUvoLzzZ4m3dsqFTACy8AgwfX4qGH\n+uP4NefxbM9xSORdE1A2YgQnoOvrAake23bt4lIzHjjApWlsjV7PZfIaMQK46SYYli0Dxo8X1aTQ\npCEsolapkWxIRrKh4w0sDU0NuFJzBQWmApTUlqCkrgSldaU4W3gW5Q3lOHj4oP37ktoSUFBE66MR\npY+CUWdEeFA4jEHc/47vjTojzlefR1xJnP2YTsveI70nVFZWIikpSfD5KpWKCXu6FFRWVqJ79+6C\nz2c5qYwooU8IUQN4DcBNAC4DOEII2U4pzXEocwuAnpTSXoSQkQDeAOBB/AOHTmo0sISHQ8vDvNOa\nkSNL8c03BJvvy8e1n7+I2zOAxYu5SAyePt03hYVxXj/ffgvcdpugfjhpjwUFnP3ps8/aF/iOzJ0L\nREVhwF13gfboASKwfYC7oGPb273mZ/ARDkGaIHQL74Zu4d2cvj969Ci6devWRsOtNdeitK4UpXWl\nqGyoREVDBfd/Pfd/oanQ/l1eUR5ev/S6/TgAhAaGIjQgFCEBIQgNbPk/oNX/DmXyivPQcLYBoQGh\n0Gv10Gl10Gl00Gl13GeNDmqVvCGPq6qq0L9/f1F1sCCwpXgSNZvNorzsWPTasSFW0x8B4CylNBcA\nCCGbAfw/ADkOZaYBeB8AKKWHCCHhhJBYSmmRp42Eh4fDZDIhQoCmb6OqqgopKSl4wfh3PPYuwfuX\nb8LvfselWrz5Zi6Ew9Ch3H6tDj3Opk3jFghECF0AXNauxYuBBx5oP4lLe0yejNOvvIL+997LxZuY\nM0dQ01VVVejdu639HJcucUlj9u3jVsGLirgF5bAwLqpd797A8OHcU4cEN7fYG0MKF8E24bZbCA4I\nRnBAMFLD3S/QZmVxC9I26i31qDHXwGQ2wdRosr+vMdfA1Ghyel9oKoTJbML5kvM4+ONBmBpNqLPU\nob6pHvWWeqf3GpXGaRKwTQx6rR71pnokXknkjmv0CNIEIVATiAB1AALUAQhUc+9t37X+HKAOQE5p\nDlSXVR2W0ag09ld7ayRSwILAZGHykguxQj8RgGOGjksARnpQJgmAx0LfYDCgsqEBESI0fXtGoJMn\nETUyDY9159ZNz53jNnJ99RVnZbl4kUuYlZrKveLiuPVToxG4dCkKSL0LQX99AIG/b0agToWgICAw\nkHup1dwCskp19eX4mRDAauXkJdm0CcjPBz7+mNffob3hBpRu3ozoBQuAqipu4uCJ2WxGgOOaxuHD\nwN/+BmRlcave48dzCWTi4rgZsLoauHwZOHGCizj6l79gTG0tkJ4O3HAD9xoyhFt8FkNtLff0Y3uV\nlwMNDdzLbL460EFBgF6PlLIy1BUWIiwxEQgNdX4FeubR0+HGKquVa7uxkXuZzVd/ULWae6lUUFdX\nc2PU8r1OrYYuKALR+ijXCXpa0XriaA2lFGar2WkScJwYfsr+Ccndk9FEmlBnqUNDUwPMVjMamxph\ntppRa6lFRUPF1e+arx5rtHL/F5UWYWv5VqfvWpexNlthabagqbkJKqJymgQ0Kg1oE4XuF53Td1qV\ntk05Vy+tWovS4lK8V/keVEQFFVRQq9Tce6KCmnDv2/vO9n1ebh72791vn5jclW/v+5PFJ1H6WykI\nCAghICBQEZX9veP/KqJq8x0BwdHyo0Au2j3maV3na88jqiiqw/J8ISJjic8EMJVSen/L5/kARlJK\nH3YoswPAi5TSH1o+fwPg/yilP7eqi7rqi8lkwqmcHAwbM4YTDAIWYffs2YPxw4dzawMmE3fDtkNt\nLefck5vL/V9UxMXpr6gAzp4thUYThcbD2WhM6YlGdTAaG6/Khebmqy9KXb2naG6+Kgj4KzUOY0Sp\nQwV86nSowxanhJCWE12f7FQvbb7aB/vvRrjT7XW5ap46/U9AnZ8cbOd6Uoerzx123naO/R8FnlBQ\ngDQDqibXL7Wl1XdW+3vapnyrsqQZIJQ7hzQDxPZ/s8N3bb+n7X7f7LJ8x99buT6AOvzf3HKLUOdj\npLntd6CgHRyz/40e1tW2PLj/V58DpdRjSSJW078MwHEFLRmcJt9RmaSW79qQmZlpf5+enm7XfEJC\nQlBTV8e5bZaUcKYGnhBCgNOngZ49XQp8gNvR268f92pNVtZxrk9LP+S02uee492PrKy9SN+/H/TX\n46CbPczo7kBDQyOOHj2KUaNGAZcLODPTNddwSdzDwtxbXSwW/JaZiX67dnGC8IknuAxhbrT01vVm\nZe1z1kwrK4FDh4AffuCC2V26BBQWArU13HGi4uInRUVxv2P37jivUqH7+AlAWhqX2yA6mtcsWF1d\njbNnz+K6665re7CxkZvcTSagpoZ7mUzcHxIYyCkOAQE4kp2N4aNHw+mRzfbSaDzqz969ezFu3Lj2\nB81qdf1qbrbX/8OBAxgzZkz7E17r79r5v6CgAPX19Ujr2bPjsh0c2//99xg7dqxnbQIA0QBwVsDc\nPbG4o6mpCT/++CNuuOEGz05o54I/ffo0goODkShATthw+Zt60L6Nffv24cYbbxTcB5PJhNOnT2Po\n0KHOfdu3F3v37bV1AKuwile9YoX+TwB6EUK6ASgAMBvA3a3KbAfwEIDNhJBRACpd2fMdhb4jti3N\ndl99oT/myZOeB1nriNtv51wpBQj9gLIy4NVXQX76CUJMonp9EBob67nF5+RE4McD3PbjQddyJppZ\ns9qf1EpLgbffBt54A0mRkVC/9CIwZYqQRw0AgFpNndc+osKBW6dwr/ZweirhnnguZ2WhtwhPJKMx\nBA0NpvbnK20gEBIIxEd1WIe5sQbagX07LOMOjYa6mDMJuFus49usoaEBgclx0CbGCO5DZJAaOTk5\n0EYKz3us0mmgDRG30U0bqII2ULit31Rbg4gog6g6ouMiUVpaCm2Q8IVvbZBa1PkAoA5UQasTLmLr\nymoRFRfZpo6bpkzETVOuZvxb9bwXhT6ltIkQ8hCAr8C5bL5DKc0hhCxuOb6OUvo5IeQWQshZALUA\n7hHcoEC3TTsihb7d/DRqFKfF5ua697pxoKmpCd3Xr+diP4twB3NCp+O0/L17gaVLuWwyt90G9O/P\nae+XLnH+/z//DMycCWzbhmyTSZQ2BghYbGtVXoq8AiqVSnQYXRYW7KQI4xAcHIxajzMIsYsUY2Ew\nGERvEmPhupDLy060nz6l9AsAX7T6bl2rzw+JbYcQwntXbqs+AKdO8Y650y5qNXDrrcCOHcDDD7sv\n30LNwYNcXP4NG8T3oTXjxnFmlWPHgO++4xZdGxuBhARuxXr8eM52BXALtj5GbF4BqZDCU0SsgJBi\nLOxPwyLrEIsUYyE2Cm1gYCAaGxtF1SEFYsfCpZedSPxnRy4gjab/f/8n+HSnyHnTpnEbtTwV+pQi\n4MknYXrkEUTIGZxr4EDuxThSxWgRK6hY0OiqqqokyY7EwliI7YPJZJI8J6y/0sbLTiL8IkcuwD/S\nZhuam4EzZ3jH3HHE6RH65ps5rdrTx8gvvoDq0iVoHhL90MMEKpVKVPgBVjR9KRCrZdfV1TEZmMsX\nSJGbAGDD15+FPrSH3wh9MaEYACCouJjzHhERc8Yp6XJQELeb9o033J9osQCPPYYzixcjRKKgab4m\nLEZCJ0QAABjhSURBVCxMVJwVsTsepUKKGzMkJES0PZ0FASFFH2xJZRTEI9c14TdCHwAn9AVq+sEX\nL4r23AkPD0dFRcXVL/7wBy6im7sbfu1aIDERZaNGdRotxhZFUOFqSGF/RwrzTmhoKGpqaiTojf+j\nVqvR1NTk6260wb+Evgjzji4/X7TQbyPouncHJkzgQiK44sIFzrXztdcEu0eyiNNTjwBYsKUD0vSD\nFaEv5m+R6vdgZSzEYLFYJMn+JfYekQv/EvoizDv6/HxR9nwACAgIgMVicf5y1SouLHJ7k1FTExeG\n+YknpNkfwBCdIY68VOnsOsNTj1RZnjqD0K+urpZkvUnsWMilGPmX0Beo6VNKoZfAvNMuvXsD99/P\n2fcdbZmUAo8/zrl3PvaY9O0KRCotRq1Wi7LdsmCiEps0xIZWq22rDPgZYmPp2+gMyoBUY8HqBOhf\nQj8sjAt6VV/P67T6+noEX7okidBvV1itXMlt8b/nHi5IT1kZl+Zw/37gv/91E7aTP2I0ACWf61Wk\nurkBNiYxMUg1FhqNxu+Tykg1FmKTynT5hVyVSgVrc/PV+Ds8qL54EZraWuHhG9yh1XKhOrVaICmJ\nC8+pUnGboERk33GFmItBSldJFmzIYuhMbqOAuOuiMyXWEYvYzHI2pNgwJwd+I/QNBgP32CjArl9/\n9CisaWmeZ0sRQkgIF9umqooLPvbWW1yIXxkQ4xUgpXbLAmJCMSiC7ioNDQ1MuNCygFRrPaziN0Lf\nbh8T4LbZdOIEVO2FzZQDjUZyc05rxNgKpdJixCLVTRUaGir4EbqpqQlasTkAWmBBo2PVRdBXsPCb\niKHLL+TaBZ2AxVzt+fNQi0wDxxJihL6UWgwL2hCri2W+gFUXQV+g0+mYzVHra/xG6IeGhqK6ulqQ\neUcKd02WMBqNiqBrQewE2Jnw9wlQyt/D38eisbERgR5mf+OL3wh9lUolOP5OsAQbs1giODiYiV2P\nLCzksuIiKPSpx2q1Qt1BUh8++Lugq62tlcz06O9jIed6k98IfTuxscCVK56Xb2pCUEEB0KuXJM0L\nFVZSajGsegV4ipRajJj9AiyYp1wlZheCWBdBXyOloPP3DXNyOlz4n9BPTuYSg3jKhQswR0YCer18\nffKAuro60UlDWEOo0FT2ClxF2StwFSnHIigoiImY+kKR8x7xT6Gfn+95+ZMnUZeSImkXhGjZUs/c\nLNzgQp82WHEblfJpyd/HggUUF9qr1NbWQi+ToupXQp8QclXT9/SRXmKhLzSKYGfUboX6yHe2TVE2\nhAh+qZOGsGD2E9oHuZKG+CtdfkeuHb2e2wjlqQePxEJfqOcMK4JOygvJYDBwHlU8kVOL4YOUY6HX\n6wW5CEqVNIQllJj6VxF6jck5efvn1ZaSAly86FlZiYW+UK8AqbUYFjQ6oWNBCGHCPCUl/u4tIiVK\nTP2raDQa5oLx+afQ99SuTymQkyOp0Pd3rwApaZNUxkewMIEoQv8qrIyFEMVI6icUoRvm5Lym/VPo\ne6rpt5iAzBKaVViJIsiCoAsLCxNk3pH6KUVIfZRSSfvBijIg5LqQKty2DTFPgL5GqnDbNliZAB3x\nT6HvqaZ/8iS3KYuBi4kFpBa29g1zfkh9fb2k6wpBQUF+u+1faq8ZoRMgC9eS1A4XitCXCk81/ZMn\n0dy7t6RaDCsIuUHkCLYmpB8saHSseFN1xrFg5WlYCFI7XAjdPa8s5LZgjyLIQ9OvT01lwmuGBVgR\ndCwgh3+8EAHOgnbLyl4BViZAKeUFC39Ta/xK6NtdBFNSPBP6v/0GU1ISExe01AQGBvI2J8jhNsqC\noBMSloIVF1oWMJlMTITbZmECtFgskoXbFoOykNuC3T6WkMClJXSXNjE7G6UJCZLf3CyYNIxGI2+v\ngM664zE4OBi1tbW8zmElaYjU14XQmPosaqRSwMJEwhr+KfTVaqBHD+DsWdeFi4uBhgaUBQdLuhov\nFKkvPiELRBaLRfIdjyxMgELGQg4hJ9SLSEqEbJhjRTBK/ZsIianfWSc/R/xK6DtFEezdGzh92nXh\nY8eAgQPRTGmn2/EICPORZ+XmlhoWPSR8BStjwYLwFDIWLNwjVqtVMe/YcHIRdCf0s7OBQYNk6QcL\nF3RQUBDq3Zm3vAALNn17/mQf9gHgPxZy5GIV4i7JwvVsNpslt6WzMgHyRW6HC78S+k54IvQHDvRe\nfzpALgHD92Zl4eZuamqSLGmIDa1W65e5YWtrayUPt23PMMcDFrTbiooKGI1GSev01/SRcoyFI51X\n6B87Jpumzxc5bm4hsHBzd9bFZCFUVFQgIiJC0jqFbJhjQRkoLy+XfCz8dcOcHGPhiH8L/VOnuPg6\nrWls5CaE/v1luaD5RhGU4+b2VyoqKhAZGSl5vSxMaHwpLy+XVaPzJ+TWbv2JmpoaWZVE/xX6MTGc\nF8/ly22P/fwzF35Br5dFGPCNIijXBc2CRsc3imBnFnSs7BVgQXPnixJL3xllIbc9CAGGDgX+97+2\nxw4cAEaPlq1pvgtErGwEkmMC5DsWrMTSl4PAwEBeKfpoJ/Uss+GPT19dAf++4oYOBX76qe33jAn9\n5uZmyRcvATY0Or5jwUosfTn64K8Lh3KgxNS/Cmsx9QULfUJIBCHka0LIaULIbkJIuz5GhJBcQsgx\nQsgvhJDDwrvK4aQ9tKfpUyq70A8LC/PLm1sOQSc0k5jUsDCRhIeHo7y83Nfd4KVhy6WN+6O7ZGNj\nIwIDAyWvl68yIPe1LEbTXwrga0ppbwDftnxuDwognVI6hFI6QkR7bbFp+o4Xbk4OEBAApKZK2pQj\nGo2GCRdBvje3HDe4Xq/nHQLB11gsFlmevCIiIpgQ+nyQOkevDaPRyMRY8Lnm5Vp7Y20CFCP0pwF4\nv+X9+wCmd1BWnqkrKQkIDQV+/fXqd59/DtxyC0AIrFZrp7aZ8qGurk4WjwAhwc58TWVlpSw3d1BQ\nEC+bPgvI5VkmZMOcHPDRmuUaC1YmQBtiJGIspbSo5X0RgFgX5SiAbwghPxFC7hfRHoBWPyIhwM03\nc4LexrZtwO23A1BCCTvS2V3i+Ew8cvpBs2Bm4tMHubyp1Gq13yVHl2ssWHsa7jC7CCHkawBx7Rxa\n5viBUkoJIa7uujGU0kJCSDSArwkhJyml+9srmJmZaX+fnp6O9PT0NmVsIYXtERJnzAAeeQT4y184\n005uLjB5MgB5/eNZubk93cpfUVGB+Ph4L/SKfSoqKpAiYd5kf6aqqgphYWGy1M3CEyCfPsjlNiq1\nrMjKykJWVpbg8zsU+pTSSa6OEUKKCCFxlNIrhJB4AMUu6ihs+b+EEPIJgBEA3Ap9V0RGRqKsrAyJ\niYncF+PHcxr/J58A777LTQAtmbLKy8vRt29ft3X6K7ZHaE+eZiorKzv1WOh0OtTX10On07kt29DQ\n4FE5f8W2edBT06ZiAvUvWivEzz77LK/zxfza2wFktLzPAPBp6wKEED0hJLTlfTCAyQB+bV2ODzah\n79AI8MYbwD33ALW1wKOP2g/JvbPN17QZiw5oamqSLW0kC089ERERHo9FZ4ePPV1ObZyF6yIgIABm\ns9nX3WBiLGyIEfovAphECDkNYELLZxBCEgghu1rKxAHYTwg5CuAQgJ2U0t1iOtzuSvgNN3BJVfbs\n4Tx3HGBpsKWGj9DvzOMAcGPh6WIZC2YHOeEzFnLi6TjL+XvwuUdYoLGxUfadyYJVP0ppOYCb2vm+\nAMCtLe/PAxgsuHft4HKBiOFHVLkuar1ej7q6Op/2gU/dcoQStmEwGHD8+HFZ6uaDp2NhsVhke/KK\niIjAiRMnkJaW5rYsC8qAyWSSbV0hMjISRUVFfrOe5Q2HC3YlZSeBj22VLyzcsHyora2VLRerv3mL\nyOlkwIoy4On1KWc8JqPR6HGyITnvJ0/H2RvBGTu10GfhR+wKoYT53NwsRBtlYbLs7G6jgOf3iJxj\nodFoYLVaZalbDrwRkLBTC305tRhPM1d1BUHnaajpzhxhky+sjAULE4Sc5h1/Q4481q3p1EJfTjxd\nICotLUVUVJQXeuQ7PPUWkdMnnA9yKgOeeovIFeeFL3Kbdzypv7m5mYnJh4UFfm/0oVMLfTkvJE+F\nfn19facNJWwjMjISpaWlbst19lDCgH/G35GLsLAw3qkbOyueKgPemPw69x0oI54GUZJ75mZBQ2LF\nLY4FTY2VsfAEucfLn/ZOyLmPBfBcGVA0fYZhxVvEk4tE7gtJr9d7lIuUhQnKarXKEmHTBmvBtTpC\nriB8NljZL+DJdVdWViZLGk8bLCkDnVboNzU1yXpz+xNyukraYGHy8QS5F9a1Wq1HYbdZmABLSkoQ\nHR0tW/0hISEeJVKReyw8ue7kXntjyeznl0LfE28RuWduf0Lum9ufUMbiKnKPhacLuSwoA2VlZbIq\nA6zk4AD8VOh7Yk8vLS1l4uaWW4vxxHW0K3gQAZ4JGUUZuEptbW2njk3FB6vVKqtN31OUhVwXeGIf\nY8UPWm6ioqLcjoU3kpGzYK7wRBnwxs3NwlhotVpmvEVY6IM7ZYCFcQCUhVyXeCL0Wbm55f4RPV0g\nYuWilpOYmBgUF7cb4Zs55L4uYmJiUFJSImsbUiBXGk9HDAaDW9dRFkxMcnsQ2fBLoa/T6TzyFpEb\nFi4UVtLSuRsLb4xVdHS0W0HHwuQnZ7A1GzExMSgqKnJf0MfU1NTIkqPXkdjYWCbGwt215y3To18K\nfX/BGx5EKpWKCddRd1RXV8u+G9dTzxm5cTfBeWONhZWNUe4EnTcW1j1RBljAW2tvfiv0WdDYgI5v\ncG9EzGMFFm5ugI2nL3d4YyxYuT/cUVJSIrug02q1sFgssrYhBd6K0+W3Qp+FmzssLAwmk8nl8aKi\nIsTGusoX37nQaDQd3lhdyVXSnRdRV1IG3CH3BjFPYWGSVGz6fkBcXByuXLni8nhpaWmXcQ90t4jq\nlMy+k+POi6grxCCyERgYyMT6mzu8oUS621/krYmna1x5MuFO0HWlmzsuLs4vFsu8cXPHxsa6vS68\nAQtPw/7gUWW1Wr1yn7KyK9dvJRILF7S7hUMWHhnlTFHoSGhoKBMLhx1dF956fI6KimJ+4dBkMske\nmgNwPwGyQHFxsVfMsKx4Efmt0O+I+vr6LmNKcIfc28ttuJtYWJgAvbXGwooXUUcUFhYiISFB9nY8\njb/jSwoLC72SQ5eVoGt+K/SDgoJc2gq99SOygkqlcpkS7sqVK4iLi/Nyj9rCwpNZQUFBl7ouOqKo\nqAgxMTG+7obX6Oj681ZyH1Yi8/qt0O/oUYkVQectOtIgutJiMsBt3HOVFNwb0UZZoiNloCvFmvEE\nVvrhDfxa6LvynDGbzUykovMWHXkRsbKY7K2bKjk5GZcuXfJKW0Lx1liwYkN2hTef/lhfc/JmKHjf\nSwOBBAcHu9ToWDAleBPWE3d4yzsCcD8B+hpvrjclJyfj4sWLXmlLCBUVFV4LipiSksLEWLia8L25\np8dvhT7r1NXVQafTeaUtlUrFhEBzhbe8IwB27Kau8NYCKsC+YuTNsegoFIM3TTuuxt2b65CK0BeJ\nq3j2XW0xGXBtQy4oKPDazc0KrqJHFhYWdqn1JsC1oPPmelNHu6RZmAC9EXjOhiL0RZKSkoL8/Pw2\n33dFQRcfH4/CwsI235tM/7+9s4uNMivj+O+fLgXaBRehWSlT0mlpC4ilEJBGY0zMXhCjq3ux6kbj\nxhiv/FiNMYoXxku9MGpivFB3N2vULaaKWbOKru6CJiZGwkeB0tIvylCyQP2iNHT46OPFvDMOw7SF\naTnnHd7zS0jmfZl5z9Mz5zzznOfjnClnAzouzFWIc/PmTWpra53JEYcA5VzB9bjEm1wyX3DdmQxe\nW18kcRjQc/mQXRUCxYm4+5BdEueA8uzsrNO5E+e+yGazTn+EGxsbyxpGLqlqpV9uWTY7O+vUeojz\n1sbZbNZpFtOKFSvIZrPO2rsfXOVi54lzcN11SvNchlEc3CqZTIaNGzc6ay+VSnk3jKpa6ZfzpyfR\nlw65AGbpsjGTydDU1ORJov8Th8k9NjZGS0uLs/bmsqTj0Bfj4+M0Nzc7a6/c2PRBue/EtRt25cqV\nZQ0jl+OiqpV+uWXj+fPnnf5yz4Xryd3Y2MjFixfvuJfEuALktrwuPU3MZXpgnjgo+GXLlt2lZHzs\neBqHvii3y+Xs7Kyz/Pi4UNVKv1zgMKkDupw/PQ4D2sUZqKW0tbUxNDTktM1ylFqWrn3pAK2trYyM\njDhtsxylf7eLIyNLSaVSdxmJPuZuaZvXrl1zeqZAVSv9uORklw5oH9kqy5cvj4U/vXRAuzoNqJhV\nq1bNe7iNLyYmJpyvvOJalTs8PExra6vTNpubmzl37pzTNu+FgYEBNm/e7Ky9qlb6EA8re+3atUxO\nThauBwcH6ejo8CiRP+rq6pieni5cJ7kvampq7thtc3R01Lmii0OGW57iueoj9haX2EIpLs6PLqbq\nlX4caG9v5+zZs4Xrqakpp19intIJ7uMHccuWLZw5c6Zwnc1mnVUmF1P8t/syDNLpNKOjo4Xr27dv\ne3e3+ZIhlUoxMTFRuJbk/QdpZmbGyx5dpUaiaypW+pKelnRa0m1JO+d5315JA5KGJH210vbmeX5h\nUk9PT3tRMKXbPPtSMsXtTk5OejmHdfXq1XdsbBWHlZjrtLw85XzIPij+DnysNgBaWlruiC3EYY74\nWoW2t7czODjovN08i7H0TwJPAX+Z6w2SaoAfAHuBrcAzkrYsos276OjoKFiWx48fp6uraykff88s\n5SA+dOhQRZ9rampifHwcgFOnTrFt27Ylk+l+WEoru9K+aGhoKJzYNDIyQjqdXpQclbDUK69K+6I4\nmymTyXjJ6Cp2rSxFcL/SvihO8/a17XhxPYuP4H7FSt/MBszs7AJveycwbGbnzOwm0AN8qNI2y7F+\n/fpC4Uc2m/V2YlZ+xXH9+vVFrzYqHdDFmRpxyNy5cuUK69atW9QzKu2LrVu30t/fD7gv2Csmr9wy\nmQypVGpRz6q0Lzo7O+nr6ytc+3arDA0N0dbWtqhnVNoX27dv58SJE4D/fgA/xtmDngkbgOI8wgvR\nvSUln8HjM5Mnv+I4cuQIO3bs8CJDPg/ZzLwGrPJL+b6+Pjo7O73IkA+i+s7uSqfTDA8PMzg4SHt7\nuxcZamtrmZmZ4datW14V3Zo1a5icnPRaS1NfX8/U1BTZbNbrNin19fVcvXqVy5cv09DQ4LTteZW+\npNcknSzz74P3+HwnjrtNmzbR09PjTcEAbNiwgbGxMW7cuOH1fN7m5mZ6enrYtWuXNxnS6TT9/f3U\n1NR4VTKpVIr9+/ezZ88ebzK0tLRw+vRpamtrvfZFY2Mjvb29dHd3e5Ohq6uLw4cPU1dX500GyB1c\nf+DAAa99sXv3bg4ePOjlJDct1rcm6Q3gy2Z2tMz/dQPfNLO90fU+YNbMvl3mvf4jfoFAIFCFmNk9\nWxRLtb6Zq8EjQJukZuAi8FHgmXJvvB+hA4FAIFAZi0nZfEpSBugGXpX0++h+o6RXAczsFvA54A9A\nP7DfzM7M9cxAIBAIPFgW7d4JBAKBQPXgvSL3QRdvVQuSmiS9ERW8nZL0Bd8y+UZSjaRjkn7rWxaf\nSHpMUq+kM5L6o1hZIpG0L5ojJyX9QpL7klpPSHpB0iVJJ4vuvTVKuDkr6Y+SHlvoOV6VvovirSri\nJvAlM3s7OZfZZxPcF3meI+cWTPpy9PvA78xsC9AJJNJFGsUGPwPsNLN3ADXAx3zK5JgXyenKYr4G\nvGZm7cCfo+t58W3pP/DirWrBzN40s+PR62vkJnbyNsOPkJQC3g/8hLkTBR56JL0FeI+ZvQC5OJmZ\n/XeBjz2sXCVnHNVJegSoAybm/8jDg5n9Ffh3ye0ngZei1y8BH17oOb6VvpPirWojsmh2AH/3K4lX\nvgt8BfC/d7Zf0sAVSS9KOirpx5L8Jrp7wsz+BXwHOE8uG/A/ZvYnv1J553Ezy++dfQl4fKEP+Fb6\nSV+234WkR4Fe4LnI4k8ckj4AXDazYyTYyo94BNgJ/NDMdgLT3MMS/mFEUivwRaCZ3Cr4UUkf9ypU\njLBcVs6COtW30p8Aig9xbSJn7ScSScuAXwE/M7Pf+JbHI+8CnpQ0BrwMvE/STz3L5IsLwAUz+0d0\n3UvuRyCJ7AL+Zmb/jNLBf01urCSZS5LeBiBpPXB5oQ/4VvqF4i1JteSKt17xLJMXlKvRfx7oN7Pv\n+ZbHJ2b2dTNrMrM0uUDd62b2Sd9y+cDM3gQykvIb9zwBnPYokk8GgG5JK6P58gS5QH+SeQV4Nnr9\nLLCgsehvxyFyQSlJ+eKtGuD5BBdvvRv4BNAn6Vh0b5+ZHfQoU1xIuhvw88DPI8NoBPiUZ3m8YGYn\nohXfEXKxnqPAj/xK5Q5JLwPvBdZFhbHfAL4F/FLSp4FzwEcWfE4ozgoEAoHk4Nu9EwgEAgGHBKUf\nCAQCCSIo/UAgEEgQQekHAoFAgghKPxAIBBJEUPqBQCCQIILSDwQCgQQRlH4gEAgkiP8BYYh8Ti/Q\nduUAAAAASUVORK5CYII=\n",
  737. "text/plain": [
  738. "<matplotlib.figure.Figure at 0x1093bf4d0>"
  739. ]
  740. },
  741. "metadata": {},
  742. "output_type": "display_data"
  743. }
  744. ],
  745. "source": [
  746. "fig, ax = plt.subplots()\n",
  747. "ax.plot(t, y1[:,0], 'k', label=\"undamped\", linewidth=0.25)\n",
  748. "ax.plot(t, y2[:,0], 'r', label=\"under damped\")\n",
  749. "ax.plot(t, y3[:,0], 'b', label=r\"critical damping\")\n",
  750. "ax.plot(t, y4[:,0], 'g', label=\"over damped\")\n",
  751. "ax.legend();"
  752. ]
  753. },
  754. {
  755. "cell_type": "markdown",
  756. "metadata": {},
  757. "source": [
  758. "## 5. 傅立叶转换"
  759. ]
  760. },
  761. {
  762. "cell_type": "markdown",
  763. "metadata": {},
  764. "source": [
  765. "傅里叶变换是计算物理中的通用工具之一,它在不同的环境中反复出现。SciPy提供了从NetLib访问经典库[FFTPACK](http://www.netlib.org/fftpack/)的函数,NetLib是用FORTRAN编写的高效且经过良好测试的FFT库。SciPy的API有一些额外的便利函数,但是总的来说API是接近于原来的FORTRAN函数库的。\n",
  766. "\n",
  767. "为了在python程序中使用`fftpack`模块,我们需要这样包含它:"
  768. ]
  769. },
  770. {
  771. "cell_type": "code",
  772. "execution_count": 28,
  773. "metadata": {},
  774. "outputs": [],
  775. "source": [
  776. "from numpy.fft import fftfreq\n",
  777. "from scipy.fftpack import *"
  778. ]
  779. },
  780. {
  781. "cell_type": "markdown",
  782. "metadata": {},
  783. "source": [
  784. "为了演示如何用SciPy进行快速傅立叶变换,我们先看以前章节中阻尼谐振子的傅立叶变换结果:"
  785. ]
  786. },
  787. {
  788. "cell_type": "code",
  789. "execution_count": 29,
  790. "metadata": {},
  791. "outputs": [],
  792. "source": [
  793. "N = len(t)\n",
  794. "dt = t[1]-t[0]\n",
  795. "\n",
  796. "# 计算快速傅立叶变换\n",
  797. "# y2是以前章节中欠阻尼谐阵子中的解\n",
  798. "F = fft(y2[:,0]) \n",
  799. "\n",
  800. "# 计算F中组成的频率\n",
  801. "w = fftfreq(N, dt)"
  802. ]
  803. },
  804. {
  805. "cell_type": "code",
  806. "execution_count": 30,
  807. "metadata": {},
  808. "outputs": [
  809. {
  810. "data": {
  811. "image/png": "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\nU/x/8QPGQJ9lUrYAAAAASUVORK5CYII=\n",
  812. "text/plain": [
  813. "<matplotlib.figure.Figure at 0x108e03b10>"
  814. ]
  815. },
  816. "metadata": {},
  817. "output_type": "display_data"
  818. }
  819. ],
  820. "source": [
  821. "fig, ax = plt.subplots(figsize=(9,3))\n",
  822. "ax.plot(w, abs(F));"
  823. ]
  824. },
  825. {
  826. "cell_type": "markdown",
  827. "metadata": {},
  828. "source": [
  829. "因为信号是在真实的,所以频谱是对称的。我们因此仅仅需要正频率。为了提取`w`和`F`的部分,我们可以用一些我们在第二节课看到的NumPy索引技巧。"
  830. ]
  831. },
  832. {
  833. "cell_type": "code",
  834. "execution_count": 31,
  835. "metadata": {},
  836. "outputs": [],
  837. "source": [
  838. "indices = where(w > 0) # 仅仅选取对应正频率的元素索引\n",
  839. "w_pos = w[indices]\n",
  840. "F_pos = F[indices]"
  841. ]
  842. },
  843. {
  844. "cell_type": "code",
  845. "execution_count": 32,
  846. "metadata": {},
  847. "outputs": [
  848. {
  849. "data": {
  850. "image/png": "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\nRU5ErkJggg==\n",
  851. "text/plain": [
  852. "<matplotlib.figure.Figure at 0x108d77690>"
  853. ]
  854. },
  855. "metadata": {},
  856. "output_type": "display_data"
  857. }
  858. ],
  859. "source": [
  860. "fig, ax = plt.subplots(figsize=(9,3))\n",
  861. "ax.plot(w_pos, abs(F_pos))\n",
  862. "ax.set_xlim(0, 5);"
  863. ]
  864. },
  865. {
  866. "cell_type": "markdown",
  867. "metadata": {},
  868. "source": [
  869. "和预期的一样,我们现在在频谱图上看到峰值中心在1左右,这也是我们在阻尼谐振子例子中的频率。"
  870. ]
  871. },
  872. {
  873. "cell_type": "markdown",
  874. "metadata": {},
  875. "source": [
  876. "## 6. 线性代数"
  877. ]
  878. },
  879. {
  880. "cell_type": "markdown",
  881. "metadata": {},
  882. "source": [
  883. "线性代数模块包含了许多矩阵相关的函数,包括线性函数求解,特征值,矩阵方程(例如矩阵求幂)和许多不同的分解(SVD,LU,cholesky)等。\n",
  884. "\n",
  885. "详细的教程可以在这里找到:http://docs.scipy.org/doc/scipy/reference/linalg.html\n",
  886. "\n",
  887. "在这里我们将会看到如何去用这些函数:"
  888. ]
  889. },
  890. {
  891. "cell_type": "markdown",
  892. "metadata": {},
  893. "source": [
  894. "### 6.1 线性代数系统"
  895. ]
  896. },
  897. {
  898. "cell_type": "markdown",
  899. "metadata": {},
  900. "source": [
  901. "矩阵形式的线性代数系统\n",
  902. "\n",
  903. "$A x = b$\n",
  904. "\n",
  905. "在这里$A$是一个矩阵而$x,b$是向量,可以以这样的方式来解决:"
  906. ]
  907. },
  908. {
  909. "cell_type": "code",
  910. "execution_count": 1,
  911. "metadata": {},
  912. "outputs": [],
  913. "source": [
  914. "from scipy.linalg import *\n",
  915. "import numpy as np"
  916. ]
  917. },
  918. {
  919. "cell_type": "code",
  920. "execution_count": 2,
  921. "metadata": {},
  922. "outputs": [],
  923. "source": [
  924. "A = np.array([[1,2], [4,5]])\n",
  925. "b = np.array([1,2])"
  926. ]
  927. },
  928. {
  929. "cell_type": "code",
  930. "execution_count": 3,
  931. "metadata": {},
  932. "outputs": [
  933. {
  934. "data": {
  935. "text/plain": [
  936. "array([-0.33333333, 0.66666667])"
  937. ]
  938. },
  939. "execution_count": 3,
  940. "metadata": {},
  941. "output_type": "execute_result"
  942. }
  943. ],
  944. "source": [
  945. "x = solve(A, b)\n",
  946. "\n",
  947. "x"
  948. ]
  949. },
  950. {
  951. "cell_type": "code",
  952. "execution_count": 4,
  953. "metadata": {},
  954. "outputs": [
  955. {
  956. "data": {
  957. "text/plain": [
  958. "array([0., 0.])"
  959. ]
  960. },
  961. "execution_count": 4,
  962. "metadata": {},
  963. "output_type": "execute_result"
  964. }
  965. ],
  966. "source": [
  967. "# 检查\n",
  968. "np.dot(A, x) - b"
  969. ]
  970. },
  971. {
  972. "cell_type": "markdown",
  973. "metadata": {},
  974. "source": [
  975. "我们也可以这样来做\n",
  976. "\n",
  977. "$A X = B$\n",
  978. "\n",
  979. "在这里$A, B, X$是矩阵:"
  980. ]
  981. },
  982. {
  983. "cell_type": "code",
  984. "execution_count": 37,
  985. "metadata": {},
  986. "outputs": [],
  987. "source": [
  988. "A = rand(3,3)\n",
  989. "B = rand(3,3)"
  990. ]
  991. },
  992. {
  993. "cell_type": "code",
  994. "execution_count": 38,
  995. "metadata": {},
  996. "outputs": [],
  997. "source": [
  998. "X = solve(A, B)"
  999. ]
  1000. },
  1001. {
  1002. "cell_type": "code",
  1003. "execution_count": 39,
  1004. "metadata": {},
  1005. "outputs": [
  1006. {
  1007. "data": {
  1008. "text/plain": [
  1009. "array([[ 1.19168749, 1.34543171, 0.38437594],\n",
  1010. " [-0.88153715, -3.22735597, 0.66370273],\n",
  1011. " [ 0.10044006, 1.0465058 , 0.39801748]])"
  1012. ]
  1013. },
  1014. "execution_count": 39,
  1015. "metadata": {},
  1016. "output_type": "execute_result"
  1017. }
  1018. ],
  1019. "source": [
  1020. "X"
  1021. ]
  1022. },
  1023. {
  1024. "cell_type": "code",
  1025. "execution_count": 40,
  1026. "metadata": {},
  1027. "outputs": [
  1028. {
  1029. "data": {
  1030. "text/plain": [
  1031. "2.0014830212433605e-16"
  1032. ]
  1033. },
  1034. "execution_count": 40,
  1035. "metadata": {},
  1036. "output_type": "execute_result"
  1037. }
  1038. ],
  1039. "source": [
  1040. "# 检查\n",
  1041. "norm(dot(A, X) - B)"
  1042. ]
  1043. },
  1044. {
  1045. "cell_type": "markdown",
  1046. "metadata": {},
  1047. "source": [
  1048. "### 6.2 特征值和特征向量"
  1049. ]
  1050. },
  1051. {
  1052. "cell_type": "markdown",
  1053. "metadata": {},
  1054. "source": [
  1055. "矩阵$A$的特征值问题:\n",
  1056. "\n",
  1057. "$\\displaystyle A v_n = \\lambda_n v_n$\n",
  1058. "\n",
  1059. "在这里$v_n$是第$n$个特征向量而$\\lambda_n$是第$n$个特征值。\n",
  1060. "\n",
  1061. "为了计算矩阵的特征值,用`eigvals`。而对于计算特征值和特征向量,用函数`eig`:"
  1062. ]
  1063. },
  1064. {
  1065. "cell_type": "code",
  1066. "execution_count": 5,
  1067. "metadata": {},
  1068. "outputs": [],
  1069. "source": [
  1070. "evals = eigvals(A)"
  1071. ]
  1072. },
  1073. {
  1074. "cell_type": "code",
  1075. "execution_count": 6,
  1076. "metadata": {},
  1077. "outputs": [
  1078. {
  1079. "data": {
  1080. "text/plain": [
  1081. "array([-0.46410162+0.j, 6.46410162+0.j])"
  1082. ]
  1083. },
  1084. "execution_count": 6,
  1085. "metadata": {},
  1086. "output_type": "execute_result"
  1087. }
  1088. ],
  1089. "source": [
  1090. "evals"
  1091. ]
  1092. },
  1093. {
  1094. "cell_type": "code",
  1095. "execution_count": 7,
  1096. "metadata": {},
  1097. "outputs": [],
  1098. "source": [
  1099. "evals, evecs = eig(A)"
  1100. ]
  1101. },
  1102. {
  1103. "cell_type": "code",
  1104. "execution_count": 8,
  1105. "metadata": {},
  1106. "outputs": [
  1107. {
  1108. "data": {
  1109. "text/plain": [
  1110. "array([-0.46410162+0.j, 6.46410162+0.j])"
  1111. ]
  1112. },
  1113. "execution_count": 8,
  1114. "metadata": {},
  1115. "output_type": "execute_result"
  1116. }
  1117. ],
  1118. "source": [
  1119. "evals"
  1120. ]
  1121. },
  1122. {
  1123. "cell_type": "code",
  1124. "execution_count": 9,
  1125. "metadata": {},
  1126. "outputs": [
  1127. {
  1128. "data": {
  1129. "text/plain": [
  1130. "array([[-0.80689822, -0.34372377],\n",
  1131. " [ 0.59069049, -0.9390708 ]])"
  1132. ]
  1133. },
  1134. "execution_count": 9,
  1135. "metadata": {},
  1136. "output_type": "execute_result"
  1137. }
  1138. ],
  1139. "source": [
  1140. "evecs"
  1141. ]
  1142. },
  1143. {
  1144. "cell_type": "markdown",
  1145. "metadata": {},
  1146. "source": [
  1147. "特征向量对应着第$n$个特征值(以`evals[n]`的形式存储)是`evecs`的第$n$列,例如`evecs[:,n]`。为了验证这个,我们一起尝试去用特征向量乘以矩阵A并与特征向量和特征值的乘积的对比:"
  1148. ]
  1149. },
  1150. {
  1151. "cell_type": "code",
  1152. "execution_count": 46,
  1153. "metadata": {},
  1154. "outputs": [
  1155. {
  1156. "data": {
  1157. "text/plain": [
  1158. "3.243515426387745e-16"
  1159. ]
  1160. },
  1161. "execution_count": 46,
  1162. "metadata": {},
  1163. "output_type": "execute_result"
  1164. }
  1165. ],
  1166. "source": [
  1167. "n = 1\n",
  1168. "\n",
  1169. "norm(dot(A, evecs[:,n]) - evals[n] * evecs[:,n])"
  1170. ]
  1171. },
  1172. {
  1173. "cell_type": "markdown",
  1174. "metadata": {},
  1175. "source": [
  1176. "也有一些更专业的特征求解器,例如用于Hermitian矩阵的`eigh`。 "
  1177. ]
  1178. },
  1179. {
  1180. "cell_type": "markdown",
  1181. "metadata": {},
  1182. "source": [
  1183. "### 6.3 矩阵操作"
  1184. ]
  1185. },
  1186. {
  1187. "cell_type": "code",
  1188. "execution_count": 10,
  1189. "metadata": {},
  1190. "outputs": [
  1191. {
  1192. "data": {
  1193. "text/plain": [
  1194. "array([[-1.66666667, 0.66666667],\n",
  1195. " [ 1.33333333, -0.33333333]])"
  1196. ]
  1197. },
  1198. "execution_count": 10,
  1199. "metadata": {},
  1200. "output_type": "execute_result"
  1201. }
  1202. ],
  1203. "source": [
  1204. "# 矩阵求逆\n",
  1205. "inv(A)"
  1206. ]
  1207. },
  1208. {
  1209. "cell_type": "code",
  1210. "execution_count": 11,
  1211. "metadata": {},
  1212. "outputs": [
  1213. {
  1214. "data": {
  1215. "text/plain": [
  1216. "-3.0"
  1217. ]
  1218. },
  1219. "execution_count": 11,
  1220. "metadata": {},
  1221. "output_type": "execute_result"
  1222. }
  1223. ],
  1224. "source": [
  1225. "# 行列式\n",
  1226. "det(A)"
  1227. ]
  1228. },
  1229. {
  1230. "cell_type": "code",
  1231. "execution_count": 49,
  1232. "metadata": {},
  1233. "outputs": [
  1234. {
  1235. "data": {
  1236. "text/plain": [
  1237. "(1.3060382297688262, 1.591998214728641)"
  1238. ]
  1239. },
  1240. "execution_count": 49,
  1241. "metadata": {},
  1242. "output_type": "execute_result"
  1243. }
  1244. ],
  1245. "source": [
  1246. "# 不同阶的范数\n",
  1247. "norm(A, ord=2), norm(A, ord=Inf)"
  1248. ]
  1249. },
  1250. {
  1251. "cell_type": "markdown",
  1252. "metadata": {},
  1253. "source": [
  1254. "### 6.4 稀疏矩阵"
  1255. ]
  1256. },
  1257. {
  1258. "cell_type": "markdown",
  1259. "metadata": {},
  1260. "source": [
  1261. "如果问题可以用矩阵形式描述,其中矩阵或向量大多包含0,那么稀疏矩阵在处理大型系统的数值模拟中通常是有用的。Scipy对稀疏矩阵有很好的支持,可以进行基本的线性代数运算(比如方程求解、特征值计算等)。\n",
  1262. "\n",
  1263. "有许多可能的策略去有效地存储稀疏矩阵。最常见的是所谓的坐标形式(COO)、列表的列表形式(LIL)和压缩稀疏列CSC(和行,CSR)。每种格式都有一些优点和缺点。大多数计算算法(方程求解、矩阵-矩阵乘法等)可以使用CSR或CSC格式有效地实现,但它们不那么直观,也不那么容易初始化。因此,稀疏矩阵通常最初以COO或LIL格式创建(在这种格式中,我们可以有效地向稀疏矩阵数据添加元素),然后在实际计算中使用之前转换为CSC或CSR。\n",
  1264. "\n",
  1265. "更多的关于稀疏格式的信息可以参考http://en.wikipedia.org/wiki/Sparse_matrix\n",
  1266. "\n",
  1267. "当我们创造一个稀疏矩阵时我们需要去选择他们应该以何种格式来存储。例如:"
  1268. ]
  1269. },
  1270. {
  1271. "cell_type": "code",
  1272. "execution_count": 50,
  1273. "metadata": {},
  1274. "outputs": [],
  1275. "source": [
  1276. "from scipy.sparse import *"
  1277. ]
  1278. },
  1279. {
  1280. "cell_type": "code",
  1281. "execution_count": 51,
  1282. "metadata": {},
  1283. "outputs": [
  1284. {
  1285. "data": {
  1286. "text/plain": [
  1287. "array([[1, 0, 0, 0],\n",
  1288. " [0, 3, 0, 0],\n",
  1289. " [0, 1, 1, 0],\n",
  1290. " [1, 0, 0, 1]])"
  1291. ]
  1292. },
  1293. "execution_count": 51,
  1294. "metadata": {},
  1295. "output_type": "execute_result"
  1296. }
  1297. ],
  1298. "source": [
  1299. "# 稠密矩阵\n",
  1300. "M = array([[1,0,0,0], [0,3,0,0], [0,1,1,0], [1,0,0,1]]); M"
  1301. ]
  1302. },
  1303. {
  1304. "cell_type": "code",
  1305. "execution_count": 52,
  1306. "metadata": {},
  1307. "outputs": [
  1308. {
  1309. "data": {
  1310. "text/plain": [
  1311. "<4x4 sparse matrix of type '<type 'numpy.int64'>'\n",
  1312. "\twith 6 stored elements in Compressed Sparse Row format>"
  1313. ]
  1314. },
  1315. "execution_count": 52,
  1316. "metadata": {},
  1317. "output_type": "execute_result"
  1318. }
  1319. ],
  1320. "source": [
  1321. "# 从稠密转向稀疏\n",
  1322. "A = csr_matrix(M); A"
  1323. ]
  1324. },
  1325. {
  1326. "cell_type": "code",
  1327. "execution_count": 53,
  1328. "metadata": {},
  1329. "outputs": [
  1330. {
  1331. "data": {
  1332. "text/plain": [
  1333. "matrix([[1, 0, 0, 0],\n",
  1334. " [0, 3, 0, 0],\n",
  1335. " [0, 1, 1, 0],\n",
  1336. " [1, 0, 0, 1]])"
  1337. ]
  1338. },
  1339. "execution_count": 53,
  1340. "metadata": {},
  1341. "output_type": "execute_result"
  1342. }
  1343. ],
  1344. "source": [
  1345. "# 从稀疏转向稠密\n",
  1346. "A.todense()"
  1347. ]
  1348. },
  1349. {
  1350. "cell_type": "markdown",
  1351. "metadata": {},
  1352. "source": [
  1353. "创建稀疏矩阵更有效的方法:创建一个空的矩阵并用矩阵索引填充(避免创建一个潜在的大型稠密矩阵)"
  1354. ]
  1355. },
  1356. {
  1357. "cell_type": "code",
  1358. "execution_count": 54,
  1359. "metadata": {},
  1360. "outputs": [
  1361. {
  1362. "data": {
  1363. "text/plain": [
  1364. "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
  1365. "\twith 6 stored elements in LInked List format>"
  1366. ]
  1367. },
  1368. "execution_count": 54,
  1369. "metadata": {},
  1370. "output_type": "execute_result"
  1371. }
  1372. ],
  1373. "source": [
  1374. "A = lil_matrix((4,4)) # 空的4×4稀疏矩阵\n",
  1375. "A[0,0] = 1\n",
  1376. "A[1,1] = 3\n",
  1377. "A[2,2] = A[2,1] = 1\n",
  1378. "A[3,3] = A[3,0] = 1\n",
  1379. "A"
  1380. ]
  1381. },
  1382. {
  1383. "cell_type": "code",
  1384. "execution_count": 55,
  1385. "metadata": {},
  1386. "outputs": [
  1387. {
  1388. "data": {
  1389. "text/plain": [
  1390. "matrix([[ 1., 0., 0., 0.],\n",
  1391. " [ 0., 3., 0., 0.],\n",
  1392. " [ 0., 1., 1., 0.],\n",
  1393. " [ 1., 0., 0., 1.]])"
  1394. ]
  1395. },
  1396. "execution_count": 55,
  1397. "metadata": {},
  1398. "output_type": "execute_result"
  1399. }
  1400. ],
  1401. "source": [
  1402. "A.todense()"
  1403. ]
  1404. },
  1405. {
  1406. "cell_type": "markdown",
  1407. "metadata": {},
  1408. "source": [
  1409. "在不同的稀疏矩阵格式中转换:"
  1410. ]
  1411. },
  1412. {
  1413. "cell_type": "code",
  1414. "execution_count": 56,
  1415. "metadata": {},
  1416. "outputs": [
  1417. {
  1418. "data": {
  1419. "text/plain": [
  1420. "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
  1421. "\twith 6 stored elements in LInked List format>"
  1422. ]
  1423. },
  1424. "execution_count": 56,
  1425. "metadata": {},
  1426. "output_type": "execute_result"
  1427. }
  1428. ],
  1429. "source": [
  1430. "A"
  1431. ]
  1432. },
  1433. {
  1434. "cell_type": "code",
  1435. "execution_count": 57,
  1436. "metadata": {},
  1437. "outputs": [
  1438. {
  1439. "data": {
  1440. "text/plain": [
  1441. "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
  1442. "\twith 6 stored elements in Compressed Sparse Row format>"
  1443. ]
  1444. },
  1445. "execution_count": 57,
  1446. "metadata": {},
  1447. "output_type": "execute_result"
  1448. }
  1449. ],
  1450. "source": [
  1451. "A = csr_matrix(A); A"
  1452. ]
  1453. },
  1454. {
  1455. "cell_type": "code",
  1456. "execution_count": 58,
  1457. "metadata": {},
  1458. "outputs": [
  1459. {
  1460. "data": {
  1461. "text/plain": [
  1462. "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
  1463. "\twith 6 stored elements in Compressed Sparse Column format>"
  1464. ]
  1465. },
  1466. "execution_count": 58,
  1467. "metadata": {},
  1468. "output_type": "execute_result"
  1469. }
  1470. ],
  1471. "source": [
  1472. "A = csc_matrix(A); A"
  1473. ]
  1474. },
  1475. {
  1476. "cell_type": "markdown",
  1477. "metadata": {},
  1478. "source": [
  1479. "我们可以像计算稠密矩阵那样计算稀疏矩阵:"
  1480. ]
  1481. },
  1482. {
  1483. "cell_type": "code",
  1484. "execution_count": 59,
  1485. "metadata": {},
  1486. "outputs": [
  1487. {
  1488. "data": {
  1489. "text/plain": [
  1490. "matrix([[ 1., 0., 0., 0.],\n",
  1491. " [ 0., 3., 0., 0.],\n",
  1492. " [ 0., 1., 1., 0.],\n",
  1493. " [ 1., 0., 0., 1.]])"
  1494. ]
  1495. },
  1496. "execution_count": 59,
  1497. "metadata": {},
  1498. "output_type": "execute_result"
  1499. }
  1500. ],
  1501. "source": [
  1502. "A.todense()"
  1503. ]
  1504. },
  1505. {
  1506. "cell_type": "code",
  1507. "execution_count": 60,
  1508. "metadata": {},
  1509. "outputs": [
  1510. {
  1511. "data": {
  1512. "text/plain": [
  1513. "matrix([[ 1., 0., 0., 0.],\n",
  1514. " [ 0., 9., 0., 0.],\n",
  1515. " [ 0., 4., 1., 0.],\n",
  1516. " [ 2., 0., 0., 1.]])"
  1517. ]
  1518. },
  1519. "execution_count": 60,
  1520. "metadata": {},
  1521. "output_type": "execute_result"
  1522. }
  1523. ],
  1524. "source": [
  1525. "(A * A).todense()"
  1526. ]
  1527. },
  1528. {
  1529. "cell_type": "code",
  1530. "execution_count": 61,
  1531. "metadata": {},
  1532. "outputs": [
  1533. {
  1534. "data": {
  1535. "text/plain": [
  1536. "matrix([[ 1., 0., 0., 0.],\n",
  1537. " [ 0., 3., 0., 0.],\n",
  1538. " [ 0., 1., 1., 0.],\n",
  1539. " [ 1., 0., 0., 1.]])"
  1540. ]
  1541. },
  1542. "execution_count": 61,
  1543. "metadata": {},
  1544. "output_type": "execute_result"
  1545. }
  1546. ],
  1547. "source": [
  1548. "A.todense()"
  1549. ]
  1550. },
  1551. {
  1552. "cell_type": "code",
  1553. "execution_count": 62,
  1554. "metadata": {},
  1555. "outputs": [
  1556. {
  1557. "data": {
  1558. "text/plain": [
  1559. "matrix([[ 1., 0., 0., 0.],\n",
  1560. " [ 0., 9., 0., 0.],\n",
  1561. " [ 0., 4., 1., 0.],\n",
  1562. " [ 2., 0., 0., 1.]])"
  1563. ]
  1564. },
  1565. "execution_count": 62,
  1566. "metadata": {},
  1567. "output_type": "execute_result"
  1568. }
  1569. ],
  1570. "source": [
  1571. "A.dot(A).todense()"
  1572. ]
  1573. },
  1574. {
  1575. "cell_type": "code",
  1576. "execution_count": 63,
  1577. "metadata": {},
  1578. "outputs": [
  1579. {
  1580. "data": {
  1581. "text/plain": [
  1582. "array([[1],\n",
  1583. " [2],\n",
  1584. " [3],\n",
  1585. " [4]])"
  1586. ]
  1587. },
  1588. "execution_count": 63,
  1589. "metadata": {},
  1590. "output_type": "execute_result"
  1591. }
  1592. ],
  1593. "source": [
  1594. "v = array([1,2,3,4])[:,newaxis]; v"
  1595. ]
  1596. },
  1597. {
  1598. "cell_type": "code",
  1599. "execution_count": 64,
  1600. "metadata": {},
  1601. "outputs": [
  1602. {
  1603. "data": {
  1604. "text/plain": [
  1605. "array([[ 1.],\n",
  1606. " [ 6.],\n",
  1607. " [ 5.],\n",
  1608. " [ 5.]])"
  1609. ]
  1610. },
  1611. "execution_count": 64,
  1612. "metadata": {},
  1613. "output_type": "execute_result"
  1614. }
  1615. ],
  1616. "source": [
  1617. "# 稀疏矩阵-稠密向量乘法\n",
  1618. "A * v"
  1619. ]
  1620. },
  1621. {
  1622. "cell_type": "code",
  1623. "execution_count": 65,
  1624. "metadata": {},
  1625. "outputs": [
  1626. {
  1627. "data": {
  1628. "text/plain": [
  1629. "matrix([[ 1.],\n",
  1630. " [ 6.],\n",
  1631. " [ 5.],\n",
  1632. " [ 5.]])"
  1633. ]
  1634. },
  1635. "execution_count": 65,
  1636. "metadata": {},
  1637. "output_type": "execute_result"
  1638. }
  1639. ],
  1640. "source": [
  1641. "# 和稠密矩阵一样的结果-稠密向量乘法\n",
  1642. "A.todense() * v"
  1643. ]
  1644. },
  1645. {
  1646. "cell_type": "markdown",
  1647. "metadata": {},
  1648. "source": [
  1649. "## 7. 优化"
  1650. ]
  1651. },
  1652. {
  1653. "cell_type": "markdown",
  1654. "metadata": {},
  1655. "source": [
  1656. "优化(找出方程的最大值或最小值)是数学中的一块大的领域,而复杂函数或多变量函数的最优化是相当复杂的。在这里我们将会看一些非常简单的例子。对于有关利用SciPy实现最优化的更详细的内容参考:http://scipy-lectures.github.com/advanced/mathematical_optimization/index.html\n",
  1657. "\n",
  1658. "为了在SciPy中是有最优化模块我们首先需要包含`optimize`模块:"
  1659. ]
  1660. },
  1661. {
  1662. "cell_type": "code",
  1663. "execution_count": 12,
  1664. "metadata": {},
  1665. "outputs": [],
  1666. "source": [
  1667. "from scipy import optimize"
  1668. ]
  1669. },
  1670. {
  1671. "cell_type": "markdown",
  1672. "metadata": {},
  1673. "source": [
  1674. "### 7.1 找到最小值"
  1675. ]
  1676. },
  1677. {
  1678. "cell_type": "markdown",
  1679. "metadata": {},
  1680. "source": [
  1681. "我们先看如何找到简单的单变量方程的最小值。"
  1682. ]
  1683. },
  1684. {
  1685. "cell_type": "code",
  1686. "execution_count": 16,
  1687. "metadata": {},
  1688. "outputs": [],
  1689. "source": [
  1690. "def f(x):\n",
  1691. " return 4*x**3 + (x-2)**2 + x**4"
  1692. ]
  1693. },
  1694. {
  1695. "cell_type": "code",
  1696. "execution_count": 19,
  1697. "metadata": {},
  1698. "outputs": [
  1699. {
  1700. "data": {
  1701. "image/png": "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\n",
  1702. "text/plain": [
  1703. "<Figure size 432x288 with 1 Axes>"
  1704. ]
  1705. },
  1706. "metadata": {
  1707. "needs_background": "light"
  1708. },
  1709. "output_type": "display_data"
  1710. }
  1711. ],
  1712. "source": [
  1713. "%matplotlib inline\n",
  1714. "import numpy as np\n",
  1715. "import matplotlib.pyplot as plt\n",
  1716. "\n",
  1717. "fig, ax = plt.subplots()\n",
  1718. "x = np.linspace(-5, 3, 100)\n",
  1719. "ax.plot(x, f(x));"
  1720. ]
  1721. },
  1722. {
  1723. "cell_type": "markdown",
  1724. "metadata": {},
  1725. "source": [
  1726. "我们可以用`fmin_bfgs`函数找到方程的最小值:"
  1727. ]
  1728. },
  1729. {
  1730. "cell_type": "code",
  1731. "execution_count": 20,
  1732. "metadata": {},
  1733. "outputs": [
  1734. {
  1735. "name": "stdout",
  1736. "output_type": "stream",
  1737. "text": [
  1738. "Optimization terminated successfully.\n",
  1739. " Current function value: -3.506641\n",
  1740. " Iterations: 5\n",
  1741. " Function evaluations: 24\n",
  1742. " Gradient evaluations: 8\n"
  1743. ]
  1744. },
  1745. {
  1746. "data": {
  1747. "text/plain": [
  1748. "array([-2.67298151])"
  1749. ]
  1750. },
  1751. "execution_count": 20,
  1752. "metadata": {},
  1753. "output_type": "execute_result"
  1754. }
  1755. ],
  1756. "source": [
  1757. "x_min = optimize.fmin_bfgs(f, -2)\n",
  1758. "x_min "
  1759. ]
  1760. },
  1761. {
  1762. "cell_type": "code",
  1763. "execution_count": 21,
  1764. "metadata": {},
  1765. "outputs": [
  1766. {
  1767. "name": "stdout",
  1768. "output_type": "stream",
  1769. "text": [
  1770. "Optimization terminated successfully.\n",
  1771. " Current function value: 2.804988\n",
  1772. " Iterations: 3\n",
  1773. " Function evaluations: 15\n",
  1774. " Gradient evaluations: 5\n"
  1775. ]
  1776. },
  1777. {
  1778. "data": {
  1779. "text/plain": [
  1780. "array([0.46961745])"
  1781. ]
  1782. },
  1783. "execution_count": 21,
  1784. "metadata": {},
  1785. "output_type": "execute_result"
  1786. }
  1787. ],
  1788. "source": [
  1789. "optimize.fmin_bfgs(f, 0.5) "
  1790. ]
  1791. },
  1792. {
  1793. "cell_type": "markdown",
  1794. "metadata": {},
  1795. "source": [
  1796. "我们也可以用`brent`或`fminbound`函数。他们有一点句法上的不同而且用了不同的算法。"
  1797. ]
  1798. },
  1799. {
  1800. "cell_type": "code",
  1801. "execution_count": 71,
  1802. "metadata": {},
  1803. "outputs": [
  1804. {
  1805. "data": {
  1806. "text/plain": [
  1807. "0.46961743402759754"
  1808. ]
  1809. },
  1810. "execution_count": 71,
  1811. "metadata": {},
  1812. "output_type": "execute_result"
  1813. }
  1814. ],
  1815. "source": [
  1816. "optimize.brent(f)"
  1817. ]
  1818. },
  1819. {
  1820. "cell_type": "code",
  1821. "execution_count": 72,
  1822. "metadata": {},
  1823. "outputs": [
  1824. {
  1825. "data": {
  1826. "text/plain": [
  1827. "-2.6729822917513886"
  1828. ]
  1829. },
  1830. "execution_count": 72,
  1831. "metadata": {},
  1832. "output_type": "execute_result"
  1833. }
  1834. ],
  1835. "source": [
  1836. "optimize.fminbound(f, -4, 2)"
  1837. ]
  1838. },
  1839. {
  1840. "cell_type": "markdown",
  1841. "metadata": {},
  1842. "source": [
  1843. "### 7.2 找到一个方程的解"
  1844. ]
  1845. },
  1846. {
  1847. "cell_type": "markdown",
  1848. "metadata": {},
  1849. "source": [
  1850. "为了找到一个$f(x) = 0$形式的方程的跟,我们可以用`fsolve`方程。它需要一个初始假设:"
  1851. ]
  1852. },
  1853. {
  1854. "cell_type": "code",
  1855. "execution_count": 30,
  1856. "metadata": {},
  1857. "outputs": [],
  1858. "source": [
  1859. "omega_c = 3.0\n",
  1860. "def f(omega):\n",
  1861. " # 一个先验证方程:一个low-Q SQUID的终止微波共振器的共振频率\n",
  1862. " return np.tan(2*np.pi*omega) - omega_c/omega"
  1863. ]
  1864. },
  1865. {
  1866. "cell_type": "code",
  1867. "execution_count": 32,
  1868. "metadata": {},
  1869. "outputs": [
  1870. {
  1871. "name": "stderr",
  1872. "output_type": "stream",
  1873. "text": [
  1874. "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:4: RuntimeWarning: divide by zero encountered in true_divide\n",
  1875. " after removing the cwd from sys.path.\n"
  1876. ]
  1877. },
  1878. {
  1879. "data": {
  1880. "image/png": "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\n",
  1881. "text/plain": [
  1882. "<Figure size 720x288 with 1 Axes>"
  1883. ]
  1884. },
  1885. "metadata": {
  1886. "needs_background": "light"
  1887. },
  1888. "output_type": "display_data"
  1889. }
  1890. ],
  1891. "source": [
  1892. "fig, ax = plt.subplots(figsize=(10,4))\n",
  1893. "x = np.linspace(0, 3, 1000)\n",
  1894. "y = f(x)\n",
  1895. "mask = np.where(abs(y) > 50)\n",
  1896. "x[mask] = y[mask] = np.NaN # 当函数翻转符号时去掉竖线\n",
  1897. "ax.plot(x, y)\n",
  1898. "ax.plot([0, 3], [0, 0], 'k')\n",
  1899. "ax.set_ylim(-5,5);"
  1900. ]
  1901. },
  1902. {
  1903. "cell_type": "code",
  1904. "execution_count": 33,
  1905. "metadata": {},
  1906. "outputs": [
  1907. {
  1908. "data": {
  1909. "text/plain": [
  1910. "array([0.23743014])"
  1911. ]
  1912. },
  1913. "execution_count": 33,
  1914. "metadata": {},
  1915. "output_type": "execute_result"
  1916. }
  1917. ],
  1918. "source": [
  1919. "optimize.fsolve(f, 0.1)"
  1920. ]
  1921. },
  1922. {
  1923. "cell_type": "code",
  1924. "execution_count": 34,
  1925. "metadata": {},
  1926. "outputs": [
  1927. {
  1928. "data": {
  1929. "text/plain": [
  1930. "array([0.71286972])"
  1931. ]
  1932. },
  1933. "execution_count": 34,
  1934. "metadata": {},
  1935. "output_type": "execute_result"
  1936. }
  1937. ],
  1938. "source": [
  1939. "optimize.fsolve(f, 0.6)"
  1940. ]
  1941. },
  1942. {
  1943. "cell_type": "code",
  1944. "execution_count": 77,
  1945. "metadata": {},
  1946. "outputs": [
  1947. {
  1948. "data": {
  1949. "text/plain": [
  1950. "array([ 1.18990285])"
  1951. ]
  1952. },
  1953. "execution_count": 77,
  1954. "metadata": {},
  1955. "output_type": "execute_result"
  1956. }
  1957. ],
  1958. "source": [
  1959. "optimize.fsolve(f, 1.1)"
  1960. ]
  1961. },
  1962. {
  1963. "cell_type": "markdown",
  1964. "metadata": {},
  1965. "source": [
  1966. "## 8. 插值"
  1967. ]
  1968. },
  1969. {
  1970. "cell_type": "markdown",
  1971. "metadata": {},
  1972. "source": [
  1973. "插值在scipy中是简单而方便的:当给定描述X和Y数据的数组时,`interp1d`函数返回的对象就像函数一样,可以调用任意的X值(在X覆盖的区域内),而且他返回的相应的经过插值得到的y。"
  1974. ]
  1975. },
  1976. {
  1977. "cell_type": "code",
  1978. "execution_count": 35,
  1979. "metadata": {},
  1980. "outputs": [],
  1981. "source": [
  1982. "#FIXME: use as\n",
  1983. "from scipy.interpolate import *"
  1984. ]
  1985. },
  1986. {
  1987. "cell_type": "code",
  1988. "execution_count": 79,
  1989. "metadata": {},
  1990. "outputs": [],
  1991. "source": [
  1992. "def f(x):\n",
  1993. " return sin(x)"
  1994. ]
  1995. },
  1996. {
  1997. "cell_type": "code",
  1998. "execution_count": 80,
  1999. "metadata": {},
  2000. "outputs": [],
  2001. "source": [
  2002. "n = arange(0, 10) \n",
  2003. "x = linspace(0, 9, 100)\n",
  2004. "\n",
  2005. "y_meas = f(n) + 0.1 * randn(len(n)) # 带噪声模拟测量\n",
  2006. "y_real = f(x)\n",
  2007. "\n",
  2008. "linear_interpolation = interp1d(n, y_meas)\n",
  2009. "y_interp1 = linear_interpolation(x)\n",
  2010. "\n",
  2011. "cubic_interpolation = interp1d(n, y_meas, kind='cubic')\n",
  2012. "y_interp2 = cubic_interpolation(x)"
  2013. ]
  2014. },
  2015. {
  2016. "cell_type": "code",
  2017. "execution_count": 81,
  2018. "metadata": {},
  2019. "outputs": [
  2020. {
  2021. "data": {
  2022. "image/png": "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\n",
  2023. "text/plain": [
  2024. "<matplotlib.figure.Figure at 0x10a5c8cd0>"
  2025. ]
  2026. },
  2027. "metadata": {},
  2028. "output_type": "display_data"
  2029. }
  2030. ],
  2031. "source": [
  2032. "fig, ax = plt.subplots(figsize=(10,4))\n",
  2033. "ax.plot(n, y_meas, 'bs', label='noisy data')\n",
  2034. "ax.plot(x, y_real, 'k', lw=2, label='true function')\n",
  2035. "ax.plot(x, y_interp1, 'r', label='linear interp')\n",
  2036. "ax.plot(x, y_interp2, 'g', label='cubic interp')\n",
  2037. "ax.legend(loc=3);"
  2038. ]
  2039. },
  2040. {
  2041. "cell_type": "markdown",
  2042. "metadata": {},
  2043. "source": [
  2044. "## 9. 统计"
  2045. ]
  2046. },
  2047. {
  2048. "cell_type": "markdown",
  2049. "metadata": {},
  2050. "source": [
  2051. "`scipy.stats`模块包含了许多统计分布,统计函数和测试。对于它完整特征的文档描述可以参考:http://docs.scipy.org/doc/scipy/reference/stats.html.\n",
  2052. "\n",
  2053. "也有一个对于统计建模同样非常有用的python包叫做statsmodels。参考http://statsmodels.sourceforge.net"
  2054. ]
  2055. },
  2056. {
  2057. "cell_type": "code",
  2058. "execution_count": 82,
  2059. "metadata": {},
  2060. "outputs": [],
  2061. "source": [
  2062. "from scipy import stats"
  2063. ]
  2064. },
  2065. {
  2066. "cell_type": "code",
  2067. "execution_count": 83,
  2068. "metadata": {},
  2069. "outputs": [],
  2070. "source": [
  2071. "# 创建一个(离散的)具有泊松分布的随机变量\n",
  2072. "\n",
  2073. "X = stats.poisson(3.5) # n=3.5光子时相干态的光子分布"
  2074. ]
  2075. },
  2076. {
  2077. "cell_type": "code",
  2078. "execution_count": 84,
  2079. "metadata": {},
  2080. "outputs": [
  2081. {
  2082. "data": {
  2083. "image/png": "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\n",
  2084. "text/plain": [
  2085. "<matplotlib.figure.Figure at 0x10aa71fd0>"
  2086. ]
  2087. },
  2088. "metadata": {},
  2089. "output_type": "display_data"
  2090. }
  2091. ],
  2092. "source": [
  2093. "n = arange(0,15)\n",
  2094. "\n",
  2095. "fig, axes = plt.subplots(3,1, sharex=True)\n",
  2096. "\n",
  2097. "# 画出概率密度函数(PMF)\n",
  2098. "axes[0].step(n, X.pmf(n))\n",
  2099. "\n",
  2100. "# 画出累积分布函数(CDF)\n",
  2101. "axes[1].step(n, X.cdf(n))\n",
  2102. "\n",
  2103. "# 绘制1000个随机变量X的随机实现的直方图\n",
  2104. "axes[2].hist(X.rvs(size=1000));"
  2105. ]
  2106. },
  2107. {
  2108. "cell_type": "code",
  2109. "execution_count": 85,
  2110. "metadata": {},
  2111. "outputs": [],
  2112. "source": [
  2113. "# 创建一个(连续的)正态分布的随机变量\n",
  2114. "Y = stats.norm()"
  2115. ]
  2116. },
  2117. {
  2118. "cell_type": "code",
  2119. "execution_count": 86,
  2120. "metadata": {},
  2121. "outputs": [
  2122. {
  2123. "data": {
  2124. "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEACAYAAAC57G0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYFNW5x/HvK7ghCCheMaJCBNe4oSAJJowKiibBLTdK\n3LcY4hZj4porY+41xi0YJVHjFndUQIPGDcWJy6OAiqAi7iugsomAosC8949TI80wM93TU9XVXfP7\nPE899lLVdcqh3zlz6j3vMXdHRESyZ420GyAiIslQgBcRySgFeBGRjFKAFxHJKAV4EZGMUoAXEcmo\nvAHezAab2Qwze8vMzm5ivz5mttzMDmnusSIiEr8mA7yZtQFGAoOB7YChZrZtI/tdAjzS3GNFRCQZ\n+XrwfYG33f19d18GjAIOaGC/U4HRwJwijhURkQTkC/CbAh/lPP84eu1bZrYpIXBfE71UNzU277Ei\nIpKcfAG+kDoGVwLneKh5YNFW6LEiIpKQtnnenwlslvN8M0JPPNeuwCgzA+gC7Gdmywo8FjPTLwIR\nkSK4u+XbodGN8AvgHaA7sBbwMrBtE/vfDBzcnGNDE7Jr+PDhaTchUZV8fe+/7z5kiPvGG7tfdJH7\n/Pmr75N7fUuXut94o/vWW7v36eP+/POla2sSKvlnV4isX18UO5uM4U0O0bj7cuAU4FFgOnC3u79u\nZieZ2UnFHNvkbxuREnCHm26C3XaDfv3gvffgvPOgc+emj1t7bTjuOJg+HX7zGxgyBM4/H77+ujTt\nFmmuQiY6ec5WC+Du17n7dQBmdoCZTTWzKcCOwOc5x14DfA0sAg6Ks+EixVi8GA46CEaOhAkT4Nxz\nYd11m/cZa6wBv/gFTJ0Kr74Ku+8OH3yQTHtFWiKOPPjH3X0nd98FOAb4R857DlS5+y7u3je+ZleO\nqqqqtJuQqEq6vtmzYcAA6NIFnn8edtgh/zFNXV/XrnD//XD00dC/P7z0UnxtLYVK+tkVI+vXVwjz\nJhb8MLPvA8PdfXD0/BwAd/9zE/uPcPd+0fP3gN3cfV4T5/Cm2iASh+nTYf/94cQTw3CMNX1rqtnG\njoWTToJbbgnnEUmameW9ydriPPjoRAea2evAw8BpOW858LiZvWBmJxbWbJF4zZgBAwfCH/8Yxszj\nDu4ABx8M48bBscfCQw/F//kixYgjDx53v9/dtwV+CtyW81b/aOhmP+BkM/thcc0UKc4778CgQXDx\nxXDUUcme6/vfh3/9KwzZPPFEsucSKUQcefDfcvenzaytmW3o7vPcfXb0+hwzu49QvuDp+sdVV1d/\n+7iqqkpjZxKLjz4KPffzzw9BtxT69YPRo+FnPwvj8/37l+a8kn01NTXU1NQ065h8Y/BtgTeAvYFZ\nwCRgaG66o5ltCbzr7m5mvYF73X1LM2sHtHH3RWa2HvAYcKG7P1bvHBqDl9gtWhSC6xFHwFlnlf78\njzwCxxwDzzwDPXuW/vySfYWMwTfZg3f35WZWl8veBrixLg8+ev864BDgqGj26mLgsOjwrsDYaIZr\nW+CO+sFdJAkrVsDQoaE3/fvfp9OGwYOhuhp+8hN47rn8OfYiSWiyB1+SBqgHLzE74wyYNi30otdc\nU22RbIojiybvoh25E53M7EUz26vQY0XidvPNIYtl9OjyCKiXXx4mUp1xRtotkdYo3xh8G8IY/EDC\nDdfJrD4Gv567L4ke7wDc5+49Czk2OkY9eInFlCmwzz7wn//Adtul3ZqVFi4MZRGqq+Hww9NujWRF\nHD34vIt21AX3SHtgbqHHisRlwYKQuTJyZHkFd4COHWHMmFC/5tVX026NtCZJTnTSgh9SErW1Icf9\npz+FQw9NuzUN23FHuOIKOOQQ+OKLtFsjrUW+PPiCJzoB90cTmW4zs22a0wjlwUtLjBgBc+eGXnI5\nO+qokDY5bBjcfnsyM2olu5LIg+8HVOfUojkXqHX3S5o45h3C8EyvQo7VGLy0xOTJ8OMfw6RJ0L17\n2q3J78svoW9f+N3vQp68SLHiGIN/AehlZt3NbC3gUGBcvZNsaVGyezTRiai4WN5jRVriiy9Cvvvf\n/lYZwR2gXTsYNSoE+Bkz0m6NZF1iE50aOza5S5HWZtgw2Htv+O//TrslzfO978FFF8Fhh4Wyxeus\nk3aLJKtavOAHIQVyBSGIr0FY4KOOFvyQRNxxR0iLHDEi7ZYU55e/hC23DHVyRJISRx7894Hp7r7Q\nzAYTxt1z68Hv6u7zmziHxuClWd5/H/r0gfHjYeed025N8ebNg512CpOzBg1KuzVSaUqVB/+cuy+M\nnk4EutVvRzPaLNKk5ctDAbGzz67s4A6w4Ybwz3+GGvLzGl0SR6R4seTB5zgeyF3uQAt+SKwuuSQs\nfv3b36bdkngMHBjG4k88MSwGLhKnWPLgAcxsT+A4ILcCdn93n21mGwHjzWyGu6sevBRl8mS46ip4\n8cWw8HVWXHRRWLi7rjcv0pDU8uDNbEdgLDDY3d9u5LOGA4vd/Yp6r2sMXvJasgR694b/+7/Ky5op\nxKuvwp57hqyaLbdMuzVSCUqVB785IbgfkRvczaydmXWIHq8H7AO80vzLEAl54/36ZTO4Q0id/MMf\n4Mgjw30GkTg0GeDdfTlQl8s+Hbi7Lg++LhceuADoDFwTlQyeFL3eFXjazF4m3Hx9UAt+SDEefDDU\nU7/66rRbkqxTT4X27eFPf0q7JZIVceTBP0m4+doG+BI4IdrnXeAcYB1g7bpjRZrjk0/CDchbb4X1\n10+7NclaY40wDv/3v4ehGpGWSiwPXvXgpaVqa0Odmd12g//937RbUzr33ReGpKZMyf4vNSle2nnw\nqgcvLTJyZKjzfsEFabektA46KJRgOO20/PuKNCXJPHjVg5eivfJK6LXfcUd5LL1XaiNGhMW6R41K\nuyVSyZLMgy/4WOXBS64lS8LCHZdf3npTBtdbD+66CwYPDjnyPXqk3SJJW1nlwTfjWI3ByypOPBGW\nLg03Vlv7ohhXXhkC/TPPtM6/ZKRxqebBF3KsSH2jRoVFs//+dwV3gNNPh402CjnyIs0VRz343Dx4\ngGXu3lf14KW53nkn5II/8gh06JB2a8qDWag2ucsuYabr4MFpt0gqSRx58JcDbwLbAre7e9+cY1UP\nXgry1VdhQerhw2HXXdNuTXnZaCO4886wxN+HH6bdGqkkceTBbwRsARwILMitNaN68FKo448P65Xe\neaeGZhpz2WUwejQ89VSoqCmtW6ny4Oe4+wvAssbaUWiDpXW66aaQEnj99QruTfnd7+A73wn/FSlE\n3Hnw9akevDRp8uSweMeYMaEOizTOLJQyeOSRkGEkkk9sefCNKKgevLROs2fDwQeHnvu226bdmsrQ\nsSPcf3+44brVVqHCpkhj8gX4mcBmOc83I/TiC+Lus6P/zjGz+whDPlrwQ1i6NEzJP+kkOPDAtFtT\nWbbfHm68MdyUnjQJNtX88FYhiYlObQk3WfcGZgGTaKBgWLRvNbCo7iarmbUD2rj7oqge/GPAhfVL\nBusma+vjDkcfHYL83Xdr3L1YF18MY8dCTU2Y+SqtSyE3WZsM8NGH7Adcycpc9otz8+DNrCshu2Z9\nQhrlImA74L8IE6Ag/KVwh7tf3MDnK8C3Mn/4A4wfDxMmKDC1hHtInZw/P1SgbJvv73HJlDiyaCB/\nHnwnwrDN2sD/ufvm7r5Y9eClIdddF3rtDzyg4N5SZuH+xddfw8kna9FuWV1iefCqBy/1jRsXxtyf\nfhp69ky7NdmxaBH86EfhhvX//E/arZFSSTsPXvXg5VuPPgonnBCCvIJ7vDp0gIceCqmTI0ak3Rop\nJ/lG7RrKg9+9wM9uybGSIRMmwBFHhPS+Pn3Sbk02bbIJPPEEDBgAa60VhmxEksyD17iL8J//hNru\n994L/fvn31+Kt/nm4ZfpgAHQpg386ldpt0jSlmQefMHHKg8+m8aNCzVm7r4b9CMtjR49QpAfNAg+\n/zzMElYaajaUWx58QcfqJms23XornHVWyJbRsEzpzZwJ++4L++0Hl16qIJ9FqebBu/viho5t4PMV\n4DOkthYuughuuCHcWN1mm7Rb1HrNnw8//nHo1d9wA7Rrl3aLJE6xBPikKcBnx5IlYYbqzJlhhuUm\nm6TdIvnqq5C99MYb4SZ3t25pt0jiEstEJzMbbGYzzOwtMzu7kX2uit6fama75Lz+vplNM7MpZjap\n+ZcgleKNN8JN1A4dwtR5BffysO66cPvt8POfQ9++8OSTabdISqnJAB9NVhoJDCaUHxhqZtvW22d/\noKe79wJ+SVjFqY4DVe6+S72VniQj3MOf/3vsESYx3XSTFqMoN2bhfsg//xnSVc85B775Ju1WSSm0\neKITMAS4BcDdJwKdzGzjnPd1eyejZs4MsydHjgzpkMOG6WZeOdtnH3j5ZXjtNfjBD2Dq1LRbJEmL\nY8GPpvbRgh8ZtHw5XHUV7LwzfO97MHEibLdd2q2SQmy0UUhfHTYsBPwzzwylDiSb4pro1Fi/bQ93\nn5VvwQ/lwVcGd/j3v+H882HDDUNNGWXJVB6zMD9hyJAwdLPttqGGzXHHwZprpt06aUwSefD9gGp3\nHxw9PxeodfdLcva5Fqhx91HR8xnAAHf/tN5nDQcW5y7KHb2uLJoy5x7K+154ISxcGNIghwzRcExW\nTJ4M550H770HF1wAhx0Wyh1IeYsji+YFoJeZdTeztYBDgXH19hkHHBWdsB/wubt/ambtzKxD9Pp6\nwD7AK0Vch6Tkyy/DykE77BD+lB82LIzbHnCAgnuW9OkTfoH/4x9wyy0hb/5Pf4K5c9NumbRUk0M0\n7r7czE4BHmXlZKXXcyc6uftDZra/mb0NLAGOjQ7vCoy1EAnqFvx4bPWzSDlZsSIMvdx2W8hl798f\nrrwS9t5bQT3r9torbFOnhp95z56hxMRRR8H++8M666TdQmmuOBb8IHrdc/ZHC34EzR0zS8PcuTB6\ndFgdqGtX+M1vwk3T6dPhwQdh4MDGg3slXF9LZPn6Gru2nXaCm2+GDz8Mf61dfTVsvHFYO/fGG+H9\n90vazKJl+WdXqMTy4As5tjUot39kS5fCiy+GlYB+9auwgPOWW4b89d12gxdeCKl0Z55Z2GSlcru+\nuGX5+vJd2/rrw7HHhslR774LP/tZGMrZfXfYYgs48kj461/DX3xffFGaNjdHln92hcqXRfNtHjyA\nmdXlwecWDFslD97MOkX1aXoUcKzE7Kuv4JNPwjZrFnzwQehxvfsuzJgBH38MvXrBrrtC795hGvvO\nO2s9T2nahhuGSVJHHBFuur/5ZgjsL70Ed90Fr7wCnTuHrKqePcMvgC22CKURunYNnYX27TXMV2px\nLPjRWB78dwo4tqRmzQpT6ovRUKJP7mt1j91XbgBvvw0PP7zyvdralVvd8xUrQm75ihUrHy9bFrZv\nvgnb0qVh++qrUPNlyRJYvDj0nBYuhAULYN68cHzXriu/VN27h5tme+8d0uF69FAqnLSMGWy9ddjq\n1NbCRx+F79dbb4WOxZQp4TtX1+FYtgw22CBsHTuGvxA6dAhr8663XiiGts46YSb02muHTJ411wxb\n27Zha9Nm5bbGGqtuZqtub78dCt7VPa9re+4vmcZ+4RTzi2iTTcowbdjdG92AQ4Drc54fAVxdb58H\ngP45zx8Hdi3k2Oh116ZNmzZtzd+ait/uHsuCH/X36Rbts2YBx+bN4xQRkeIklgdf4LEiIpKQxPLg\nGzs2yYsREZGVUl/wQ0REklHIRCcREalACvAiIhmlAC8iklEK8CIiGVV0gDezm8zsUzNrtARwY4tx\ni4hI8lrSg7+ZUEisQXkW4xYRkYQVHeCjpfcWNLFLvsW4RUQkQUmOwTdUhKxbgucTEZEcSReJrV9n\nZrVZVWammVYiIkXIV8sryQDfUBGymQ3tmOXZtNXV1VRXV6fdjMTo+irHggVhTYA33wwlfceNq2b9\n9av56KNQzrd9+7By00YbQZcuoaxv587QqdPK0r7t24etXTtYd91Vy/vWlfht23Zlid82bdKrAZ+l\nn11DrID/sUkG+HHAKcCoekXIRCRhn30GEyeGbcoUmDYtrBuwzTaw1VZh0ZcttwzLM26+eahlrjVX\ns6foAG9mdwEDgC5m9hEwnFAiON9i3CISs3nzwnJ6Tz4ZtjlzoG/fsLzeiSeGdVa32CIsjFGnuhoG\nDEityVICRQd4dx9awD6nFPv5WVFVVZV2ExKl60vPu+/CvfeGhdGnToWqKthrL/j1r2GHHVYN5g0p\n52uLQ9avrxCpV5M0M0+7DSKVYt48uP12uPNOeO89OOQQOOCAENw1xNK6mFnem6wK8CJlzh2eeQau\nvRb+/W/4yU/gyCPDOrtaLL31UoAXqWDLl8OYMXDFFfD553DyySGwb7BB2i2TclBIgNfvf5Eys3x5\nGIL54x9Ddssf/hB67fnG1EXqa9E/GTMbbGYzooJiZzfwfhcze8TMXjazV83smJacTyTL3GH0aNh+\ne7jhhrA9/TQMGaLgLsUpeojGzNoAbwADCROYJgNDc9ddNbNqYG13P9fMukT7b+zuy3P20RCNtHqT\nJsFvfwuLF8Nll8HAgelNEJLKUMgQTUv6BX2Bt939fXdfBowCDqi3z2xg/ejx+sC83OAu0trNnx/y\n1A88EI47Dl58EQYNUnCXeLQkwDdUTGzTevtcD2xvZrOAqcDpLTifSGa4h3TH7bYL6Y2vvx4CfJs2\nabdMsqQlN1kLGVc5D3jZ3avMbEtgvJnt5O6LWnBekYo2ezb88pfw4YcwblyYcSqShJYE+PrFxDYj\n9OJz/QC4CMDd3zGz94CtgRdyd8otCFRVVaUZaJJZ99wDp54aAvyYMaE4l0ghampqqKmpadYxLbnJ\n2pZw03RvYBYwidVvsv4FWOjuF0aLfbwI7Oju83P20U1WybwlS+C008KEpdtvhz590m6RVLpEb7JG\nN0tPAR4FpgN3u/vrZnaSmZ0U7fYnYDczmwo8DpyVG9xFWoNp02C33WDFinATVcFdSkUzWUUSdOut\ncOaZMGIEHHFE2q2RLNFMVpGUfP11yGsfPx5qasLkJZFSU4AXidlnn8FBB4WVkSZPho4d026RtFaa\nAC0So6lTQ9rjwIEwdqyCu6RLPXiRmIwbByecACNHws9/nnZrRFrQg89XaCzap8rMpkSFxmqKbqVI\nmbvqKhg2LNRrV3CXclFUFk2BhcY6Ac8C+7r7x2bWxd3nNvBZyqKRirViRbiZ+vjjIbh37552i6S1\nSDKL5ttCY9GJ6gqNvZ6zzy+AMe7+MUBDwV2kki1dCocfDgsWwLPPQqdOabdIZFXFDtEUUmisF7CB\nmT1pZi+Y2ZFFnkuk7CxYAPvuC2uuCQ8/rOAu5anYAF/ImMqaQG9gf2Bf4H/MrFeR5xMpGzNnwo9+\nBL17h5WX1l477RaJNKzYIZpCCo19BMx196+Ar8zsKWAn4K36H6ZiY1Ip3noL9tkHTjoJzj5bddul\ndEpWbKzAQmPbACMJvfe1gYnAoe4+vd5n6SarVIQpU+DHPw5rpZ5wQtqtkdYusZus7r7czOoKjbUB\nbqwrNBa9f527zzCzR4BpQC1wff3gLlIpnnoKfvYzuPZaOPjgtFsjUhgVGxPJ46GH4Jhjwnj7wIFp\nt0YkSHpNVpHMGzUKjj02zFJVcJdKowAv0ojrrgulfh9/HPr1S7s1Is2nWjQiDbj0UrjmGvjPf6Bn\nz7RbI1IcBXiRHO5w/vlw333w9NPQrVvaLRIpXqLFxqL9+pjZcjNT7oGUtdpa+PWv4bHHFNwlG4rq\nwUfFxkaSU2zMzMbl5sHn7HcJ8AigKSFStpYtg6OPhlmzYMIEWH/9tFsk0nLF9uC/LTbm7suAumJj\n9Z0KjAbmFHkekcR9+SUccAAsWhTqyii4S1YkVmzMzDYlBP1ropeU7C5lZ8ECGDQoLK83diysu27a\nLRKJT5LFxq4EzolmMRkaopEyU1c0rF8/uPnmUBlSJEuSLDa2KzDKQjWmLsB+ZrbM3cfV/zAVG5NS\ne/112G+/cFP1979X0TApf2VVbKze/jcDD7j72AbeU6kCKalnnw31ZC6/HI7UKgVSoVItNlbM54ok\n7d574eST4bbbwoIdIlmmYmPSKrjDZZfB1VfDgw/CTjul3SKRlklyTVaRivHNN6HXPmkSPPecJjBJ\n66EAL5k2Z06o496xIzzzDHTokHaLREpH1SQls6ZNg913h/794f77Fdyl9VEPXjLp9tvhjDPgr3+F\nX/wi7daIpKNFPfh8BcfM7HAzm2pm08zsWTPbsSXnE8nnm2/g1FPhwgvhiScU3KV1K7oHX2DBsXeB\nH7n7QjMbDPwD0NIJkoi334ahQ2HTTWHyZOjUKe0WiaSrJT34vAXH3P05d18YPZ0IKH9BEnHHHfD9\n74eKkPfdp+AuAi0bg2+o4NjuTex/PPBQC84nspq5c0MK5LRpMH487Lxz2i0SKR8t6cEXPDvJzPYE\njgMaXRhEpLnGjYMddwx57S+9pOAuUl9LevCFFBwjurF6PTDY3Rc09EEqNibN8fHHcPrpodd+993w\nwx+m3SKR5JWs2BgUVnDMzDYHJgBHuPvzjXyOShVIQb75Bv72N7joojAsc+65sM46abdKJB2Jlioo\nsODYBUBn4JqobPAyd+9b7DmldXKHf/0rlPXt1StUg9x667RbJVL+VGxMytqTT8IFF4SVl664QhUg\nReqo2JhUJHd4/PEwFDNzJgwfHvLb27RJu2UilUUBXsrG0qXhpulf/gK1tfC738Hhh0Nb/SsVKYq+\nOpK6116DG24I9WN694ZLL4V99tEyeiItpQAvqXj3XbjnHhg1KpT0PfbYUK+9R4+0WyaSHbrJKiXx\n9dfw/PPw8MNhRaXPPgvrog4dCnvsofF1keYq5CZrotUko32uit6fama7tOR8lai5ExMqTWPXN29e\nCObV1bD33rDhhmFMvU2bMBzzySdw7bUwYEB5B/cs//yyfG2Q/esrRNEBPqea5GBgO2ComW1bb5/9\ngZ7u3gv4JXBNC9pakbL8j8wdHn64hokTwyLW558PP/0pbLFFGGq57LLQc//Nb8Ls08mTQ2ZMv36w\nRoUsNZPln1+Wrw2yf32FaMkY/LfVJAHMrK6aZG654CHALQDuPtHMOpnZxu7+aQvOKwlavhwWLYLP\nPw/b/PlhjHzuXPj0U5g1C2bPhg8/hA8+CLNLJ0yArbYK27HHhvow3/1u5QRxkaxKuppkQ/t0A1IJ\n8FOmhGGDpOXeUnjqqdBrbez9ph7XPa97XLfV1q7+eMWK8HjFirAtX77qtmxZCMbLloVe9dKlYfvq\nK/jyS1iyBBYvDvu0bw+dO4etUyfYaKOw/dd/hSXwNtkENt889NSvvDIMw4hI+WlJLZpDCAXEToye\nHwHs7u6n5uzzAPBnd382ev44cJa7v5Szj+6wiogUIcmZrIVUk6y/T7fotYIbKCIixWnJKOkLQC8z\n625mawGHAuPq7TMOOArAzPoBn2v8XUSkNBKtJunuD5nZ/mb2NrAEODaWVouISF6pT3QSEZFkKJFN\nRCSjFOBFRDJKAV5EJKMU4EVEMiqWAG9mW5vZlJxtoZmdZmYbmNl4M3vTzB4zs05xnE9ERPKLPYvG\nzNYgTGbqC5wKzHX3S6Nqk53d/ZxYTygiIg1KYohmIKEI2UfkFBuL/ntgAucTEZEGJBHgDwPuih7n\nVo78FNg4gfOJiEgDYh2iiUoWzAS2c/c5ZrbA3TvnvD/f3Teod4xmWomIFCHRFZ0asB/worvPiZ5/\namZdAcxsE+Czhg5y98xuw4cPT70Nuj5dX2u7ttZwfYWIO8APZeXwDIRiY0dHj48G7o/5fCIi0ojY\nAryZrUe4wTo25+U/A4PM7E1gr+i5iIiUQEvqwa/C3ZcAXeq9Np8Q9FutqqqqtJuQKF1f5crytUH2\nr68Qsd1kjSYx3QBsDzihNPBbwN3AFsD7wM/d/fN6x3lcbRARaS3MDC/hTda/Ag+5+7bAjsAM4Bxg\nvLtvBTwRPRepGGa22iZSKWLpwZtZR2CKu3+33uszgAHuXpdNU+Pu29TbRz14KVshoOf++7SCMxhE\nklTKHnwPYI6Z3WxmL5nZ9dFNV010ksxTL1/KVVwBvi3QG/i7u/cmLM+3ynBM1E1X10fKWvGB2nM2\nkfIQVxbNx8DH7j45ej4aOBf4xMy6uvsnTU10qq6u/vZxVVWV7n5LYhoK2qsPuaw6JCNSDmpqaqip\nqWnWMXFm0TwFnODub5pZNdAuemueu19iZucAnbxeNUmNwUsp5RtTb+j9wgK+xumltAoZg48zwO9E\nSJNcC3iHkCbZBrgH2BylSUoZiCfA1//3qhuxUnolDfDFUoCXUlKAl6wodR68iIiUkdhKFZjZ+8AX\nwApgmbv3NbMNyDOTVUREkhFnD96BKnffxd37Rq9pJquISEriHqKpPx6kJfukpIqZdKQJSpJVcffg\nHzezF8zsxOg1zWSVFDR30pEmKUk2xTYGD/R399lmthEwPqpD8y1398aW59NEJxGRpqU60WmVDzUb\nDiwGTiSMy9fNZH1SxcYkSfGnQSpNUspTydIkzaydmXWIHq8H7AO8gpbsk1ZKxcekHMQ1RLMxcF/0\nD7ktcIe7P2ZmLwD3mNnxRGmSMZ1PpMyt2qPPF+TV45ckaCarZEq5DNE097m+A9JcJZ/JamZtzGyK\nmT0QPd/AzMab2Ztm9li0rJ9ISWmoRFqruPPgTwems7J7oolOUgaUBimtU2wB3sy6AfsTKkrWdZU0\n0Uli09AkJvXKRRoXZw9+BPB7oDbnNU10kpg56pGLFCaWLBoz+wnwmbtPMbOqhvbRRCeRxtX/S0Q3\nXaW+1CY6mdmfgCOB5cA6wPrAWKAPmugkMVk9AwaSz5IpTRaNsmqkuUqWRePu57n7Zu7eAzgMmODu\nR6KJTiIiqUlqwY+67sefgUFm9iawV/RcRERKQBOdpGJoiEZkpVLWolnHzCaa2ctmNt3MLo5e10Qn\nkSIoFVTiENcY/FJgT3ffGdgR2NPM9kATnaQEshkIlQoqLRfbGLy7fxk9XAtoAyxAE52kJBQMRRoS\n50zWNczXokI6AAAGu0lEQVTsZcKEpifd/TU00UlEJDWxrejk7rXAzmbWEXjUzPas936jE51ERCR+\ncS7ZB4C7LzSzfwO7Ap+aWdeciU6fNXSMZrJKQ7I1pi7SMmnOZO0CLHf3z81sXeBR4EJgX2Ceu19i\nZucAndz9nHrHKk1SGpQ/5bGh17KRJqm0ScmnkDTJuHrwmwC3mNkahHH929z9CTObglZ0kgKpxy4S\nL010krLR/ElKheyTjR58ffrOSCl78CKSqKYDvkhD4prJupmZPWlmr5nZq2Z2WvS6ZrKKiKQkrjz4\nZcAZ7r490A842cy2RTNZRURSE1epgk/c/eXo8WLgdWBTNJNVRCQ1sY/Bm1l3YBdgIprJKk1Q1oxI\nsmIN8GbWHhgDnO7ui3K/wFqyTxqmm4cihUhtohOAma0JPAg87O5XRq/NQEv2SSNaXru9mGMqNU1S\nE59kVaWsB2/AjcD0uuAe0ZJ9IiIpiatUwR7AU8A0VnY1zgUmAfcAmxPNZHX3z+sdqx58RjU0xh7v\n6kvFHJONHnxD9D1qXQrpwWsmqySmoQCuAJ9cG/Q9al1KOURzk5l9amav5LymSU4iIimKa6LTzcDg\neq9pkpOISIrimuj0NGGJvlya5CSryeb6qSLlKcliY5rkJA1Q3ntS6v/SXP1+R9M0hp89JakmmW+5\nPk10ygb1ytO26i/P1X8ezc/MkfKR9kSn7sAD7r5D9DzvJKdoP2XRZETLs2IqN4MlC23Q97CylCyL\nphGa5JQhuWPnGkcXqQxxTXS6CxgAdCGMt18A/Is8k5yiY9WDLwPNn5QE8ee1t97eczm0Qd/DyqKJ\nTlKw5k9KKmSfyghsakPd81Xpe1ne0h6iqWvEYDObYWZvmdnZSZ9PSkvDNVniOZtkQaIB3szaACMJ\nk6C2A4ZGKz21Gs29611OCgveT6KgUKlq0m5Aoir5uxeXpHvwfYG33f19d18GjAIOSPicZaWy/5EV\n0qOrKU1TJAE1Tb7b2I31SvmLrbK/e/FIOg9+U+CjnOcfA7snfM7MO/74Ycybt/jb523bwmWX/ZEe\nPXoU/BmV8AWVtDU9Zp/vxrykL+kAr592Au655x4WL56/ymtjxtye97jVv3ya6CItsfqN3nwdh1L/\nAmjtv4QSzaIxs35AtbsPjp6fC9S6+yU5+7Se/9siIjFKNU3SzNoCbwB7A7MIC4AMdffXEzupiIgA\nCQ/RuPtyMzsFeBRoA9yo4C4iUhqpT3QSEZFkJD7RqVBmdqqZvW5mr5rZJfmPqDxmdqaZ1ZrZBmm3\nJS5mdln0c5tqZmPNrGPabYpDlifomdlmZvakmb0Wfd9OS7tNSTCzNmY2xcweSLstcTKzTmY2Ovre\nTY/udTaoLAK8me1JWCBkR3f/HnB5yk2KnZltBgwCPki7LTF7DNje3XcC3iQstl7RWsEEvWXAGe6+\nPdAPODlj11fndGA62cvm+yvwkLtvC+wINDrsXRYBHhgGXBxNhsLd56TcniT8BTgr7UbEzd3Hu3tt\n9HQi0C3N9sQk0xP03P0Td385eryYECC+k26r4mVm3YD9gRvIUA5w9BfyD939Jgj3Od19YWP7l0uA\n7wX8yMyeN7MaM9st7QbFycwOAD5292lptyVhxwEPpd2IGDQ0QW/TlNqSqGgdh10Iv5yzZATwe6A2\n344Vpgcwx8xuNrOXzOx6M2vX2M4lWdEJwMzGA10beOv8qB2d3b2fmfUhlBn+bqnaFoc813cusE/u\n7iVpVEyauLbz3P2BaJ/zgW/c/c6SNi4ZWfuTvkFm1h4YDZwe9eQzwcx+Anzm7lPMrCrt9sSsLdAb\nOMXdJ5vZlcA5hBLtDe5cEu4+qLH3zGwYMDbab3J0I3JDd59Xqva1VGPXZ2bfI/zWnRrNqusGvGhm\nfd39sxI2sWhN/ewAzOwYwp/De5ekQcmbCWyW83wzQi8+M8xsTWAMcLu7Z20xnh8AQ8xsf2AdYH0z\nu9Xdj0q5XXH4mDAaMDl6PpoQ4BtULkM09wN7AZjZVsBalRTcm+Lur7r7xu7ew917EH5AvSsluOdj\nZoMJfwof4O5L025PTF4AeplZdzNbCziUsEJZJljoadwITHf3K9NuT9zc/Tx33yz6vh0GTMhIcMfd\nPwE+iuIkwEDgtcb2L1kPPo+bgJvM7BXgGyATP4xGZO3P/6uBtYDx0V8oz7n7r9NtUsu0ggl6/YEj\ngGlmNiV67Vx3fyTFNiUpa9+5U4E7os7HO8Cxje2oiU4iIhlVLkM0IiISMwV4EZGMUoAXEckoBXgR\nkYxSgBcRySgFeBGRjFKAFxHJKAV4EZGM+n+s3SRxwlpVUAAAAABJRU5ErkJggg==\n",
  2125. "text/plain": [
  2126. "<matplotlib.figure.Figure at 0x10ad17150>"
  2127. ]
  2128. },
  2129. "metadata": {},
  2130. "output_type": "display_data"
  2131. }
  2132. ],
  2133. "source": [
  2134. "x = linspace(-5,5,100)\n",
  2135. "\n",
  2136. "fig, axes = plt.subplots(3,1, sharex=True)\n",
  2137. "\n",
  2138. "# 画出概率密度函数 (PDF)\n",
  2139. "axes[0].plot(x, Y.pdf(x))\n",
  2140. "\n",
  2141. "# 画出累积分布函数(CDF)\n",
  2142. "axes[1].plot(x, Y.cdf(x));\n",
  2143. "\n",
  2144. "# 绘制随机变量Y的1000个随机实现的直方图\n",
  2145. "axes[2].hist(Y.rvs(size=1000), bins=50);"
  2146. ]
  2147. },
  2148. {
  2149. "cell_type": "markdown",
  2150. "metadata": {},
  2151. "source": [
  2152. "统计:"
  2153. ]
  2154. },
  2155. {
  2156. "cell_type": "code",
  2157. "execution_count": 87,
  2158. "metadata": {},
  2159. "outputs": [
  2160. {
  2161. "data": {
  2162. "text/plain": [
  2163. "(3.5, 1.8708286933869707, 3.5)"
  2164. ]
  2165. },
  2166. "execution_count": 87,
  2167. "metadata": {},
  2168. "output_type": "execute_result"
  2169. }
  2170. ],
  2171. "source": [
  2172. "X.mean(), X.std(), X.var() # 泊松分布"
  2173. ]
  2174. },
  2175. {
  2176. "cell_type": "code",
  2177. "execution_count": 88,
  2178. "metadata": {},
  2179. "outputs": [
  2180. {
  2181. "data": {
  2182. "text/plain": [
  2183. "(0.0, 1.0, 1.0)"
  2184. ]
  2185. },
  2186. "execution_count": 88,
  2187. "metadata": {},
  2188. "output_type": "execute_result"
  2189. }
  2190. ],
  2191. "source": [
  2192. "Y.mean(), Y.std(), Y.var() # 正态分布"
  2193. ]
  2194. },
  2195. {
  2196. "cell_type": "markdown",
  2197. "metadata": {},
  2198. "source": [
  2199. "### 9.1 统计测试"
  2200. ]
  2201. },
  2202. {
  2203. "cell_type": "markdown",
  2204. "metadata": {},
  2205. "source": [
  2206. "测试是否两组独立的随机变量来自同样的分布:"
  2207. ]
  2208. },
  2209. {
  2210. "cell_type": "code",
  2211. "execution_count": 89,
  2212. "metadata": {},
  2213. "outputs": [
  2214. {
  2215. "name": "stdout",
  2216. "output_type": "stream",
  2217. "text": [
  2218. "t-statistic = -0.901953297251\n",
  2219. "p-value = 0.367190391714\n"
  2220. ]
  2221. }
  2222. ],
  2223. "source": [
  2224. "t_statistic, p_value = stats.ttest_ind(X.rvs(size=1000), X.rvs(size=1000))\n",
  2225. "\n",
  2226. "print \"t-statistic =\", t_statistic\n",
  2227. "print \"p-value =\", p_value"
  2228. ]
  2229. },
  2230. {
  2231. "cell_type": "markdown",
  2232. "metadata": {},
  2233. "source": [
  2234. "因为p值非常的大所以我们不能否定两组数据具有*不同的*均值假设。"
  2235. ]
  2236. },
  2237. {
  2238. "cell_type": "markdown",
  2239. "metadata": {},
  2240. "source": [
  2241. "检验单个样本数据的均值是否为0.1(真实均值为0.0):"
  2242. ]
  2243. },
  2244. {
  2245. "cell_type": "code",
  2246. "execution_count": 90,
  2247. "metadata": {},
  2248. "outputs": [
  2249. {
  2250. "data": {
  2251. "text/plain": [
  2252. "Ttest_1sampResult(statistic=-3.1644288210071765, pvalue=0.0016008455559249511)"
  2253. ]
  2254. },
  2255. "execution_count": 90,
  2256. "metadata": {},
  2257. "output_type": "execute_result"
  2258. }
  2259. ],
  2260. "source": [
  2261. "stats.ttest_1samp(Y.rvs(size=1000), 0.1)"
  2262. ]
  2263. },
  2264. {
  2265. "cell_type": "markdown",
  2266. "metadata": {},
  2267. "source": [
  2268. "低P值意味着我们可以拒绝Y均值是0.1的假设。"
  2269. ]
  2270. },
  2271. {
  2272. "cell_type": "code",
  2273. "execution_count": 91,
  2274. "metadata": {},
  2275. "outputs": [
  2276. {
  2277. "data": {
  2278. "text/plain": [
  2279. "0.0"
  2280. ]
  2281. },
  2282. "execution_count": 91,
  2283. "metadata": {},
  2284. "output_type": "execute_result"
  2285. }
  2286. ],
  2287. "source": [
  2288. "Y.mean()"
  2289. ]
  2290. },
  2291. {
  2292. "cell_type": "code",
  2293. "execution_count": 92,
  2294. "metadata": {},
  2295. "outputs": [
  2296. {
  2297. "data": {
  2298. "text/plain": [
  2299. "Ttest_1sampResult(statistic=2.2098772438652992, pvalue=0.027339807364469011)"
  2300. ]
  2301. },
  2302. "execution_count": 92,
  2303. "metadata": {},
  2304. "output_type": "execute_result"
  2305. }
  2306. ],
  2307. "source": [
  2308. "stats.ttest_1samp(Y.rvs(size=1000), Y.mean())"
  2309. ]
  2310. },
  2311. {
  2312. "cell_type": "markdown",
  2313. "metadata": {},
  2314. "source": [
  2315. "## 进一步的阅读"
  2316. ]
  2317. },
  2318. {
  2319. "cell_type": "markdown",
  2320. "metadata": {},
  2321. "source": [
  2322. "* http://www.scipy.org - SciPy项目官方网站.\n",
  2323. "* http://docs.scipy.org/doc/scipy/reference/tutorial/index.html - 关于如何开始使用SciPy的教程. \n",
  2324. "* https://github.com/scipy/scipy/ - SciPy源码. "
  2325. ]
  2326. },
  2327. {
  2328. "cell_type": "markdown",
  2329. "metadata": {},
  2330. "source": [
  2331. "## 版本"
  2332. ]
  2333. },
  2334. {
  2335. "cell_type": "code",
  2336. "execution_count": 93,
  2337. "metadata": {},
  2338. "outputs": [
  2339. {
  2340. "data": {
  2341. "application/json": {
  2342. "Software versions": [
  2343. {
  2344. "module": "Python",
  2345. "version": "2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)]"
  2346. },
  2347. {
  2348. "module": "IPython",
  2349. "version": "3.2.1"
  2350. },
  2351. {
  2352. "module": "OS",
  2353. "version": "Darwin 14.1.0 x86_64 i386 64bit"
  2354. },
  2355. {
  2356. "module": "numpy",
  2357. "version": "1.9.2"
  2358. },
  2359. {
  2360. "module": "matplotlib",
  2361. "version": "1.4.3"
  2362. },
  2363. {
  2364. "module": "scipy",
  2365. "version": "0.16.0"
  2366. }
  2367. ]
  2368. },
  2369. "text/html": [
  2370. "<table><tr><th>Software</th><th>Version</th></tr><tr><td>Python</td><td>2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)]</td></tr><tr><td>IPython</td><td>3.2.1</td></tr><tr><td>OS</td><td>Darwin 14.1.0 x86_64 i386 64bit</td></tr><tr><td>numpy</td><td>1.9.2</td></tr><tr><td>matplotlib</td><td>1.4.3</td></tr><tr><td>scipy</td><td>0.16.0</td></tr><tr><td colspan='2'>Sat Aug 15 11:13:18 2015 JST</td></tr></table>"
  2371. ],
  2372. "text/latex": [
  2373. "\\begin{tabular}{|l|l|}\\hline\n",
  2374. "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n",
  2375. "Python & 2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)] \\\\ \\hline\n",
  2376. "IPython & 3.2.1 \\\\ \\hline\n",
  2377. "OS & Darwin 14.1.0 x86\\_64 i386 64bit \\\\ \\hline\n",
  2378. "numpy & 1.9.2 \\\\ \\hline\n",
  2379. "matplotlib & 1.4.3 \\\\ \\hline\n",
  2380. "scipy & 0.16.0 \\\\ \\hline\n",
  2381. "\\hline \\multicolumn{2}{|l|}{Sat Aug 15 11:13:18 2015 JST} \\\\ \\hline\n",
  2382. "\\end{tabular}\n"
  2383. ],
  2384. "text/plain": [
  2385. "Software versions\n",
  2386. "Python 2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)]\n",
  2387. "IPython 3.2.1\n",
  2388. "OS Darwin 14.1.0 x86_64 i386 64bit\n",
  2389. "numpy 1.9.2\n",
  2390. "matplotlib 1.4.3\n",
  2391. "scipy 0.16.0\n",
  2392. "Sat Aug 15 11:13:18 2015 JST"
  2393. ]
  2394. },
  2395. "execution_count": 93,
  2396. "metadata": {},
  2397. "output_type": "execute_result"
  2398. }
  2399. ],
  2400. "source": [
  2401. "%reload_ext version_information\n",
  2402. "\n",
  2403. "%version_information numpy, matplotlib, scipy"
  2404. ]
  2405. }
  2406. ],
  2407. "metadata": {
  2408. "kernelspec": {
  2409. "display_name": "Python 3",
  2410. "language": "python",
  2411. "name": "python3"
  2412. },
  2413. "language_info": {
  2414. "codemirror_mode": {
  2415. "name": "ipython",
  2416. "version": 3
  2417. },
  2418. "file_extension": ".py",
  2419. "mimetype": "text/x-python",
  2420. "name": "python",
  2421. "nbconvert_exporter": "python",
  2422. "pygments_lexer": "ipython3",
  2423. "version": "3.6.9"
  2424. }
  2425. },
  2426. "nbformat": 4,
  2427. "nbformat_minor": 1
  2428. }

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。