Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python代码在运行,但在使用公式时并没有输出?_Python_Output_Equation - Fatal编程技术网

为什么python代码在运行,但在使用公式时并没有输出?

为什么python代码在运行,但在使用公式时并没有输出?,python,output,equation,Python,Output,Equation,我写了一个代码,非常适合数值求解方程,但我有一个特定的方程,当我进入其中并尝试运行代码时,它将运行,并且永远不会输出 方程我得到了一个输出: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) 但这没用eps可能永远不会变成False,从而创建一个无限循环。我没有研究过你的数学问题,所以我不能“真正地”解决这个问题。我能提供

我写了一个代码,非常适合数值求解方程,但我有一个特定的方程,当我进入其中并尝试运行代码时,它将运行,并且永远不会输出

方程我得到了一个输出: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])

问题是,对于
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]
以这种方式失败。

问题是,对于
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]
以这种方式失败。

您的nf函数有点奇怪。您正在将
c=math.cos(x)
传递到nf()中,但在nf()中,您再次尝试将
c分配给math.cos(x)
。只需使用您传递的值
c
。注释它可以修复代码。至于数学上的正确性,除非你能更好地解释你想做什么,否则我无法确定

import math
import numpy as np
h =1e-5
eps =1e-8
#function of the equation
def nf(x,a,c): 
    # this line is not needed. Commenting allows your code to run   
#     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])
输出:

3.2036907284
0.835006605064
0.677633820877

你的nf功能有点奇怪。您正在将
c=math.cos(x)
传递到nf()中,但在nf()中,您再次尝试将
c分配给math.cos(x)
。只需使用您传递的值
c
。注释它可以修复代码。至于数学上的正确性,除非你能更好地解释你想做什么,否则我无法确定

import math
import numpy as np
h =1e-5
eps =1e-8
#function of the equation
def nf(x,a,c): 
    # this line is not needed. Commenting allows your code to run   
#     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])
输出:

3.2036907284
0.835006605064
0.677633820877