Eigen لـ C++: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة إلى Eigen: ما هو ولماذا تحتاجه

\n\n

Eigen هي مكتبة عالية الأداء للجبر الخطي بلغة 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
\n\n

تثبيت Eigen

\n\n

Eigen هي مكتبة تتكون فقط من ملفات الرأس (header-only). هذا يعني أنك لست بحاجة إلى تجميع مكتبة منفصلة - يكفي تضمين ملفات الرأس المطلوبة في مشروعك. يعتمد التثبيت على نظام التشغيل ومدير الحزم.

\n\n

التثبيت عبر مديري الحزم

\n\n

لينكس (Ubuntu/Debian):

\n
sudo apt-get install libeigen3-dev
\n\n

macOS (Homebrew):

\n
brew install eigen
\n\n

ويندوز (vcpkg):

\n
vcpkg install eigen3
\n\n

ويندوز (Conan):

\n
conan install eigen/3.4.0@
\n\n

التثبيت اليدوي (لجميع أنظمة التشغيل)

\n\n

قم بتنزيل أحدث إصدار من الموقع الرسمي أو استنسخ المستودع:

\n
git clone https://gitlab.com/libeigen/eigen.git
\n\n

ثم حدد المسار إلى مجلد Eigen في المترجم الخاص بك. على سبيل المثال، لـ g++:

\n
g++ -I /path/to/eigen my_program.cpp -o my_program
\n\n

ملاحظة: إذا كنت تستخدم CMake، أضف في CMakeLists.txt:

\n
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

التجميع والتشغيل:

\n
g++ -I /path/to/eigen example.cpp -o example\n./example
\n\n

الإخراج:

\n
A * b =\n17\n39
\n\n

يوضح هذا المثال مدى سهولة العمل مع Eigen: التركيب يشبه العمليات الرياضية، ويتم تنسيق الإخراج تلقائيًا.

\n\n

الطرق والوظائف الأساسية في Eigen

\n\n

فيما يلي 10 طرق/وظائف رئيسية في Eigen مع وصف تفصيلي، معاملات، وأمثلة.

\n\n

1.

توصيات