توفر حزمة Mathematica.jl
واجهة لاستخدام Wolfram Mathematica™ من لغة جوليا. لا يمكنك استخدام Mathematica.jl
دون شراء نسخة من Mathematica™ وتثبيتها من Wolfram Research. هذه الحزمة متاحة مجانًا ولا تحل بأي حال من الأحوال محل أو تغير أي وظيفة في منتج Wolfram's Mathematica.
توفر الحزمة واجهة جوليا خالية من المتاعب لـ Mathematica. ويهدف إلى اتباع فلسفة جوليا المتمثلة في الجمع بين التعبير عالي المستوى دون التضحية بالتحسين منخفض المستوى.
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, ...}]
يمكن أن تشارك البيانات الرياضية في وظائف جوليا مباشرة، دون الحاجة إلى تغليف. على سبيل المثال -
using MathLink
d = BinomialDistribution ( 10 , 0.2 ) #= > BinomialDistribution[10, 0.2]
probability(b::MExpr{:BinomialDistribution}) = b.args[2]
probability(d) #= > 0.2
سيتم تحويل جميع البيانات المتوافقة مع جوليا (مثل القوائم والأرقام المركبة وما إلى ذلك) تلقائيًا، ويمكنك توسيع التحويل إلى أنواع أخرى.
لاحظ أن تعبيرات 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,...]
في جوليا كـ MExpr{:Head}(args = {x,y,z,...})
. يمكننا توسيع Mathematica.jl
لدعم الأنواع المخصصة عن طريق التحميل الزائد على MathLink.to_mma
و MathLink.from_mma
.
على سبيل المثال، يمكننا تمرير "إملاء جوليا" مباشرةً عبر 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، والذي يجب أن يعمل مع الإصدارين 8 أو 9 من Mathematica المثبتين في المواقع الافتراضية. إذا لم ينجح الأمر بالنسبة لك، فافتح مشكلة (على وجه الخصوص، لا أعرف كيف سيتصرف هذا الأمر على أجهزة Mac).