나는 julia를 처음 사용하며 Gadfly에서 정의한 값 범위를 넘어서 함수를 그려보기 위해 노력하고 있습니다. 함수 자체는 매우 간단합니다.값의 순서에 따라 Gadfly에 의해 유발 된 InexactError
function metropolis(dU, b)
if dU < 0
1
else
exp(-dU * b)
end
end
이 함수를 플롯하려고하면 julia에서 InexactError
이 나옵니다.
using Gadfly
x = linspace(-5, 5, 100)
b = 1
plot(x=x, y=metropolis.(x, b), Geom.line)
정확한 오류가
Stacktrace:
[1] apply_scale_typed!(::Array{Int64,1}, ::Array{Real,1}, ::Gadfly.Scale.ContinuousScale) at /home/max/.julia/v0.6/Gadfly/src/scale.jl:249
[2] apply_scale(::Gadfly.Scale.ContinuousScale, ::Array{Gadfly.Aesthetics,1}, ::Gadfly.Data, ::Vararg{Gadfly.Data,N} where N) at /home/max/.julia/v0.6/Gadfly/src/scale.jl:206
[3] apply_scales(::IterTools.Distinct{Base.ValueIterator{Dict{Symbol,Gadfly.ScaleElement}},Gadfly.ScaleElement}, ::Array{Gadfly.Aesthetics,1}, ::Gadfly.Data, ::Vararg{Gadfly.Data,N} where N) at /home/max/.julia/v0.6/Gadfly/src/scale.jl:33
[4] apply_scales(::IterTools.Distinct{Base.ValueIterator{Dict{Symbol,Gadfly.ScaleElement}},Gadfly.ScaleElement}, ::Gadfly.Data) at /home/max/.julia/v0.6/Gadfly/src/scale.jl:52
[5] render_prepare(::Gadfly.Plot) at /home/max/.julia/v0.6/Gadfly/src/Gadfly.jl:670
[6] render(::Gadfly.Plot) at /home/max/.julia/v0.6/Gadfly/src/Gadfly.jl:748
[7] show at /home/max/.julia/v0.6/Gadfly/src/Gadfly.jl:952 [inlined]
[8] limitstringmime(::MIME{Symbol("image/svg+xml")}, ::Gadfly.Plot) at /home/max/.julia/v0.6/IJulia/src/inline.jl:24
[9] display_dict(::Gadfly.Plot) at /home/max/.julia/v0.6/IJulia/src/execute_request.jl:29
[10] execute_request(::ZMQ.Socket, ::IJulia.Msg) at /home/max/.julia/v0.6/IJulia/src/execute_request.jl:182
[11] eventloop(::ZMQ.Socket) at /home/max/.julia/v0.6/IJulia/src/eventloop.jl:8
[12] (::IJulia.##14#17)() at ./task.jl:335
입니다하지만 -x
를 사용할 때 이상하게도 그것은이는 값의 순서를 반대로되어
plot(x=x, metropolis.(-x, b), Geom.line)
작동합니다. 이 동작은 나에게 매우 이상합니다. 어떤 도움을 주셔서 감사합니다.
주어진 답은 상황을 잘 설명합니다. 그러나 FYI, 함수를 작성하는 깔끔한 방법은 간단합니다 :'metropolis (dU, b) = dU <0? 1.0 : Float64 (exp (-dU * b))'. 가능하다면'exp' 호출의 반환 값은 항상'Float64'로 변환되기 때문에 이것은 타입 안정입니다. 'Complex'에서 당신의 입력 중 하나. 'Complex'와 같은 입력을 만날 수 있다면 가장 간단한 해결책은이 경우를 명시 적으로 다루는 두 번째 메소드를 추가하는 것입니다. –