Mathematica.jl
패키지는 Julia 언어에서 Wolfram Mathematica™를 사용하기 위한 인터페이스를 제공합니다. Wolfram Research에서 Mathematica™ 사본을 구입하여 설치하지 않으면 Mathematica.jl
사용할 수 없습니다. 이 패키지는 무료로 제공되며 Wolfram Mathematica 제품의 기능을 대체하거나 변경하지 않습니다.
패키지는 Mathematica에 대한 번거로움 없는 Julia 인터페이스를 제공합니다. 낮은 수준의 최적화를 희생하지 않고 높은 수준의 표현력을 결합하려는 Julia의 철학을 따르는 것을 목표로 합니다.
Pkg . add ( " Mathematica " )
Mathematica가 설치되어 있으면 사용법은 다음과 같이 간단합니다.
using Mathematica
Fibonacci ( 1000 )
#= > 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875
Mathematica의 모든 함수는 함수와 매크로로 모두 사용 가능하며 접합( $
)은 예상대로 작동합니다.
Integrate (:(x ^ 2 ), :x ) # or
@Integrate (x ^ 2 , x)
#= > :(*(1//3,^(x,3)))
@Integrate(log(x), {x,0,2})
#= > :(+(-2,log(4)))
eval(ans) # or
@N($ans) # or
N(ans) # or
@N(Integrate(log(x), {x,0,2}))
#= > -0.6137056388801094
Mathematica 데이터를 반환하는 항목 포함:
@Plot (x ^ 2 , {x, 0 , 2 })
#= > Graphics[{{{},{},{Hue[0.67, 0.6, 0.6],Line[{{4.081632653061224e-8,1.6659725114535607e-15},...}]}}}, {:AspectRatio->Power[:GoldenRatio, -1],:Axes->true, ...}]
수학적 데이터는 래핑이 필요 없이 Julia 함수에 직접 참여할 수 있습니다. 예를 들어 -
using MathLink
d = BinomialDistribution ( 10 , 0.2 ) #= > BinomialDistribution[10, 0.2]
probability(b::MExpr{:BinomialDistribution}) = b.args[2]
probability(d) #= > 0.2
Julia 호환 데이터(예: 목록, 복소수 등)는 모두 자동으로 변환되며 변환을 다른 유형으로 확장할 수 있습니다.
Mathematica 표현식은 기본적으로 Julia 표현식으로 변환되지 않습니다 . ::Expr
힌트(아래 참조)가 있는 함수/매크로는 결과를 변환하지만, 다른 경우에는 convert
또는 MathLink.to_expr
사용해야 합니다.
Log ( - 1 ) #= > Times[0 + 1im, :Pi]
convert(Expr, ans) #= > :(*(0 + 1im,Pi))
N(Log(-1)) #= > 0.0 + 3.141592653589793im
인쇄 및 경고도 지원됩니다.
Print ( " hi " )
#= > hi
@Print(x^2/3)
#= > 2
# x
# --
# 3
Binomial(10)
#= > WARNING: Binomial::argr: Binomial called with 1 argument; 2 arguments are expected.
#= > Binomial[10]
마지막으로 물론입니다.
WolframAlpha ( " hi " ) #= >
2-element Array{Any,1}:
{{"Input",1},"Plaintext"}->"Hello."
{{"Result",1},"Plaintext"}->"Hello, human."
Mathematica.jl
파일에는 각각 다음 형식 중 하나로 된 함수 및 매크로 사양 목록이 표시됩니다.
Function :: ReturnType # or
Function (Arg1Type, Arg2Type, ... ) :: ReturnType # (functions only)
예를 들어:
Integrate :: Expr
RandomReal (Number) :: Float64
RandomReal (Number, Integer) :: Vector{Float64}
여기서 반환 유형 힌트는 최적화입니다. 이를 통해 MathLink.jl
먼저 유형 확인을 수행하지 않고 Mathematica에서 값을 가져올 수 있으며 함수 유형을 안정적으로 만듭니다. 예를 들어 RandomReal(10, 5)
이 정의가 아닌 경우 Any
배열을 반환합니다. 인수 유형을 사용하면 유형 검사와 다중 정의가 가능합니다.
아직은 타입 시그니처가 있는 함수가 많지 않기 때문에 사용하려는 함수에 대해 타입 시그니처를 제공하는 것이 기여하기 쉬운 방법입니다.
Mathematica 데이터 표현식 Head[x,y,z,...]
Julia에서 MExpr{:Head}(args = {x,y,z,...})
로 표시됩니다. MathLink.to_mma
및 MathLink.from_mma
오버로드하여 Mathematica.jl
확장하여 사용자 정의 유형을 지원할 수 있습니다.
예를 들어, 두 줄의 정의만 사용하여 Mathematica를 통해 Julia Dict를 바로 전달할 수 있습니다.
using MathLink; import MathLink : to_mma, from_mma
d = [ :a => 1 , :b => 2 ]
to_mma (d :: Dict ) = MExpr {:Dict} ( map (x -> MExpr ( :Rule , x[ 1 ], x[ 2 ]),d))
Identity (d) #= > Dict[:b->2, :a->1]
from_mma(d::MExpr{:Dict}) = Dict(map(x->x.args[1], d.args), map(x->x.args[2], d.args))
Identity(d) #= > {:b=>2,:a=>1}
using Mathematica
이는 math
이 경로에 있는 한 작동합니다(일반적으로 Linux에서는 해당). Mathematica.jl
Windows에서 math.exe
도 검색합니다. 이는 기본 위치에 설치된 Mathematica 버전 8 또는 9에서 작동합니다. 문제가 해결되지 않으면 문제를 열어보세요(특히 이것이 Mac에서 어떻게 작동할지 모르겠습니다).