แพ็คเกจ Mathematica.jl
จัดเตรียมอินเทอร์เฟซสำหรับการใช้ Wolfram Mathematica™ จากภาษา Julia คุณไม่สามารถใช้ Mathematica.jl
ได้โดยไม่ต้องซื้อและติดตั้งสำเนา Mathematica™ จาก Wolfram Research แพคเกจนี้ให้บริการฟรีและไม่มีทางแทนที่หรือเปลี่ยนแปลงฟังก์ชันการทำงานใดๆ ของผลิตภัณฑ์ Mathematica ของ Wolfram
แพ็คเกจที่ให้นั้นเป็นอินเทอร์เฟซ Julia ที่ไม่ยุ่งยากกับ Mathematica โดยมีจุดมุ่งหมายที่จะปฏิบัติตามปรัชญาของ 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
tips (ดูด้านล่าง) จะแปลงผลลัพธ์ แต่สำหรับฟังก์ชันอื่นๆ คุณต้องใช้ 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,...})
เราสามารถขยาย Mathematica.jl
ให้รองรับประเภทที่กำหนดเองได้โดยการโอเวอร์โหลด MathLink.to_mma
และ MathLink.from_mma
ตัวอย่างเช่น เราสามารถส่ง Julia Dict ตรงไปยัง Mathematica โดยมีคำจำกัดความเพียงสองบรรทัด:
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
จะค้นหา math.exe
บน Windows ด้วย ซึ่งควรจะใช้ได้กับ Mathematica เวอร์ชัน 8 หรือ 9 ที่ติดตั้งในตำแหน่งเริ่มต้น หากไม่ได้ผลสำหรับคุณ ให้เปิดปัญหา (โดยเฉพาะฉันไม่รู้ว่าจะทำงานอย่างไรบน Mac)