当我试图解一个方程时,python只使用整数
我正在做一个新项目,它就像一个数学网站。我正试图创建一个程序,将解决方程 它通常使用简单的方程,例如当我试图解一个方程时,python只使用整数,python,python-3.x,Python,Python 3.x,我正在做一个新项目,它就像一个数学网站。我正试图创建一个程序,将解决方程 它通常使用简单的方程,例如x+10=12,但是当我尝试使用指数,如x**2+3=5来计算方程时,它没有给我任何帮助。我相信这段python代码不能使用小数 代码在下面 import math def solve(): x = -1000 while x < 1001: if x**2 + 1 == 4: print("x = " + str(x)) x += 1 solve() 导入数学 def
x+10=12
,但是当我尝试使用指数,如x**2+3=5
来计算方程时,它没有给我任何帮助。我相信这段python代码不能使用小数
代码在下面
import math
def solve():
x = -1000
while x < 1001:
if x**2 + 1 == 4:
print("x = " + str(x))
x += 1
solve()
导入数学
def solve():
x=-1000
当x<1001时:
如果x**2+1==4:
打印(“x=”+str(x))
x+=1
解决()
我希望输出为1.73205080757
和-1.73205080757
。
但是我什么也得不到(因为它找不到答案)。您期望的答案介于1和2之间。从-1000开始,递增1。所以你将从-1000到0到1到2到3…跳过你的预期答案 您应该使用以下内容:
(使用浮动,即
x=1.0
)查看您的代码,您的最小步长是1
(x增加了x+=1
),因此x
只能是整数。没有这样的整数可以完全满足您的条件x**2+1==4
这将只检查从x=-1000到x=1000的整数值,即它将询问答案是-1000吗?不,答案是-999吗?没有etc,永远不要尝试1.7或1.73或1.73。。。!答案是浮点而不是整数,因此编写的方法不可能得到它。你需要以某种方式迭代越来越接近的答案。这是一个数学算法设计的问题,我认为,你可以先查找数学公式,如何近似二次解(可能是一些17世纪的数学家做了这个公式!),然后尝试将这个公式转换成Python。如果您不知道Python差异中的float、int和duck typing,请尝试用谷歌搜索一下,这也可能会对您有所帮助。由于以下两个原因,代码没有给出也不会给出您期望的解决方案:
import numpy as np
def solve_prueba(a,b):
"""
The function solves a function of the form x^2 + a = b
"""
x = np.sqrt((b-a))
return x
这种方法比创建while循环要省时得多。while循环必须通过所有具有无穷小数的数字来给出给定方程的解
祝你好运 无需从
-1000
开始,然后上升到1000
,因为您正在查找从1
到2
的值。在代码中,以1递增,这意味着x
永远不会是十进制值。但是,您可以使用非常小的数字(例如,x+=0.0000000000001
来增加
如果使用这个小增量,可能应该使用math.isclose()
而不是=
,因为小浮点值往往会有一些精度错误。就像在您的预期答案中,您预期结果是1.73205080757
although1.73205080757**2+1==4.000000000003889
而不是4
。
像这样使用
math.isclose((x**2+3),4,rel_tol=1e-9)
它检查x**2+3
的计算是否接近4
,公差为1e-9
,这将输出您期望从该等式得到的值
因此,对于您的代码:
import math
def solve():
x = -1000
while x < 1001:
if math.isclose((x**2 + 1), 4, rel_rol=1e-9):
print("x = " + str(x))
x += 0.0000000000001
solve()
导入数学
def solve():
x=-1000
当x<1001时:
如果数学是封闭的((x**2+1),4,相对值=1e-9):
打印(“x=”+str(x))
x+=0.0000000000001
解决()
为此,您应该使用SymPy之类的库x+=1
将只允许x
为整数