حساب eigenvectors في C# باستخدام مكتبة المصفوفة المتقدمة في C#. صافي
-
25-09-2019 - |
سؤال
حسنًا يا شباب ، أنا أستخدم المكتبة التالية: http://www.codeproject.com/kb/recipes/advancedMatrixLibrary.aspx
وأود أن أحسب eigenvectors لبعض المصفوفات التي لدي. لا أعرف كيفية صياغة الكود.
حتى الآن حاولت:
Matrix MatrixName = new Matrix(n, n);
Matrix vector = new Matrix(n, 0);
Matrix values = new Matrix(n, 0);
Matrix.Eigen(MatrixName[n, n], values, vector);
ومع ذلك ، فإنه يقول أن أفضل طريقة تم تحميلها بشكل زائد تحتوي على بعض الوسائط غير صالحة. أعلم أن المكتبة تعمل ولكني لا أعرف كيفية صياغة رمز C# الخاص بي.
أي مساعدة سيكون رائعا!
المحلول
بالنظر إلى المكتبة ، يبدو توقيع طريقة eigen مثل هذا:
public static void Eigen(Matrix Mat, out Matrix d,out Matrix v)
هناك بعض الأخطاء:
لاحظ ال
out
الكلمة الرئيسية بجانب المعلمات D و V. تحتاج إلى إضافة الكلمة الرئيسية الخارجية إلى المكالمة إلى Eigen.يتوقع الرمز مصفوفة كوسيطة أولى ، بينما ترسل عنصرًا. هكذا،
MatrixName[n, n]
يحتاج إلى التغيير إلىMatrixName
.لا تحتاج إلى إنشاء مثيل للمتجه والقيم المصفوفات ، لأن طريقة EIGEN تقوم بذلك نيابة عنك وستعود القيم في الوسيطتين اللتين ترسلهما بفضل الكلمة الرئيسية الخارجية. شيء واحد يجب ملاحظته أيضًا هو أنك ستتلقى الإخراج على النحو التالي:
ستكون القيم مصفوفة [N+1،1
ستكون المتجه مصفوفة [n+1 ، n+1
ليس كمصفوفة (ن ، 0) كما تتوقع من الكود الأولي الخاص بك.
سيبدو الرمز هكذا:
Matrix MatrixName = new Matrix(n, n);
Matrix vector;
Matrix values;
Matrix.Eigen(MatrixName, out values, out vector);
نصائح أخرى
يجب أن تبدو الرمز هكذا:
Matrix MatrixName = new Matrix(n, n);
Matrix vector;
Matrix values;
Matrix.Eigen(MatrixName, out values, out vector);
ج# out
الكلمة الرئيسية تعني تلك الطريقة Eigen
سيتم إنشاء كائن لك ، لذلك يجب ألا تفعل هذا new Matrix(n, 0);