在优化问题中,如果下面给出的代码中的函数zero(x ,y)
是目标函数,初始值为x,y
为0,0
。那么,要解决问题,我需要计算OBJ。功能以及它的衍生。所以,当我这样做时,我得到ZeroDivisionError: division by zero
。
[x,y] = [0,0]
def zero(x ,y):
return 3 + x/y + 2*xy + 1/x
输出是:
Traceback (most recent call last):
File "<ipython-input-5-4e3e5e87c5f1>", line 1, in <module>
runfile('C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working/practice_cvxopt.py', wdir='C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working')
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working/practice_cvxopt.py", line 394, in <module>
print zero(x,y)
File "C:/Users/HP/Documents/Python Scripts/Python Scripts_majrpjct/working/practice_cvxopt.py", line 392, in zero
return 3 + x/y
ZeroDivisionError: division by zero
任何人都可以建议我一个解决方案,以便通过忽略ZeroDivisionError
值来获得正确答案。
答案 0 :(得分:2)
这就是try块的用途!如果你不想消毒你的输入,并且编码为零除零的情况(另一个选项是无穷大,这使得一些更有趣的数学运算),那么一个简单的尝试块是要走的路。如果您需要精确度,请清理输入(确保在将其发送到函数之前y不为零)。
代码:
def zero(x ,y):
try:
return 3 + x/y
except ZeroDivisionError:
return 3
# or do whatever else you want to do when y is zero.
答案 1 :(得分:0)
这个怎么样:
def zero(x, y):
if abs(x) < 1e-10 and abs(y) < 1e-10:
return 3.0
elif abs(y) < 1e-10:
return 0.0
else:
return 3 + x/y