مقدمة إلى Eigen: ما هو ولماذا تحتاجه
\n\nEigen هي مكتبة عالية الأداء للجبر الخطي بلغة C++. توفر مجموعة واسعة من الإمكانيات للعمل مع المتجهات، المصفوفات، المصفوفات المتناثرة، وكذلك لحل أنظمة المعادلات الخطية، حساب القيم الذاتية والتحليل المفرد. Eigen مكتوب بلغة C++ خالصة (قوالب) ولا يتطلب تبعيات خارجية، مما يجعله خيارًا مثاليًا للأنظمة المدمجة، الحوسبة العلمية، رسومات الحاسوب، التعلم الآلي، والروبوتات.
\n\nلماذا تحتاج Eigen؟ على عكس العديد من المكتبات الأخرى (مثل LAPACK أو BLAS)، تقدم Eigen واجهة برمجة تطبيقات بديهية تشبه العمل مع المصفوفات في MATLAB أو NumPy. تدعم التقييم الكسول (lazy evaluation) والتوجيه المتجهي (SSE، AVX، NEON)، مما يوفر أداءً قريبًا من التحسين اليدوي بلغة التجميع. Eigen متوافقة تمامًا مع معايير C++ الحديثة (C++11 وما فوق) ويتم دعمها بنشاط من قبل المجتمع.
\n\nالإمكانيات الرئيسية:
\n- \n
- العمل مع المصفوفات الكثيفة والمتناثرة بأحجام عشوائية. \n
- العمليات: الجمع، الضرب، التحويل، الانعكاس. \n
- حل الأنظمة الخطية (LU، QR، Cholesky، SVD). \n
- حساب القيم الذاتية والمتجهات الذاتية. \n
- التحويلات الهندسية (الدوران، الكواتيرنيونات). \n
- دعم أنواع البيانات العشوائية (float، double، complex، أنواع مخصصة). \n
تثبيت Eigen
\n\nEigen هي مكتبة تتكون فقط من ملفات الرأس (header-only). هذا يعني أنك لست بحاجة إلى تجميع مكتبة منفصلة - يكفي تضمين ملفات الرأس المطلوبة في مشروعك. يعتمد التثبيت على نظام التشغيل ومدير الحزم.
\n\nالتثبيت عبر مديري الحزم
\n\nلينكس (Ubuntu/Debian):
\nsudo apt-get install libeigen3-dev\n\nmacOS (Homebrew):
\nbrew install eigen\n\nويندوز (vcpkg):
\nvcpkg install eigen3\n\nويندوز (Conan):
\nconan install eigen/3.4.0@\n\nالتثبيت اليدوي (لجميع أنظمة التشغيل)
\n\nقم بتنزيل أحدث إصدار من الموقع الرسمي أو استنسخ المستودع:
\ngit clone https://gitlab.com/libeigen/eigen.git\n\nثم حدد المسار إلى مجلد Eigen في المترجم الخاص بك. على سبيل المثال، لـ g++:
g++ -I /path/to/eigen my_program.cpp -o my_program\n\nملاحظة: إذا كنت تستخدم CMake، أضف في CMakeLists.txt:
find_package(Eigen3 REQUIRED)\ntarget_link_libraries(my_target Eigen3::Eigen)\n\nبداية سريعة مع مثال كود
\n\nلنكتب برنامجًا بسيطًا ينشئ مصفوفة ومتجهًا، ويقوم بالضرب ويعرض النتيجة.
\n\n#include <iostream>\n#include <Eigen/Dense>\n\nint main() {\n // إنشاء مصفوفة 2x2\n Eigen::Matrix2d A;\n A << 1, 2,\n 3, 4;\n\n // إنشاء متجه 2x1\n Eigen::Vector2d b(5, 6);\n\n // ضرب المصفوفة في المتجه\n Eigen::Vector2d x = A * b;\n\n // عرض النتيجة\n std::cout << "A * b =\\n" << x << std::endl;\n\n return 0;\n}\n\nالتجميع والتشغيل:
\ng++ -I /path/to/eigen example.cpp -o example\n./example\n\nالإخراج:
\nA * b =\n17\n39\n\nيوضح هذا المثال مدى سهولة العمل مع Eigen: التركيب يشبه العمليات الرياضية، ويتم تنسيق الإخراج تلقائيًا.
\n\nالطرق والوظائف الأساسية في Eigen
\n\nفيما يلي 10 طرق/وظائف رئيسية في Eigen مع وصف تفصيلي، معاملات، وأمثلة.
\n\n