#include <numeric.h> #define N 5 int main() { array double a[5][5] = {2, 30, 100, 1000, 10000, 0.3, 1, 10, 100, 1000, 0.04, 0.1, 1, 10, 100, 0.001, 0.01, 0.1, 1, 10, 0.0002, 0.003, 0.01, 0.1, 1}; array double evalues[N]; array double evectors[N][N]; array double *v, vv[N][N]; int i, status; eigen(a, evalues, evectors); printf("eigennvalues of a =\n%e\n", evalues); printf("eigenvectors of a =\n%e\n", evectors); eigen(a, evalues, evectors, "nobalance"); printf("no balance: eigennvalues of a =\n%e\n", evalues); printf("no balance: eigenvectors of a =\n%e\n", evectors); vv = transpose(evectors); for(i=0; i<N; i++) { v = (array double [:])(double [N])&vv[i][0]; printf("A*v-evalues[i]*v = %f\n", a*v-evalues[i]*v); } }
eigennvalues of a = 7.327477e+00 -1.508424e+00 1.809473e-01 -1.555781e-15 2.032652e-16 eigenvectors of a = -9.959858e-01 -9.945522e-01 -9.966546e-01 -7.564396e-14 4.879875e-14 -8.892060e-02 1.028639e-01 -5.396722e-02 -9.891903e-15 -2.815928e-14 -1.025131e-02 1.687971e-02 -6.047655e-02 9.948856e-01 8.268104e-01 -6.173564e-04 -2.900250e-04 1.047629e-02 -1.010080e-01 5.588107e-01 -9.959858e-05 -9.945522e-05 -9.966546e-05 1.519397e-04 -6.414918e-02 no balance: eigennvalues of a = 7.327477e+00 1.809473e-01 -1.508424e+00 1.227397e-15 -4.649855e-16 no balance: eigenvectors of a = 9.959858e-01 9.966546e-01 -9.945522e-01 1.586027e-13 -2.911653e-16 8.892060e-02 5.396722e-02 1.028639e-01 2.746367e-15 -1.029631e-14 1.025131e-02 6.047655e-02 1.687971e-02 9.842796e-01 9.714797e-01 6.173564e-04 -1.047629e-02 -2.900250e-04 -1.764452e-01 -2.367118e-01 9.959858e-05 9.966546e-05 -9.945522e-05 7.801720e-03 1.395638e-02 A*v-evalues[i]*v = -0.000000 0.000000 0.000000 0.000000 -0.000000 A*v-evalues[i]*v = 0.000000 0.000000 0.000000 0.000000 -0.000000 A*v-evalues[i]*v = 0.000000 0.000000 0.000000 0.000000 0.000000 A*v-evalues[i]*v = 0.000000 0.000000 0.000000 0.000000 0.000000 A*v-evalues[i]*v = -0.000000 0.000000 0.000000 0.000000 -0.000000