Cpp Eigen3計算能帶程式

2021-10-13 15:25:13 字數 1491 閱讀 6029

這是c++加eigen3實現的計算能帶程式,在不優化的情況下,速度沒有matlab快,甚至沒有python+numpy快,但是後面會有比較多的for迴圈,以及通過優化後,速度會大大提公升。另外需要搭配乙個python的畫圖程式。

測試需要加上編譯器-o3優化:

g++ -std=c++11 -o3 .\hatree-fork.cpp -o main
#include #include #include #include #include #include #include "../eigen3/eigen/dense"

#define eigen_use_mkl_all

#define eigen_vectorize_sse4_2

const double pi = acos(-1);

const double t = -1; // 最近鄰hopping

const int n = 64; // y方向寬度

// linspace函式

std::vectorlinspace(const double min, const double max, const int n)

result.insert(result.begin() + iterator, max);

return result;

}eigen::matrixxcd hamiltonian0(const double k)

return h;

}void test_band(std::vector& ks){

/*輸出檔案格式如下: 每一行第一列為k值,後面為對應的能量

*/std::ofstream out("ek.txt");

int kn = ks.size();

out//if (eigensolver.info() != eigen::success) abort();

out << k << " ";

for(int i = 0;i<2*n;i++){

out 《畫圖程式

import matplotlib.pyplot as plt

import numpy as np

f = open("ek.txt","r")

data =

n = int(f.readline())

for i in range(n):

line = f.readline()

data = np.matrix(data)

k = data[:,0]

ek = data[:,1:]

n, m = ek.shape

for i in range(m):

plt.plot(k,ek[:,i])

plt.show()

f.close()

鋸齒石墨烯能帶matlab計算程式

這個程式是初步優化後的matlab版本,主要思路是先生成體系的格點座標,再運用座標生成體系的哈密頓量,然後進行對角化計算能帶,能帶的計算使用一維體系超原胞的處理方法。可以進一步優化 主程式nx 3 ny 100 體系寬度 y方向的長度 x,y zigzag graphene nx,ny plot x...

C C 經典程式訓練3 模擬計算器

時間限制 1000毫秒記憶體限制 8192 kib 提交統計討論 問題描述 簡單計算器模擬 輸入兩個整數和乙個運算子,輸出運算結果。輸入第一行輸入兩個整數,用空格分開 第二行輸入乙個運算子 所有運算均為整數運算,保證除數不包含0。產量輸出對兩個數運算後的結果。樣本輸入 樣本輸出 注意 1 patho...

服務計算3 開發 Linux 命令列實用程式

本次作業參考潘老師的部落格 github傳送門 命令列實用程式開發基礎 本次作業主要是編寫乙個命令列程式,處理標準輸入或者文字檔案。程式的要求主要參考 對於命令列程式,首先要做的就是解析命令列傳入的引數,例如執行程式 selpag s 1 e 1 input.txt對於這個命令,我們這個程式應該要至...