我写了一小段代码,它从几个数组中提取数据,这些数组是由教授发送的一段代码创建的。目标是在工作区中获取键序参数bR,并与粒子的位置配对。从这里我对所有其他粒子做同样的事情,并将键阶相乘,同时计算两个粒子之间的距离,位置取自中心阵列。第二个嵌套的 for 循环对所有粒子对的输出进行平均,粒子之间的距离相同,这为我提供了特定解决方案的空间相关函数。我遇到的问题是我应该有一些类似的东西:
(n 是粒子数),
完全不同的粒子对(顺序无关紧要),但我只得到 n。这导致当我应该有几千个我可以绘制的时候,我只能得到一个总输出。我以前的编码经验是在 c/c++ 中,我担心我编写了一些不能转换为 Matlab 的 c 风格的东西。如果有人可以给我一个健全的检查或一些更好的编码建议,我将不胜感激。
load('Psi6Data'); %%pulls data from bond order six movie
neighbor_distance = 0;
desire = 0;
sz = size(centers,1)*(size(centers,1)-1)/2;
array = double.empty;
array2 = double.empty;
for j = 1:size(centers,1) %%finds Psi6_a * Psi6_b as well as the distance between the two particles
for p = (j+1):size(centers,1)
neighbor_distance = sqrt((centers(p,1)-centers(j,1))^2/(centers(p,2)-centers(j,2))^2);
desire = bR(1,j) * bR(1,p);
array(j) = desire;
array2(j) = neighbor_distance;
end
end
sz2 = size(array);
output = double.empty;
numerator = 0;
denominator = 0;
tempr = 0;
for k = 1:sz2 %% averaging to find g6r from each different instance of particle difference
tempr = array2(k);
output(k,2) = tempr;
for n = 1:sz2
if(array2(n) == tempr)
numerator = numerator + array(n);
denominator = denominator + 1;
end
end
output(k,1) = numerator/denominator;
end