这就是我想要解决的问题:
编写一个函数my_is_orthogonal( v1,v2,tol),其中v1和v2是相同大小的列向量,tol是一个严格大于0的标量值。如果v1和v2之间的角度在π/2的tol内,则输出应该是1;也就是说,在π/2的tol范围内,π/2−θ
这是我的密码:
def my_is_orthogonal(v1,v2,tol):
v1 = np.array((1,2,3))
v2 = np.array((2,3,4))
tol = print("Input a number larger than 0!")>0
unit_vector1 = v1 / np.linalg.norm(v1)
unit_vector2 = v2 / np.linalg.norm(v2)
dot_product = np.dot(unit_vector1, unit_vector2)
angle = np.arccos(dot_product)
if abs((pi/2)-angle)<tol:
print("1")
else:
print("0")
return my_is_orthogonal
以下是我应该测试我的代码的情况:
Test cases for problem 2
a = np.array([[1], [0.001]])
b = np.array([[0.001], [1]])
output should be: 1
my_is_orthogonal(a,b, 0.01)
output should be: 0
my_is_orthogonal(a,b, 0.001)
output should be: 0
a = np.array([[1], [0.001]])
b = np.array([[1], [1]])
my_is_orthogonal(a,b, 0.01)
output should be: 1
a = np.array([[1], [1]])
b = np.array([[-1], [1]])
my_is_orthogonal(a,b, 1e-10)*
但在我所有的案例中,我得到的答案是零"0“
发布于 2022-05-17 10:35:32
下面是您的代码的固定版本。
有相当一些荒谬的说法:
,
v1和v2。其次,您用tol覆盖了print(...) > 0,即false (副作用是总是打印错误消息)。换句话说,您的函数总是常量的。pi的导入(它不是内置的Python),所以我用测试向量替换为不正确的形状。
import numpy as np
def my_is_orthogonal(v1, v2, tol):
assert tol > 0, "Tol must be > 0"
unit_vector1 = v1 / np.linalg.norm(v1)
unit_vector2 = v2 / np.linalg.norm(v2)
dot_product = np.dot(unit_vector1, unit_vector2)
angle = np.arccos(dot_product)
return abs((np.pi / 2) - angle) < tol
a = np.array([1, 0.001])
b = np.array([0.001, 1])
c = np.array([1, 1])
d = np.array([1, -1])
assert my_is_orthogonal(a,b, 0.01)
assert not my_is_orthogonal(a, b, 0.001)
assert not my_is_orthogonal(a, c, 0.01)
assert my_is_orthogonal(c, d, 1e-10)https://stackoverflow.com/questions/72272380
复制相似问题