1

我可以编写一个程序,使用 C++ Octave API 来查找矩阵的特征向量。这是一个例子:

#include <iostream>
#include <octave/oct.h>
using namespace std;

int main() {
  int n=5;
  Matrix L=Matrix(n,n,2);

  EIG eig=EIG(L);

  cout << eig.eigenvalues() << endl;
  cout << eig.eigenvectors() << endl;

  return 0;
}

返回

(-5.46156e-18,0)
(-3.1176e-32,0)
(-4.86443e-49,0)
(3.38528e-16,0)
(10,0)

 (-0.18545,0) (-0.408248,0) (0.707107,0) (-0.31455,0) (0.447214,0)
 (-0.18545,0) (-0.408248,0) (-0.707107,0) (-0.31455,0) (0.447214,0)
 (-0.18545,0) (0.816497,0) (-6.72931e-17,0) (-0.31455,0) (0.447214,0)
 (-0.330948,0) (3.24211e-16,0) (-2.34737e-17,0) (0.830948,0) (0.447214,0)
 (0.887298,0) (-1.07469e-15,0) (-6.0809e-33,0) (0.112702,0) (0.447214,0)

从这里,我想以浮点数的形式访问这些 eigenvalues-5.46156e-18等,以及 eigenvector values-0.18545等。我该怎么做呢?我根本不知道语法。

4

2 回答 2

1

感谢 WhozCraig 的提示和链接,我找到了语法:

#include <iostream>
#include <octave/oct.h>
using namespace std;

int main() {
  int n=5;
  Matrix L=Matrix(n,n,2);

  EIG eig=EIG(L);

  cout << eig.eigenvalues() << endl;
  cout << eig.eigenvalues().elem(0).real() << endl;
  cout << eig.eigenvalues().elem(1).real() << endl;
  cout << eig.eigenvalues().elem(2).real() << endl;
  cout << eig.eigenvalues().elem(3).real() << endl;
  cout << eig.eigenvalues().elem(4).real() << endl;
  cout << endl;

  cout << eig.eigenvectors() << endl;
  cout << eig.eigenvectors().elem(0).real() << endl;
  cout << eig.eigenvectors().elem(1).real() << endl;
  cout << eig.eigenvectors().elem(2).real() << endl;
  cout << eig.eigenvectors().elem(3).real() << endl;
  cout << eig.eigenvectors().elem(4).real() << endl;

  return 0;
}

哪个输出

(-5.46156e-18,0)
(-3.1176e-32,0)
(-4.86443e-49,0)
(3.38528e-16,0)
(10,0)

-5.46156e-18
-3.1176e-32
-4.86443e-49
3.38528e-16
10

 (-0.18545,0) (-0.408248,0) (0.707107,0) (-0.31455,0) (0.447214,0)
 (-0.18545,0) (-0.408248,0) (-0.707107,0) (-0.31455,0) (0.447214,0)
 (-0.18545,0) (0.816497,0) (-6.72931e-17,0) (-0.31455,0) (0.447214,0)
 (-0.330948,0) (3.24211e-16,0) (-2.34737e-17,0) (0.830948,0) (0.447214,0)
 (0.887298,0) (-1.07469e-15,0) (-6.0809e-33,0) (0.112702,0) (0.447214,0)

-0.18545
-0.18545
-0.18545
-0.330948
0.887298
于 2013-09-04T00:19:07.560 回答
1

我承认我从未使用过 C++ Octave API,但查看文档,看起来它们重载 () 以匹配 Octave/MATLAB 语法,这非常酷。(老实说,有点可怕)

对于矩阵,行或列“x”x(i, j)将给出第 i 行和第 j 列中的元素。(请注意,这是零索引的,与您使用 MATLAB 或 Octave 本身不同,后者是一索引的)

对于行或列,您可以省略不必要的维度,因此x(n)将返回行或列的第 n 个元素。

于 2013-09-04T00:26:22.617 回答