用Octave计算两点的欧氏距离

玩了一下新潮的计算软件ORCA(话说这主页有点蹩脚),等它算的过程中突然有点不确了:我的输入文件用的单位是不是Å?懒得去对了,我直接把输入文件里相邻两个碳原子间的距离算出来,看和键长是否一样不就知道了。

嗯,现在问题转化为计算两个点的欧氏距离了,因为有一个打开的Octave,工具就是Octave了。我首先写成这个样子:

1
C1 = [2.72700 4.54400 6.53900]; C2 = [2.00400 4.25100 5.43400]; sum((C1 - C2).^2)^0.5

太蹩脚。搜一下,发现有人问过了,别人给答案是:

1
C1 = [2.72700 4.54400 6.53900]; C2 = [2.00400 4.25100 5.43400]; norm(C1 - C2, 2)

嗯,不错。这个问题下面有人回复“STFW”,于是我也搜了一下,发现Matlab网站上给的几种写法:

1
2
3
4
5
6
7
8
9
10
11
C1 = [2.72700 4.54400 6.53900]; C2 = [2.00400 4.25100 5.43400];
#1
sqrt(sum((C1 - C2) .^ 2))
#2
V = C1 - C2;
sqrt(V * V')
#3
norm(C1 - C2)

第二种是新的,没学过线代不知道原理。

😢写了这么多才算了一轮,DLPNO-CCSD还是好慢啊。