ماتلاب ضد. جوليا ضد الثعبان

لقد استخدمت MATLAB منذ أكثر من 25 عامًا. (وقبل أن أستخدم MATRIXx ، لم يكن يستريح بسلام.) ليست هذه هي اللغة الأولى التي تعلمتها في البرنامج ، لكن هذه هي اللغة التي وصلت بها إلى العمر الرياضي. معرفة MATLAB كانت مجزية لحياتي المهنية.

ومع ذلك ، من المستحيل تجاهل نمو بيثون في الحوسبة العلمية. يجب أن تشعر MathWorks بنفس الطريقة: فهي لم تضف فقط القدرة على الاتصال بيثون مباشرة من MATLAB ، ولكنهم استعاروا أيضًا بعض ميزاتها اللغوية ، مثل النقل الأكثر عدوانية لمكونات المشغل الثنائية.

جاءت اللحظة التي سألت فيها استخدامي المستمر لماتلاب في كل من البحث والتدريس. ومع ذلك ، لقد استثمرت الكثير في المواد بحيث كان من الصعب العثور على الدافع لتعلم شيء جديد.

إديسون البرمجيات - تطوير الشبكة
تمت ترجمة هذه المقالة بدعم من برنامج EDISON ، الذي يعتني بصحة المبرمجين ووجبة الإفطار الخاصة بهم ، كما يطور البرامج المخصصة .

MATLAB البرنامج التعليمي التمهيدي ، الذي شاركت في تأليفه للرياضيات الحاسوبية. يحتوي الكتاب على أكثر من 40 وظيفة و 160 مثالًا حسابيًا ، وهو يغطي ما أعتقد أنه أساسي في استخدام MATLAB للحوسبة العلمية العددية. جزئياً لتحسين الذات ، وجزئياً لزيادة فائدة الكتاب هذا العام ، قررت ترجمة الشفرة إلى جوليا وبيثون . قادتني هذه التجربة إلى وجهات نظر خاصة بثلاث لغات فيما يتعلق بالحوسبة العلمية ، والتي أحاول وصفها أدناه.

سأؤجل قضايا التكلفة والانفتاح. MATLAB ، على عكس Python و Julia ، ليس منتجًا مجانيًا. هذا فرق كبير - بالنسبة للبعض ، لكنني أريد أن أعتبر المزايا الفنية. لسنوات عديدة ، تجاوزت MATLAB أي منتج مجاني بعدة طرق مفيدة للغاية ، وإذا كنت تريد أن تكون منتجًا ، فستكون التكلفة جهنمية. هذه مناقشة منفصلة للنداء الأفلاطوني للغة والنظام البيئي.

إذا تجاهلنا المشكلات المتعلقة بالتكلفة ، فإن سبب الاختلافات الكثيرة في هذه اللغات هو أصلها. وضع MATLAB أولاً أولوية على الجانب الرياضي ، أي الرياضيات الحسابية. وضع بيثون ، الذي ظهر في الثمانينات ، علوم الكمبيوتر في المقدمة. أنشئت جوليا عام 2009 ، وقد حددت هدف تحقيق التوازن بين اللغتين السابقتين.

MATLAB


في البداية ، كانت كل قيمة في MATLAB عبارة عن مجموعة من أرقام الفاصلة العائمة مزدوجة الدقة. كلا الجانبين من هذا الاختيار ، المصفوفات وأرقام الفاصلة العائمة ، كانت مستوحاة من قرارات التصميم.

لم يتم اعتماد معيار IEEE 754 لأرقام الفاصلة العائمة حتى عام 1985 ، وتم قياس الذاكرة بالكيلوبايت ، وليس الجيجابايت. لم تكن أرقام الفاصلة العائمة المزدوجة هي الطريقة الأكثر فعالية لعرض الشخصيات أو الأعداد الصحيحة ، لكنها كانت ما أراد العلماء والمهندسون وجميع علماء الرياضيات استخدامها معظم الوقت. بالإضافة إلى ذلك ، لا يجب التصريح عن المتغيرات وعدم تخصيص الذاكرة. من خلال السماح لجهاز الكمبيوتر الخاص بك بمعالجة هذه المهام والتخلص من أنواع البيانات ، قمت بتحرير عقلك للتفكير في الخوارزميات التي ستعمل مع البيانات.

المصفوفات مهمة لأن الخوارزميات العددية في الجبر الخطي أخذت أشكالها الخاصة LINPACK و EISPACK . ولكن الوصول إليها باستخدام وسيط قياسي في الحوسبة العلمية ، FORTRAN 77 ، كان عملية متعددة الخطوات تضمنت الإعلان عن المتغيرات ، واستدعاء أسماء خفية من الروتين ، وتجميع الشفرة ، ثم تحليل البيانات وإخراج الملفات. أدى تسجيل مصفوفة الضرب في شكل A * B وقائمة الاستجابة على الفور إلى تغيير في مسار اللعبة.

