尝试使用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
在网上找不到有关如何将约束放入循环中的任何信息。
答案 0 :(得分:1)
首先,我认为您的示例代码中存在一些错误。您从xnew
(而不是x
)创建xold
,并且在每次迭代结束时,将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语句中不包含其他条件(通常是某些情况),则可以在break
子句中使用if
语句来终止循环:
xold = 3.1
while True:
xnew = xold - 1
if xnew <= 0: # some condition not considered in the while
break
xold = xnew
同样,这使xold
成为通过附加条件的最后一件事。