среда, 24 априла, 2024
Како да...?

Нумеричка обрада и симулације (3. део)

Аутор: Стефан Ножинић

Упознали смо се са неким основним принципима и проблемима на које можемо наићи током нумеричке обраде података, те је ред да мало детаљније истражимо какви су нам алати на располагању. Поменули смо да постоје и комерцијални и слободни алати за ову намену, од којих се неки чешће користе а неки ређе. Углавном, ситуација је таква да сви ти алати могу да раде 99% ствари које су нам неопходне (прим. аут.). Наравно, неке ствари се лакше постигну другим алатом него неким који ми користимо. Сваки алат је специфичан. У овом серијалу ћемо се фокусирати на један скуп алата како бисмо, поред теорије, показали и како се проблеми решавају у пракси. Због овога, овај текст посвећујемо детаљном опису оног шта ћемо користити. Неке од ових алата сте вероватно упознали читајући наш часопис, али ћемо их овде поново поменути ради прегледности и комплетности. Основа свега ће нам бити програмски језик Пајтон. Он је врло једноставан по синтакси и оно што нам се допада код њега јесте чињеница да вас језик тера да пишете леп кôд (прим. аут.). Можда вам ово тренутно не значи ништа, али може бити круцијално приликом уклањања грешака у вашим програмима (симулацијама и сличном). Поред тога, језик има сјајан скуп стандардних библиотека за разне ствари и добру документацију. Има велику заједницу па нећете бити ускраћени за одређену информацију о самом језику и најбољој пракси. Много наших аутора користи овај језик за своје пројекте, па се немојте устручавати ни да контактирате са нама путем наше адресе електронске поште, или да нас посетите на ИРЦ-у или на нашим страницама на Фејсбуку и Твитеру. Поред тога што Пајтон има лепу колекцију разних библиотека, недостају му неке ствари које ћемо морати да узмемо са стране. То су библиотеке за цртање графика и визуелизацију података (енг. plotting) и библиотека за рад са матрицама. Све ово се налази у пакету Сајпај (енг. SciPy) који укључује и неке додатне ствари. Ово је поприлично популарна библиотека, па се тако налази у већини званичних ризница пакета на свим познатијим дистрибуцијама линукса као и на БСД дистрибуцијама. Постоје верзије за виндоуз и Мек ОС X. Ако нисте упознати са Пајтоном, препоручујемо вам да прегледате документацију за почетнике. Наша процена је да се Пајтон може научити јако брзо. Ако имате неких проблема, знате где да нас тражите. Када инсталирате ову библиотеку, њене компоненте као што су Нумпај (енг. NumPy) и Матплотлиб (енг. Matplotlib) можете да користите тако што их укључите у програм:

import numpy as np
import matplotlib.pyplot as plt

Потом можете да нацртате свој први график:

x = np.linspace(0, 100, 1000)
plt.plot(x, np.sin(x))
plt.show()

sotfy1f
У овом коду се прво генерише низ од 1000 бројева који представља распон од 0 до 100. Ово замислите као бројевну праву где је део од 0 до 100 подељен на хиљаду делова. После се позива plot функција која узима два главна аргумента:

x-оса, бројеви који ће бити приказани на x-оси
y-оса, бројеви који одговарају датој вредности из првог низа на тој позицији.

Наравно, јасно је да ова два низа морају имати исту величину. Како ми генеришемо те низове? Први смо генерисали помоћу функције linspace коју смо горе објаснили. Она нам је вратила низ од 1000 бројева. Други низ смо генерисали помоћу функције np.sin којој смо као параметар проследили први низ x, а она нам враћа низ исте величине, такав да је на i-тој позицији вредност синуса од броја који се налази на i-тој позицији у прослеђеном низу, односно у низу x. Овде је битно схватити да су све функције у Нумпају векторизоване. То значи да као аргумент не примају један број, већ низ бројева (вектор) и враћају нови низ бројева (вектор). Да будемо још генералнији, функције могу примити тензор (вишедимензионалан низ) и вратити нам тензор. То заправо значи да све операције морамо радити користећи функције које су векторизоване и морамо избећи коришћење for петљи јер на овакав начин добијамо на брзини. Добра страна оваквог размишљања јесте што се касније кôд лако може пребацити на графичку картицу која, на пример, много брже врши множење матрица од стандардног процесора. Због оваквих критеријума је важно концепт осмислити прво на папиру, па га потом испрограмирати, а за то је потребно доста теоријског знања из математике која лежи испод сваке обраде података и нумеричке симулације. Због тога ћемо посветити следећи део серијала управо томе — покушаћемо да обрадимо потребну теорију како бисмо касније лакше могли да искористимо пун потенцијал алата који су нам дати.matplotlib_intro