Вычисление собственных векторов в C # с использованием Advanced Matrix Library в C #. СЕТЬ - PullRequest
4 голосов
/ 09 декабря 2010

Хорошо, ребята, я использую следующую библиотеку: http://www.codeproject.com/KB/recipes/AdvancedMatrixLibrary.aspx

И я хочу вычислить собственные векторы некоторых матриц, которые у меня есть. Я не знаю, как сформулировать код.

Пока я пытался:

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 #.

Любая помощь была бы фантастической!

Ответы [ 2 ]

6 голосов
/ 09 декабря 2010

Глядя на библиотеку, сигнатура метода Эйгена выглядит так:

public static void Eigen(Matrix Mat, out Matrix d,out Matrix v)

Есть несколько ошибок:

  1. Обратите внимание на ключевое слово out рядом с параметрами d и v. Вам нужно добавить ключевое слово out в вызов Eigen.

  2. Код ожидает матрицу в качестве первого аргумента при отправке элемента. Таким образом, MatrixName[n, n] необходимо изменить на MatrixName.

  3. Вам не нужно создавать экземпляр вектора и матрицы значений, поскольку метод Eigen сделает это за вас и вернет значения в двух аргументах, которые вы отправите, благодаря ключевому слову out. Также следует отметить, что вы получите следующий вывод:

    • значения будут представлять собой матрицу [n + 1,1]

    • вектор будет матрицей [n + 1, n + 1]

Не так как Matrix (n, 0), как вы ожидаете от исходного кода.

Код будет выглядеть так:

Matrix MatrixName = new Matrix(n, n);
Matrix vector;
Matrix values;

Matrix.Eigen(MatrixName, out values, out vector);
5 голосов
/ 09 декабря 2010

Ваш код должен выглядеть следующим образом:

Matrix MatrixName = new Matrix(n, n);
Matrix vector;
Matrix values;

Matrix.Eigen(MatrixName, out values, out vector);

C # out ключевое слово означает, что метод Eigen создаст объект для вас, поэтому вы не должны делать это new Matrix(n, 0);

...