Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,如何解决ValueError:数学域错误_Python_Python 3.x_Math_Trigonometry_Valueerror - Fatal编程技术网

Python,如何解决ValueError:数学域错误

Python,如何解决ValueError:数学域错误,python,python-3.x,math,trigonometry,valueerror,Python,Python 3.x,Math,Trigonometry,Valueerror,我正在尝试获取此代码的结果: 从数学导入cos、sin、atan2、sqrt 从numpy进口rad2deg dis_ab=531466.5079260713 mid=(531353.256588375710971.133034496568) 从x到x的中间角半径=1.5501517288292364 从x到x的中间角度角度角度=88.8171516668233 gdt1_x=761708.6575534055 gdt1_y=3679240.5391967976 无人机x=230355.4009

我正在尝试获取此代码的结果:

从数学导入cos、sin、atan2、sqrt
从numpy进口rad2deg
dis_ab=531466.5079260713
mid=(531353.256588375710971.133034496568)
从x到x的中间角半径=1.5501517288292364
从x到x的中间角度角度角度=88.8171516668233
gdt1_x=761708.6575534055
gdt1_y=3679240.5391967976
无人机x=230355.40096502978
无人机y=3668269.406162301
角度=178.8171516668233
def find_point_for_second_gdt():
dist_ab=sqrt((gdt1_x-uav_x)**2)+(gdt1_y-uav_y)**2))
mid=(gdt1_x-无人机_x),(gdt1_y-无人机_y)
从x到x的中间角度=atan2(中间[0],中间[1])
中间角与角的夹角=(rad2deg(中间角与角的夹角与角的夹角)
角度=90+与x_的中间角度(单位:度)
x=gdt1_x+(dis_ab*sqrt(2*cos(角度)))
y=gdt1_y+(dis_ab*sqrt(2*sin(角度)))
end_xy=(x,y)
点_in_lat_lon=将_转换为_lat_lon(end_xy)
打印(平面上的点)
输出:
回溯(最近一次呼叫最后一次):
文件“/home/yovel/PycharmProjects/TriangulationCalc/find_2nd_position.py”,第36行,中
为第二个gdt()查找点
文件“/home/yovel/PycharmProjects/TriangulationCalc/find_2nd_position.py”,第26行,find_point_for_second_gdt
x=gdt1_x+(dis_ab*sqrt(2*cos(角度)))
ValueError:数学域错误
为第二个gdt()查找点
我看了这篇文章:

我的想法是使用abs()和round()


它没有解决它。

发生这种情况是因为
cos(角度)
等于
-0.9680080671170238
,所以
2*cos(角度)
-1.9360161342340476
,这意味着
sqrt(2*cos(角度))
是虚构的

内置的
math.sqrt
无法处理负参数,因此会抛出ValueError

如果您确实想找到负数的平方根,可以使用
cmath
库中的
sqrt
方法:

from cmath import sqrt
在本例中,将给出:

>>> end_xy
((761708.6575534055+739486.7340101058j), (4055734.2602401497+0j))

这是因为
cos(angle)
等于
-0.9680080671170238
,所以
2*cos(angle)
-1.9360161342340476
,这意味着
sqrt(2*cos(angle))
是虚构的

内置的
math.sqrt
无法处理负参数,因此会抛出ValueError

如果您确实想找到负数的平方根,可以使用
cmath
库中的
sqrt
方法:

from cmath import sqrt
在本例中,将给出:

>>> end_xy
((761708.6575534055+739486.7340101058j), (4055734.2602401497+0j))

这在尝试转换为lat-lon时引发另一个错误,将编辑以添加该函数。新错误raised@yovelcohen请将此作为新问题提问。在尝试转换为lat lon时,这会引发另一个错误,将进行编辑以添加该函数。新错误raised@yovelcohen请把这当作一个新问题来问。