كما جعل MATLAB الرسومات بسيطة ومفتوحة. لا توجد مكتبات معقدة تعتمد على الآلة مع مكالمات منخفضة المستوى ، فقط ارسم (س ، ص) ، ورأيت ما قد يراه شخص آخر مع MATLAB. كان هناك المزيد من الابتكارات ، مثل الأرقام المعقدة المعقدة ، والمصفوفات المتفرقة ، وأدوات لإنشاء واجهات المستخدم الرسومية عبر منصات ومجموعة متقدمة من حل ODE التي جعلت MATLAB مكانًا للحوسبة العلمية بسرعة الفكر.

ومع ذلك ، فإن التصميم الذي كان مثاليًا للحوسبة التفاعلية ، حتى الطويلة منها ، لم يساهم دائمًا في كتابة برامج جيدة ومثمرة. يتطلب نقل البيانات بين العديد من الوظائف معالجة مجموعة متنوعة من المتغيرات والوصول إلى وثائق وسائط الإدخال والإخراج بشكل متكرر. وظيفة واحدة لكل ملف على القرص في مساحة اسم مسطحة كانت بسيطة للغاية لمشروع صغير ، ولكن صداع لآخر كبير. يجب أن يتم تطبيق أنماط برمجة معينة (الموجه ، التخصيص المسبق للذاكرة) إذا كنت ترغب في تجنب مشاكل السرعة الحاسوبية. يتم تطبيق الحوسبة العلمية حاليًا على عدد أكبر من المناطق التي تحتوي على عدد كبير من أنواع البيانات المختلفة. إلخ

استجابةً لذلك ، واصلت MathWorks الابتكار في MATLAB: الوظائف المضمنة ، الدوال المتداخلة ، المتغيرات الزائدة ، أنواع البيانات العديدة ، الوظائف الموجهة للكائنات ، البنى التحتية لاختبار الوحدة ، وما إلى ذلك. ربما كان كل ابتكار حلاً لمشكلة مهمة. لكن تراكم 40 سنة من هذه التغييرات كان له تأثير جانبي في طمس بساطة ووحدة المفهوم. في عام 2009 ، كتبت كتابًا غطى أساسيات MATLAB جيدًا على أقل من 100 صفحة. بقدر ما أعرف ، كل هذه الأشياء لا تزال متاحة. لكن عليك أن تعرف الكثير الآن لتدعو نفسك إلى محترف.

الثعبان


