#include <Origin.h> //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// // Include your own header files here. #define NMAX1 4 #define TDA1 NMAX1 #define TDV1 NMAX1 void real_symmetric_matrix_eigenproblem() { Integer i, j, n; double a[NMAX1*TDA1], r[NMAX1], v[NMAX1*TDV1]; n = 4; // assume that NMAX1 is larger than n matrix mx = {{0.5,0.0,2.3,-2.6},{0.0,0.5,-1.4,-0.7},{2.3,-1.4,0.5,0.0},{ -2.6,-0.7,0.0,0.5}}; //f02abc(n, (double *)a, (Integer)TDA1, r, (double *)v, (Integer)TDV1, //NAGERR_DEFAULT); f02abc(n, (double *)mx, n, r, (double *)v, n, NAGERR_DEFAULT); printf("Eigenvalues\n"); for (i=0; i<n; i++) printf("%9.4f ", r[i]); printf("\n"); printf("Eigenvectors\n"); for ( i=0; i<n; i++) { for (j=0; j<n; j++) printf("%9.4f ", v[i*n+j]); printf("\n"); } }
#include <Origin.h> //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// // Include your own header files here. #include <OC_nag.h> #define NMAX2 10 #define TDA2 NMAX2 #define TDV2 NMAX2 void real_symmetric_matrix_eigenproblem_ex2() { Integer i, j, n; double r[NMAX2], v[NMAX2*TDV2]; // get input matrix data from a matrix layer MatrixLayer ml = Project.ActiveLayer(); Matrix mData(ml);// Get the active Matrix from a MatrixLayer n = mData.GetNumRows(); // assume that NMAX is larger than n ASSERT(mData.GetNumRows()==GetNumCols()); f02abc(n, (double *)mData, n, r, (double *)v, n, NAGERR_DEFAULT); printf("Eigenvalues\n"); for (i=0; i<n; i++) printf("%9.4f ", r[i]); printf("\n"); printf("Eigenvectors\n"); for ( i=0; i<n; i++) { for (j=0; j<n; j++) printf("%9.4f ", v[i*n+j]); printf("\n"); } }
#include <Origin.h> //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// // Include your own header files here. #include <OC_nag.h> void general_real_matrix_eigenproblem() { Integer i, j, n; // for a general real matrix, its eigenvalues and eigenvector may be complex // so use complex matrix to store the result matrix<complex> r, v; r.SetSize(1,4); v.SetSize(4,4); Integer iter[4]; matrix a = {{1.5,0.1,4.5,-1.5},{-22.5,3.5,12.5,-2.5},{-2.5,0.3,4.5,-2.5},{-2.5,0.1,4.5,2.5}}; n = 4; f02agc(n, a, n, r, v, n, iter, NAGERR_DEFAULT); printf("Eigenvalues\n"); for (i=0; i<n; i++) { complex temp = r[0][i]; printf("(%7.3f, %7.3f) \n", temp.m_re, temp.m_im); } printf("\nEigenvectors\n"); for (i=0; i<n; i++) for (j=0; j<n; j++) { complex temp = v[i][j]; printf("(%7.3f, %7.3f)", temp.m_re, temp.m_im); if(j%4==3 || j==n-1) printf("\n"); } }