如何在C ++ Octave API中访问特征向量和特征向量列表的内容?

时间:2013-09-04 00:00:53

标签: c++ octave

我能够编写一个使用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)

从这里,我想访问这些特征值-5.46156e-18等,以及特征向量值-0.18545等,作为浮点数。我该怎么做呢?我根本就不知道语法。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我承认我从来没有使用过C ++ Octave API,但是看一下文档,看起来他们重载()来匹配Octave / MATLAB语法,这很酷。 (而且有点可怕,老实说)

对于矩阵,行或列'x',x(i, j)将给出第i行和第j列中的元素。 (请注意,这是零索引,不像你使用的是MATLAB或Octave本身,它是一个索引的)

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