编写函数以计算单位向量

时间:2019-07-06 02:04:08

标签: python

作业问题写成:

编写一个称为unitVec的函数,该函数在连接空间中两个点(A和B)的线的方向上确定单位矢量。该函数应将两个向量(列表)作为输入,每个向量都具有空间中一个点的坐标。输出应该是一个向量(列表),其单位向量的分量沿从A到B的方向。如果点A和B分别具有两个坐标(即它们位于xy平面中),则输出向量应具有两个坐标元素。如果点A和B分别具有三个坐标(即它们位于一般空间中),则输出向量应具有三个元素。

我基本上已经编写了全部代码,但是我一生都无法弄清楚如何对列表中称为connect []的每个元素求平方。

要计算单位向量,程序将把向量B中的元素与向量A中的相应元素相减,并使用这些值创建一个新列表(connects [])。然后,每个元素都需要平方,并且都需要加在一起。然后,将采用该数字的平方根,并将connects []中的每个元素除以该数字,并将其存储在新列表中,该列表将作为单位向量。 我正在尝试通过使用线

在connect []中添加元素的平方
add = add + (connects[i]**2)

但是我知道这只会返回两次列表。我其余的代码很好,我只需要帮助平方这些元素即可。

from math import *

vecA = []
vecB = []
unitV = []
connects = []
vec = []

elements = int(input("How many elements will your vectors contain?"))


for i in range(0,elements):
    A = float(input("Enter element for vector A:"))
    vecA.append(A)
    B = float(input("Enter element for vector B:"))
    vecB.append(B)  

def unitVec(vecA,vecB):
    for i in range(0,elements):
        unit = 0
        add = 0
        connect = vecB[i] - vecA[i]
        connects.append(connect)
        add = add + (connects[i]**2)
        uVec = sqrt(add)
        result = connects[i]/uVec
        unitV.append(result)
    return unitV

print("The unit vector connecting your two vectors is:",unitVec(vecA,vecB))

2 个答案:

答案 0 :(得分:1)

您需要将功能更改为以下内容:

def unitVec(vecA,vecB):
    add = 0
    for i in range(0, elements):
        unit = 0
        connect = vecB[i] - vecA[i]
        connects.append(connect)
        add = add + (connect**2)

    uVec = sqrt(add)
    unitV = [val/uVec for val in connects]
    return unitV

您无法在单个for循环中完成所有操作,因为您需要先添加所有差异,然后才能获得平方根。然后,您可以将差异除以uVec

答案 1 :(得分:0)

python的列表是通用的,其算术运算与矢量运算不同。例如,[1,2,3] * 2是复制运算,而不是矢量标量乘法,因此结果是[1,2,3,1,2,3]而不是[2,4,6]。 我将使用为数字数组设计的numpy数组,并提供向量运算。

import numpy as np

a = [1,2,3]

# convert python list into numpy array
b = np.array(a)
# vector magnitude
magnitude = np.sqrt((b**2).sum()) # sqrt( sum(b_i^2))
# or
magnitude = (b**2).sum()**0.5 # sqrt( sum(b_i^2))
# unit vector calculation
unit_b = b/magnitude