for-loop - 如何使用“For-Loop”优化我的代码?
问题描述
我正在尝试开发一种代码来计算材料中电子状态的局部密度。为此,我使用了多个 for 循环和多个表。完成需要 45 秒,我需要更少的时间。任何关于如何优化此代码的建议。
AbsoluteTiming[Ns=2; \[Eta] = 0.001;
Nx=15;
Ny=15;
NN=Nx*Ny;
Nband=8;
kkmx = Ns*Nx;
kkmy = Ns*Ny;
wmax = 0.2; nw = 800; p = 0;
Print["starting ldos calc"];
nsite = 2;
ldos = 0;
For[kx = 0, kx <= (Ns - 1.)*2*(Pi/kkmx), kx += 2*(Pi/kkmx),
For[ky = 0, ky <= (Ns - 1.)*2*(Pi/kkmy), ky += 2*(Pi/kkmy),
ES = Eigensystem[H];
elist = Table[ES[[1,l]], {l, 1, Nband/2*4*NN}];
ulist = Table[Abs[ES[[2,l,i]]]^2, {l, 1, Nband/2*4*NN}, {i, 388+1, 388+(nsite - 1)*Nband/2 + Nband/2}];
vlist = Table[Abs[ES[[2,l,i + Nband/2*NN*2]]]^2, {l, 1, Nband/2*4*NN}, {i, 388+1, 388+(nsite - 1)*Nband/2 + Nband/2}];
ldossc = Table[Im[Total[Table[ulist[[l,1 ;; All]]*(1/(-wmax + wmax*2*(w/nw) - elist[[l]] + I*\[Eta])) +
vlist[[l,1 ;; All]]*(1/(-wmax + 2*wmax*(w/nw) + elist[[l]] + I*\[Eta])), {l, 1, Nband/2*4*NN}]]], {w, 0, nw}]; ldos = ldos + ldossc;
Export["ldosorb_up_P.dat", Table[{-wmax + wmax*2*(\[Omega]/nw), (-Pi^(-1))*(ldos[[\[Omega] + 1,i]]/Ns^2)}, {\[Omega], 0, nw}, {i, 1,8}]];
(* Export["ldostot.dat", Table[{-wmax + wmax*2*(\[Omega]/nw), (-Pi^(-1))*((ldos[[\[Omega] + 1,i]] + ldos[[\[Omega] + 1,i + 1]] + ldos[[\[Omega] + 1,i + 2]] + ldos[[\[Omega] + 1,i + 3]] + ldos[[\[Omega] + 1,i + 4]])/Ns^2)}, {\[Omega], 0, nw}, {i, 1, (nsite - 1)*Nband/2 + Nband/2 - 4}]]; *)
Print["kx=", kx, " ky=", ky, " nsx=", (kx/(2*Pi))*kkmx + 1.]; ]; ]; ]```
解决方案
推荐阅读
- javascript - React、Axios、Bluebird - CancelToken 显示警告:在处理程序中创建了一个承诺,但未返回
- domain-driven-design - 如何命名一个事件来描述事件源系统中实体存在的确认?
- javascript - Material-ui 抛出一个 Element 类型无效
我很难使用material-ui Table(我在以前的项目中使用过数十次)。
我目前正在使用
@material-ui/core@3.5.1
,我也尝试使用@3.2.0
and@3.6.0
。我也在使用
react@16.3.2
和react-dom@16.2.0
- c# - 子类化 Microsoft.Exchange.WebServices.Data.Item
- odoo - 如何在 odoo 搜索视图中添加域过滤器?
- java - Java并发-线程池-多个请求和用户
- php - 肥皂数组中的PHP变量
- vba - 用于设置图像布局和大小的 Word 宏
- python - 由于新的应用程序执行,Python 操作系统命令不起作用
- javascript - 提交表单,刷新页面前显示div