Я пытаюсь ознакомиться с пакетами в Julia, такими как Interpolations.jl
и Plots.jl
.Контурный график в Julia с использованием бэкэнда GR очень прост, как показано в ссылке: https://docs.juliaplots.org/latest/examples/gr/#contours И для выполнения интерполяции с помощью Interpolations.jl
: https://github.com/JuliaMath/Interpolations.jl/blob/master/doc/Interpolations.jl.ipynb
Я попытался создать контурный графикиспользуя интерполированную функцию следующим образом:
using Interpolations
using Plots
gr()
xs = 1:5
ys = 1:8
g = Float64[(3x + y ^ 2) * abs(sin(x) + cos(y)) for x in xs, y in ys]
gitp_quad2d = interpolate(g, BSpline(Quadratic(Line(OnCell()))))
xc = 1:0.1:5
yc = 1:0.1:5
p1 = contour(xc, yc, gitp_quad2d, fill=true)
plot(p1)
Однако это дает график без каких-либо контурных кривых на нем, с сообщением «Массивы имеют неправильную длину или размер».Но функция contour
, кажется, принимает, как и в приведенной выше ссылке, произвольные массивы x, y и функцию x, y, и возвращает контурный график.Это не должно вызывать проблем с измерениями.Что не так с кодом?
[Редактировать]
using Interpolations
using Plots
gr()
xs = 1:0.5:5
ys = 1:0.5:8
g = Float64[(3x + y ^ 2) for x in xs, y in ys]
f(x, y) = (3x + y ^ 2)
g_int = interpolate(g, BSpline(Quadratic(Line(OnCell()))))
gs_int = scale(g_int, xs, ys)
xc = 1:0.1:5
yc = 1:0.1:5
println("gs_int(3.2, 3.2) = ", gs_int(3.2, 3.2))
println("f(3.2, 3.2) = ", f(3.2, 3.2))
p1 = contour(xs, ys, gs_int(xs, ys), fill=true)
p2 = contour(xc, yc, f, fill=true)
plot(p1, p2)
Результат:
Кажется, что интерполяция работает нормально, но результат из контурного графикапохоже, не передает то же сообщение.