尝试使用while循环来数值求解方程。但我需要一个物理解决方案,答案是>0。
我尝试将x>0同时放在循环中和while循环的条件中,但我仍然得到否定的结果。这只是一个例子代码,我有类似的东西,所以这可能不会给出负的结果,但我只想知道如何在循环中加入约束。
def f(x):
xold=x
tol=0.001
rel=1
itr=0
while (rel>tol):
itr=itr+1
xnew=2+1/xold
rel=abs(xnew-xold)/abs(xold)
xold=xnew
return xnew我没有在网上找到任何关于如何在循环中放置约束的信息。
发布于 2019-03-27 17:54:57
首先,我认为你的示例代码中有一些错误。您从x (而不是xold)创建xnew,并在每次迭代结束时将xold分配给xnew,而不是相反。结果是您的示例是一个无限循环。
其次,为了解决实际问题,我们来举一个更简单的例子:
def f(x):
xold = x
while (xold > 0):
xnew = xold - 1
#print("old: %s new: %s" % (xold, xnew))
xold = xnew
return xnew
result = f(x=3.1)
print(result)这会给出一个负数。要了解原因,让我们取消对函数中print语句的注释,并检查输出。它提供了:
old: 3.1 new: 2.1
old: 2.1 new: 1.1
old: 1.1 new: 0.10000000000000009
old: 0.10000000000000009 new: -0.8999999999999999问题是,循环创建了一个测试用例,如果该测试用例失败,则循环退出。您将返回测试用例,包括最后一个成功的用例。将返回值更改为xold,它就可以工作了。
(还要注意,如果输入x小于0,那么所编写的代码将产生错误,因为xnew从未在循环中定义过。)
如果while语句中没有包含额外的条件(通常是一些边缘情况),您可以在if子句中使用break语句来终止循环:
xold = 3.1
while True:
xnew = xold - 1
if xnew <= 0: # some condition not considered in the while
break
xold = xnew同样,这使得xold成为最后一个通过额外标准的东西。
https://stackoverflow.com/questions/55372880
复制相似问题