为什么运行python代码,但没有输出?

问题描述 投票:0回答:1

我编写了一个非常适合数值求解方程的代码,但是有一个特定的方程,当我进入那里并尝试运行该代码时,它将运行并且不会输出任何结果!等式I的输出为:x ^ 3-3 * x + 2-a *(np.sin(x))公式I没有得到以下输出:(x-1)(x-2)(x-3)-a *(np.cos(x))我还尝试编写不带括号的第二个方程,像这样:x ^ 3-6 * x ^ 2 + 11 * x-6-a * np.cos(x)并没有帮助。问题出在哪里?!

这是我的代码:

import math
import numpy as np
h =1e-5
eps =1e-8
#function of the equation
def nf(x,a,c):
    c=math.cos(x)
    solu=(x-1)*(x-2)*(x-3)-a*c
    return(solu)
#numerical method
def sl(a,x):
    c=math.cos(x)    
    f = nf(x,a,c)
    while abs(f)>eps:
        x = x - h*f/(nf(x+h,a,c)-f)
        f = nf(x,a,c)
    return(x)

N = 101
mya = np.linspace(0.0,1.0,N)
myb = np.zeros(mya.shape)
myc = np.zeros(mya.shape)
myd = np.zeros(mya.shape)
for i in range(0,N):
    myb[i] = sl(mya[i],1.0)
    myc[i] = sl(mya[i],2.0)
    myd[i] = sl(mya[i],3.0)

print(myb[i])
print(myc[i])
print(myd[i])
output equation
1个回答
0
投票

问题是,对于sl的某些输入,abs(f)>eps可能永远不会成为False,从而形成无限循环。我没有调查过您的数学问题,因此无法“真正”解决此问题。我可以提供的是自动检测何时发生这种情况,以便代码运行:

def sl(a,x):
    c=math.cos(x)    
    f = nf(x,a,c)
    count, maxcount = 0, 1000
    while abs(f)>eps:
        x = x - h*f/(nf(x+h,a,c)-f)
        f = nf(x,a,c)
        count += 1
        if count > maxcount:
            return
    return(x)

此处,在认为解决方案不可达之前,最多允许1000次迭代。在这种情况下,sl返回None,当将其插入NumPy float数组时将变为np.nan

在调查输出时,只有myc[60]以这种方式失败。

© www.soinside.com 2019 - 2024. All rights reserved.