如何在不使用编程库的情况下计算两个向量的叉积?
例如,给定向量 a = (1, 2, 3)
和 b = (4, 5, 6)
如何在不使用编程库的情况下计算两个向量的叉积?
例如,给定向量 a = (1, 2, 3)
和 b = (4, 5, 6)
你是在询问叉积公式还是如何在Python中进行索引和列表操作?
基本思想是通过a[0]、a[1]、a[2]等方式访问a和b的元素(x、y、z),然后创建一个新的列表[element_0,element_1,...]。我们也可以将其封装在函数中。
对于向量,叉积是元素的反对称积,同时具有很好的几何解释。
无论如何,最好给你一些提示并让你自己解决,但这不是SO的方式,所以...
def cross(a, b):
c = [a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0]]
return c
import numpy as np
a = np.array([1,0,0])
b = np.array([0,1,0])
#print the result
print(np.cross(a,b))
对于多维数组,这可能有效;
def crossProd(a,b):
dimension = len(a)
c = []
for i in range(dimension):
c.append(0)
for j in range(dimension):
if j <> i:
for k in range(dimension):
if k <> i:
if k > j:
c[i] += a[j]*b[k]
elif k < j:
c[i] -= a[j]*b[k]
return c
def cross_product(u,v):
dim = len(u)
s = []
for i in range(dim):
if i == 0:
j,k = 1,2
s.append(u[j]*v[k] - u[k]*v[j])
elif i == 1:
j,k = 2,0
s.append(u[j]*v[k] - u[k]*v[j])
else:
j,k = 0,1
s.append(u[j]*v[k] - u[k]*v[j])
return s
s.append(u[1]*v[2] - u[2]*v[1]); s.append(u[2]*v[0] - u[0]*v[2]); s.append(u[0]*v[1] - u[1]*v[0])
。 - Andrew Jaffe我定义了一个名为z的后继函数,这有助于以稍微简洁的方式编写叉积公式。以下是代码:
from numpy import zeros
def z(a):
if a == 0 or a == 1:
return a+1
elif a == 2:
return 0
n = 3
i = 0
v = zeros(n, float)
v1 = zeros(n, float)
v2 = zeros(n, float)
v1[0] = float(input("enter x component of v1 "))
v1[1] = float(input("enter y component of v1 "))
v1[2] = float(input("enter z component of v1 "))
v2[0] = float(input("enter x component of v2 "))
v2[1] = float(input("enter y component of v2 "))
v2[2] = float(input("enter z component of v2 "))
def cp(x, y):
global i
while i < n:
v[i] = x[z(i)]*y[z(z(i))]-x[z(z(i))]*y[z(i)]
i = i + 1
return v
ans = cp(v1, v2)
print(ans)