1. Основы языка программирования Julia#
Julia: come for the syntax, stay for the speed
Почему Julia?
Язык Julia создавался как решение two-languages problem в научной и вычислительной среде [BEKS17]. На одних языках просто писать программы, но они медленно исполняются (например, на Python), с другой стороны, в языках с быстрым исполнением программ сложный синтаксис (например, C/C++, Fortran).
Так, язык Julia созданный в 2012 году, развивается с фокусом на математические вычисления при сохранении удобного синтаксиса. В языке богатая стандартная библиотека, которая легко расширяется под пользовательские структуры данных.
Кто уже пользуется?
Julia продолжает набирать популярность. Этот язык уже используется в физике, машинном обучении, финансовых моделях, биологии, медицине, геофизике… А в список пользователей входят: MIT, Princeton, NASA, CISCO, IBM, Adobe…[1]
Как изучить?
В данном разделе излагаются основные инструменты языка Julia, которые понадобятся в практикуме. Дополнительные материалы по изучению языка находятся в Приложении Язык Julia.
Ниже показано решение уравнения \(\exp{x} + \log{x} - 2 = 0\) методом деления пополам. Можете оценить синтаксис Julia по этому короткому примеру.
function bisection(f, xl, xr; xtol=eps(), ftol=eps())
@assert xl < xr
yl, yr = f.((xl, xr))
@assert sign(yl) != sign(yr)
abs(yl) < ftol && return xl
abs(yl) < ftol && return xr
maxiter = ceil(Int, log2((xr-xl)/xtol))
for i in 1:maxiter
xmid = (xr + xl) / 2
ymid = f(xmid)
if sign(yr) == sign(ymid)
xr, yr = xmid, ymid
elseif sign(yl) == sign(ymid)
xl, yl = xmid, ymid
else
return xmid
end
abs(ymid) < ftol && return xmid
end
return (xr + xl)/2
end
f(x) = exp(x) + log(x) - 2
xsol = bisection(f, 0.1, 2)
0.7993101693660329
using Plots
using LaTeXStrings
plot(f; label=L"\exp\ x + \log\ x - 2", xlim=(0, 1.5), ylim=(-6, 6), xlabel=L"x", ylabel=L"f(x)")
scatter!([xsol], [f(xsol)]; label="метод бисекции, корень $(round(xsol; digits=5))")