في جزء منه ، فإن تاريخ بيثون هو صورة طبق الأصل لتاريخ MATLAB. كان هناك سطر أوامر تفاعلي في كلتا اللغتين (يُطلق عليه الآن REPL اختصار لحلقة الطباعة المقروءة ، والتي تُترجم كحلقة قراءة-تقييم-طباعة ، بالإضافة إلى التحرر من مختلف الإعلانات والتصنيفات. ومع ذلك ، تم إنشاء MatLab بشكل أساسي مع التركيز على الحوسبة تحليل ، في حين تم إنشاء بيثون للمتسللين. ثم ، كانت كل من اللغات قادرة على توسيع قاعدة المستخدمين من خلال تحديث وتوسيع وظائف.

في رأيي ، لا تزال بيثون تعاني من فقر جهازها الرياضي. يحتوي على أشياء صغيرة غير مريحة مثل وجود ** بدلاً من ^ ، يستخدم @ لمضاعفة المصفوفات (تمت إضافته مؤخرًا!) ، وليس الحجم ، ولكن شكل المصفوفة ، والتخزين الموجه للصف ، إلخ. إذا كنت تعتقد أن V.conj (). T @ D ** 3 @ V أكثر أناقة من V ∗ D 3 V ، فمن الأرجح أنك لست على ما يرام مع رأسك. أيضًا ، تبدأ الفهرسة عند 0 (بدلاً من 1). لقد أتيحت لي الفرصة للتعرف على الرأي المعاكس ، ومع ذلك ، في رأيي ، ليست مقنعة للغاية ، من الواضح أن هذا كله مسألة تفضيل شخصي ، موضوع حروب مقدسة على الإنترنت ، حيث يمكنك دائمًا تقديم مثال مرهق لمصلحتك ، ما هو بالضبط بالنسبة لي. يبدو مقنعا ، لأننا بدأنا دائما لعقود من الزمان الفهرسة الرياضية للناقلات والمصفوفات باستخدام 1 ، والعديد من الأكواد الزائفة تستند إلى هذا الافتراض.

بالإضافة إلى بعض الإزعاجات ، أجد نظام Python + NumPy + SciPy مرهقًا وغير متسق ، ومن الأمثلة الجيدة على ذلك أنه على الرغم من التركيز القوي على الكائن ، توجد فئات المصفوفة هناك ، ولا يوصى باستخدامها ، ربما أفسدني MatLab ، لكنني أعتقد أن المصفوفات هي كائن مهم للحفاظ على مفيد والاستخدام النشط. ليست القدرة على استخدام * من أجل إجراء عمليات مختلفة مع المصفوفات والمصفوفات الميزة الرئيسية ل OOP؟ بشكل عام ، هناك العديد من اللحظات المؤسفة في هذا الصدد ، (لماذا أحتاج إلى الأمر spsolve على الإطلاق ؟ لماذا لا يمكنني فقط تطبيق الأمر solution على مصفوفة متفرقة؟ وما زال هناك الكثير من ذلك.)

هناك أيضًا أماكن يبدو فيها النظام البيئي العددي أسوأ قليلاً. على سبيل المثال ، يبدو حلو المربعات و ODE في أضيق الحدود في 2019 بقدر ما أستطيع أن أقول أنه لا توجد طرق لحلول DAE أو DDE أو محلول متزامن أو ضمني يسمح بتكرار Krylov الداخلي. انظر ، هذه الوظائف تستغرق معظمها 30 عامًا أو أكثر - فهي لا تزال جيدة ، لكنها بعيدة عن الكمال. Matplotlib عبارة عن حزمة رائعة للعمل بها ، وفي بعض الحالات بدا الأمر أفضل من MATLAB ، لكني افتقد ثلاثي الأبعاد.

يجادل بعض الخبراء بأن هناك أسبابًا وراء محاولة Python code محاربة السرعة باللغات المترجمة. أنا مندهش من نتيجة البحث " الثعبان بطيء جدًا ". يستشهد أبطال بيثون بالعديد من الحجج / الاعتذارات التي قدمها الناس لماتلاب في ذلك الوقت. هذا لا يعني أنهم مخطئون ، لكنه أكثر من مجرد مشكلة إدراك .

أنا أفهم لماذا كانت بيثون مثيرة للغاية لكثير من الناس في مجال الحوسبة العلمية. أنه يحتوي على بعض بناء الجملة وقوة MATLAB ، وهي متاحة من REPL. لديه أدوات ممتازة ويعمل بشكل جيد مع لغات أخرى ومجالات الحساب. عرضه مجانًا مع إمكانية استنساخ أفضل على المدى الطويل. من الواضح أن هذا يعمل بشكل جيد للعديد من الأشخاص الذين ربما لا يرون سببًا بسيطًا للتغيير.

بسبب ما أعرفه كيف أقوم به في مجال الحوسبة العلمية ، تجبرني بيثون على القيام بعمل روتيني في التعلم والاستخدام أكثر مما اعتدت عليه. لبعض الوقت ، لن نعرف ما إذا كان سيستمر في المجتمع أم أنه قريب بالفعل من ذروته.

جوليا


جوليا لها مزايا وعيوب لأنها متأخرة. أنا معجب بمنشئي جوليا لفهم أنهم يمكنهم فعل المزيد

نريد لغة مفتوحة المصدر مع رخصة مكتبة. نريد سرعة C مع ديناميات روبي. نريد أن تكون اللغة متجانسة ، مع وحدات ماكرو حقيقية مثل Lisp ، ولكن مع رموز رياضية واضحة ومألوفة كما في Matlab. نريد شيئًا قابلاً للبرمجة مثل Python ، وبسيطة بالنسبة للإحصائيات مثل R ، وطبيعية لمعالجة السلسلة مثل Perl ، وأقوى في الجبر الخطي مثل Matlab ، وقادر على صمغ البرامج معًا مثل shell . شيء سهل التعلم ، ولكن في الوقت نفسه يرضي أخطر المتسللين. نريد أن تكون تفاعلية ، ونريد أن يتم تجميعها.

أعتقد أنهم نجحوا إلى حد كبير. قبل إصدار الإصدار 1.0 ، بدا أنها مختلفة قليلاً عن REPL ، وعن MATLAB. (ما مدى دقة LinRange أفضل من linspace؟) على الرغم من أنه nitpicking.

هذه هي اللغة الأولى التي استخدمتها ، مع القدرة على تجاوز ASCII. أحصل على رضا مفرط من استخدام المتغيرات مثل Phi والمشغلين مثل ≈. إنها أكثر من مجرد غلاف جميل. القدرة على أن تبدو أشبه التعبيرات الرياضية التي نكتبها هي ميزة حقيقية ، على الرغم من أنها تعقد عملية التعلم والتوثيق قليلاً.

أظهرت لي وظائف في جوليا أنني اكتسبت بعض مهارات البرمجة بسبب اختيار MATLAB ، وليس بسبب تفوقها المتأصل. إن عملية النقل ليست طبيعية بالنسبة للعديد من الأشياء. تكشف جوليا أنه يمكنك توجيه أي وظيفة عن طريق إضافة فترة إلى اسمها. بناء مصفوفة باستخدام الفهم يجعل الحلقات المتداخلة (أو حيل الشبكة الشبكية) تشبه السياط الخاطئة في المقارنة ، وتجاوز المصفوفة ككل مع مولد للتجميع البسيط يشبه الحصول على شيء مقابل لا شيء. (أعرف أن بيثون لديه ميزات لغوية مماثلة.)

الميزة الكبيرة للإرسال المتعدد تجعل بعض الأشياء أسهل بكثير وأكثر قابلية للفهم من اتجاه الكائن. على سبيل المثال ، لنفترض أن لديك فصول الجدار والكرة بلغة تقليدية موجهة للكائنات ، ما الفئة التي يجب أن تكتشف تصادم الكرة مع الجدار؟ أو هل تحتاج إلى فئة غرفة للعب الحكم؟ مثل هذه الأسئلة يمكن أن يصرفني. مع الجدولة المتعددة ، يتم تجميع البيانات في أنواع الكائنات ، لكن الأساليب التي تعمل مع البيانات ليست مرتبطة بفئة. هكذا
function detect_collision (B :: Ball ، W :: Wall)
يعرف عن الأنواع ، ولكن يتم تحديدها بشكل مستقل عنهم. لقد تطلب الأمر مني الكثير من البرمجة لفهم مدى أهمية مفهوم الإرسال المتعدد والمثير للاهتمام لتوسيع اللغة.

النظام البيئي العددي يتطور بسرعة. مثالي الأول هو DifrentialEquations.jl ، الذي كتبه كريس راكوتسكاس الرائع. إذا لم يفز هذا البرنامج بجائزة ويلكينسون في أي وقت قريب ، فسيتم كسر النظام. اذهبوا إلى الموقع واستعدوا للاستئناف.

لم أر مكاسب السرعة الكبيرة بعد MATLAB التي وعدت بها جوليا. هذا جزئيًا هو قلة خبرتي النسبية ونوع المهام التي أؤديها ، لكن جزئيًا لأن MathWorks قام بعمل مذهل وهو تحسين الكود تلقائيًا. في أي حال ، ليس هذا هو جانب الترميز الذي أركز عليه معظم الوقت.

استغرقت البرمجة في جوليا بعض الوقت لأشعر بالراحة (ربما أتقدم في العمر وأبلور). هذا يجعلني أفكر في أنواع البيانات أكثر مما أرغب ، وهناك دائمًا شك في أنني أخطأت في الطريقة الصحيحة للقيام بشيء ما. ولكن للاستخدام اليومي ، من المرجح أن أنتقل إلى جوليا باسم MATLAB.

يؤدي


MATLAB هو حل مشترك ، يستخدم بشكل رئيسي في حل المشكلات الهندسية. يبقى أبسط أداة لحل المشكلات العددية. وثائق مهمة للغاية وتطوير عشر سنوات للشركة مما لا شك فيه تلعب دورا هاما في هذا.

يشبه MATLAB سيارة السيدان BMW من عالم الحوسبة العلمية. إنه مكلف ، حتى قبل أن تتحدث عن الملحقات (مجموعة أدوات). أنت تدفع مقابل تشغيل وخدمة لا تشوبها شائبة. لكنه يجذب أيضًا قدرًا غير متناسب من الكراهية .

بايثون هي شاحنة بيك آب فورد. إنه منتشر ومحبوب من قبل الكثيرين (في الولايات المتحدة الأمريكية). يمكن أن تفعل ما تريد ، وهي مصممة للقيام بما لا يمكن للسيارات الأخرى. على الأرجح ، سوف ترغب في ذلك بين الحين والآخر. لكن هذا لا يمنحك الكثير من تجربة القيادة.

جوليا هي تسلا. تم بناؤه بهدف جريء وهو تغيير المستقبل ، وهو ممكن. ولكن يمكن أن يكون مجرد ذكر. في نفس الوقت ، سوف تحصل على مكانك الأنيق ، وبكميات كبيرة من القوة.


اقرأ أيضا بلوق
شركة إديسون:


20 مكتبة لل
مذهلة تطبيق دائرة الرقابة الداخلية

Source: https://habr.com/ru/post/ar480716/


All Articles