计算数学精解【9】-prolog计算精解(5)

文章目录

谓词

  • 求列表数之和
get_head([X|T], X,T).
to_sum(L,S):-get_head(L,Head,Tail),S1 is Head+S,nl,to_sum(Tail,S1).
to_sum([],S):- write(S).
?- load('e:/learn/learn.pro').
Correct to: "win_menu:load('e:/learn/learn.pro')"? 
Please answer 'y' or 'n'? yes
true.

?- to_sum([1,2,3,4,5,6],0).






21
true.
  • 求偶数之和

if …else…

?- (Condition -> Goal; otherwise).
get_head([X|T], X,T).
to_sum(L,S):-get_head(L,Head,Tail),(Head mod 2 =:=1 -> Head1 is Head; Head1 is 0),S1 is S+Head1,to_sum(Tail,S1).
to_sum([],S):- write(S).
?- load('e:/learn/learn.pro').
Correct to: "win_menu:load('e:/learn/learn.pro')"? 
Please answer 'y' or 'n'? yes
true.

?- to_sum([1,2,3,4,5,6],0).
9
true.
  • 欧几里得距离(Euclidean distance),也称为欧式距离,是一个在多维空间中衡量两个点之间真实距离的概念。它是以古希腊数学家欧几里得的名字命名,代表了直观上两点之间直线最短的直线距离。

下面内容来自文心一言自动生成
以下是关于欧几里得距离的详细解释:

一、定义

  • 基础定义:欧几里得距离是m维空间中两个点之间的直线距离。在二维和三维空间中,它等同于我们日常生活中所理解的两点之间的直线距离。
  • 向量定义:在向量空间中,欧几里得距离还可以表示为一个点到原点的自然长度,或者两个向量之间的直线距离。

二、公式

  • 二维空间:在二维空间中,欧几里得距离的公式为 d = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} d=(x2x1)2+(y2y1)2 ,其中 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2) 是两个点的坐标。
  • 三维空间:在三维空间中,公式扩展为 d = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 + ( z 2 − z 1 ) 2 d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2 + (z_2 - z_1)^2} d=(x2x1)2+(y2y1)2+(z2z1)2 ,其中 ( x 1 , y 1 , z 1 ) (x_1, y_1, z_1) (x1,y1,z1) ( x 2 , y 2 , z 2 ) (x_2, y_2, z_2) (x2,y2,z2) 是两个点的坐标。
  • n维空间:对于更一般的n维空间,欧几里得距离的公式为 d = ∑ i = 1 n ( x i 2 − x i 1 ) 2 d = \sqrt{\sum_{i=1}^{n} (x_{i2} - x_{i1})^2} d=i=1n(xi2xi1)2 ,其中 x i 1 x_{i1} xi1 x i 2 x_{i2} xi2 分别是两个点在第i维上的坐标。

三、应用场景

欧几里得距离因其直观性和易于计算的特点,在多个领域有广泛的应用:

  • 地理空间分析:用于计算地球表面上两点之间的距离。
  • 机器学习:在多维特征空间中计算样本之间的距离,用于聚类、分类、降维等任务。
  • 物理学:计算物体在三维空间中的移动距离。
  • 图形学:计算图形中两点之间的距离,用于图形渲染、碰撞检测等。

四、注意事项

  • 在使用欧几里得距离时,需要注意数据的标准化或归一化处理,以避免不同量纲对距离计算的影响。
  • 在某些特定场景下,如文本相似度计算等,欧几里得距离可能不是最优选择,此时可以考虑使用余弦相似度等其他度量方法。

综上所述,欧几里得距离是一种在多维空间中衡量两个点之间真实距离的有效工具,具有广泛的应用场景和重要的实践价值。

distance(X1,X2,Y1,Y2,Result):-pow(X2-X1,2,D1),pow(Y2-Y1,2,D2),D is D1+D2,sqrt(D,Result).
?- load('e:/learn/learn.pro').
Correct to: "win_menu:load('e:/learn/learn.pro')"? 
Please answer 'y' or 'n'? yes
true.

?- distance(1,-5,9,20,D).
D = 12.529964086141668.

参考文献

1.https://gprolog.org/
2.https://www.swi-prolog.org/
3.文心一言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值