微分方程的不受支持的操作数类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微分方程的不受支持的操作数类型相关的知识,希望对你有一定的参考价值。
import math
import decimal
n=5
s=3.5*n -14
def float_range(start, stop, step):
while start < stop:
yield float(start)
start += decimal.Decimal(step)
initial=list(float_range(-14, 15, s))
def diff(f, x):
dx = 1e-6
r1 = f(x + dx) - f(x)
f_x = r1 / dx
return float(f_x)
def sinc(x):
if x==0 :
return
else :
return math.sin(x)/x
def Dsinc(x):
Dsinc=diff(sinc,x)
return Dsinc
def nraphson(f, Df, x, dx) :
x1= x - f(x)/Df(x)
while abs(x1-x) < dx:
x=x1
print(x1)
for x in initial :
print(x, nraphson(sinc,Dsinc,x,1e-6))
为学校项目编写的代码。无法使用Numpy,并且必须编码所有微分和牛顿方法,而不是使用numpy函数。
有人知道我为什么得到:TypeError:-:'float'和'NoneType'的不支持的操作数类型在第16行r1 = f(x + dx) - f(x)
谢谢
答案
我不是专家,但方括号与可调用函数紧密相关,因此python试图运行以f表示的函数,在您的情况下为带浮点的x + dx参数。那会给你一个错误。但是,您显然在做数学问题,因此需要使用乘号来告诉python方括号表示乘号,而不用这些参数调用此函数。这对我来说在python shell中起作用:
def diff(f, x):
dx = 1e-6
r1 = f*(x + dx) - f*(x)
f_x = r1 / dx
return float(f_x)
该返回有效,因为float是内置函数,并且您定义了f_x。希望这可以帮助。
以上是关于微分方程的不受支持的操作数类型的主要内容,如果未能解决你的问题,请参考以下文章