fork download
  1. #include<iostream>
  2. #include<cmath>
  3. #include<fstream>
  4.  
  5. double U_K(double K,double a,double u);
  6.  
  7. using namespace std;
  8. int main()
  9. {
  10. cout<<"Enter set of possible lattice vector's i.e., 'N' & 'U'\t:\t"<<endl;
  11. int N ; double u ;
  12. cin>>N>>u;
  13. double a = 1;
  14. double K[2*N+1];
  15.  
  16. int j=0;
  17. //assigning value to 'K' i.e., lattice vectors (-N to N)
  18. for(int i = -N; i <=N ; i++)
  19. {
  20. K[j] = (2*3.14*i)/a;
  21. j++;
  22. }
  23.  
  24. int r = 2*N+1, c = 2*N+1;
  25. double mat[r][c],k=0;
  26.  
  27. ofstream ofs("data_cmp_U-2_N_3.txt");
  28. //varying wave-vector i.e., "k"
  29. for(double k = (-3.14)/a ; k < (3.14/a) ; k += 0.1)
  30. {
  31. for(int i=0; i < r ; i++)
  32. {
  33. for(int j=0; j < c ; j++)
  34. {
  35. if (i == j) mat[i][j] = (0.5)*pow((k - K[i]),2);
  36. else mat[i][j] = U_K(K[j] - K[i],a,u);
  37. }
  38. }
  39.  
  40. double ftr;
  41. //digonalizing matrix to find energy eigen-values
  42. for(int i=0;i<r;i++)
  43. {
  44. ftr =0;
  45. for(int j=0 ; j<c ;j++)
  46. {
  47. if(i>j)
  48. {
  49. ftr = mat[i][j]/mat[j][j];
  50. for( int k=0; k<c;k++)
  51. {
  52. mat[i][k] -= ftr*mat[j][k];
  53. }
  54. }
  55.  
  56. }
  57. }
  58.  
  59. for(int i=r-1;i>=0;i--)
  60. {
  61. ftr =0;
  62. for(int j=c-1 ; j>=0 ;j--)
  63. {
  64. if(i<j)
  65. {
  66. ftr = mat[i][j]/mat[j][j];
  67. for( int k=0; k<c;k++)
  68. {
  69. mat[i][k] -= ftr*mat[j][k];
  70. }
  71. }
  72. }
  73.  
  74. }
  75. ofs<<k<<"\t\t";
  76. for(int i =0 ; i< r;i++)
  77. {
  78. for(int j =0 ; j < c ; j++)
  79. {
  80. if(i == j) ofs<<mat[i][j]<<"\t\t";
  81. }
  82. }
  83. ofs<<endl;
  84. }
  85.  
  86.  
  87. return 0;
  88. }
  89.  
  90. double U_K(double K,double a,double u)
  91. {
  92. return u*exp(-K)/a;
  93. }
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
Enter set of possible lattice vector's i.e., 'N' & 'U'	: