我能够编写一个使用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
等,作为浮点数。我该怎么做呢?我根本就不知道语法。
答案 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个元素。