Golang 程序用于查找两个向量的点积

go programmingserver side programmingprogramming

点积是衡量两个向量在指向方向上对齐程度的指标。两个向量的点积是线性代数中的一个基本运算,用于计算两个向量中对应元素的乘积之和。在本文中,我们将编写一个 Golang 程序,使用循环以及 Go 语言的 range 关键字来查找两个向量的点积。

解释

两个向量的点积由以下公式计算:


点积 = A⋅B =Ax ⋅Bx +Ay ⋅By +Az ⋅Bz

假设我们有两个向量 A 和 B,其中 A = (1,2,3) 和 B = (4,5,6),那么两个向量的点积将通过 A.B = (1.4 + 2.5 + 3.6) = 32 计算

算法

  • 首先定义一个名为 dotProduct 的函数,该函数接受两个向量参数:vector1和 vector2。

  • 检查 vector1 和 vector2 的长度是否相等。如果不相等,则引发 panic 或根据您想要的方法处理错误。点积仅针对相同长度的向量定义。

  • 将名为 dotProduct 的变量初始化为 0。此变量将存储两个向量中相应元素乘积的累积和。

  • 从 0 到 vector1 的长度遍历每个索引 i。在循环内部,计算向量的相应元素 vector1[i] 和 vector2[i] 的乘积。

  • 将计算出的乘积添加到 dotProduct 变量。循环完成后,返回存储在 dotProduct 变量中的值作为结果。

语法


func dotProduct(vector1 []int, vector2 []int) int

此处名为"dotProduct"的函数接受两个参数:"vector1"和"vector2",均为 [int] 类型。它返回一个数字,该数字是两个向量的点积。

示例 1

在此示例中,我们将通过使用循环遍历所有向量并编写 golang 程序来查找两个向量的点积来实现此目的。我们将创建一个名为"dotProduct"的函数,该函数将两个向量作为输入,并返回这些向量的"点积"作为数字。首先,我们检查两个向量的长度是否相同。如果不是,我们会发送一条警告消息,表示向量的长度必须相同。然后我们设置一个名为 dotProduct 的变量来保存答案。我们使用 for 循环遍历向量的每个部分。在每个步骤中,我们将向量中相互对应的部分相乘,并将乘积添加到 dotProduct 变量中。


package main
import (
   "fmt"
)
func dotProduct(vec1 []int, vec2 []int) int {
   if len(vec1) != len(vec2) {
      panic("Vector should have same lenghth")
   }
   dotProduct := 0
   for i := 0; i < len(vec1); i++ {
      dotProduct += vec1[i] * vec2[i]
   }
   return dotProduct
}
 
func main() {
   vec1 := []int{1, 2, 3}
   vec2 := []int{4, 5, 6}
   dotProduct := dotProduct(vec1, vec2)
   fmt.Println("点积为:", dotProduct)
}

输出

点积为:32

示例 2

在此示例中,我们将使用 range 函数遍历一个向量的元素,同时获取另一个向量的等价元素,并编写一个 Golang 程序来查找两个向量的点积,我们使用 range 函数遍历向量 1 的元素,并将每个元素的数量和值分别存储在 i 和 v 变量中。然后,我们可以使用 i 在向量 2 中找到匹配的元素并将它们相乘。该值被放入名为"dotProduct"的属性中。


package main
import (
   "fmt"
)
func dotProduct(vector1 []int, vector2 []int) int {
   if len(vector1) != len(vector2) {  
      panic("Vectors should have same length")
   }
   dotProduct := 0
   for i, v := range vector1 {
      dotProduct += v * vector2[i]
   } 
   return dotProduct
}
func main() {
   vector1 := []int{1, 2, 3}
   vector2 := []int{4, 5, 6}
   dotProduct := dotProduct(vector1, vector2)
   fmt.Println("两个向量的点积为:", dotProduct)
}

输出

两个向量的点积为:32

实际实现

  • 计算机图形学:点积的实现之一是确定表面的阴影。它用于计算照射到某个点上的光的强度;因此,它有助于在三维图形中创建逼真的阴影效果。

  • 物理学:我们都听说过功和能量,因此要计算力所做的功,可以通过力和距离的点积来计算。 W = F. d,其中 F 是力,d 是距离。

结论

点积也称为两个向量的标量积,两个向量的点积提供标量值。在本文中,我们研究了如何编写 Golang 程序来使用两种不同的方法查找两个向量的点积。第一种方法使用循环进行精确控制,而第二种方法利用 range 关键字实现简洁易读的代码。这些技术很容易理解。


相关文章