0

MATLAB プログラムを 6 時間近く実行していますが、まだ完全ではありません。3 つの while ループを循環しています (外側の 2 つのループは n=855、内側のループは n=500)。こんなに時間がかかるのは驚きですか?速度を上げるために何かできることはありますか?以下のコードと、その下の変数データ型を含めています。

  while i < (numAtoms + 1)
      pointAccessible = ones(numPoints,1);
      j = 1;
      while j <(numAtoms + 1)
          if (i ~= j)
              k=1;
              while k < (numPoints + 1)
                  if (pointAccessible(k) == 1)
                      sphereCoord = [cell2mat(atomX(i)) + p + sphereX(k), cell2mat(atomY(i)) + p + sphereY(k), cell2mat(atomZ(i)) + p + sphereZ(k)];
                      neighborCoord = [cell2mat(atomX(j)), cell2mat(atomY(j)), cell2mat(atomZ(j))];
                      coords(1,:) = [sphereCoord];
                      coords(2,:) = [neighborCoord];
                      if (pdist(coords) < (atomRadius(j) + p))
                          pointAccessible(k)=0;
                      end
                  end
                  k = k + 1;
              end
          end
          j = j+1;
      end
      remainingPoints(i) = sum(pointAccessible);
      i = i +1;
  end

変数のデータ型:

  numAtoms = 855
  numPoints = 500
  p = 1.4
  atomRadius = <855 * 1 double>
  pointAccessible = <500 * 1 double>
  atomX, atomY, atomZ = <1 * 855 cell>
  sphereX, sphereY, sphereZ = <500 * 1 double>
  remainingPoints = <855 * 1 double>
4

0 に答える 0