微分方程的不受支持的操作数类型

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。希望这可以帮助。

以上是关于微分方程的不受支持的操作数类型的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow vs PyTorch 4: 自动微分

Autograd:自动微分

如何在python中使用输入求解和方程[重复]

Editdamnpoll 正在更改要控制的文本类型的不受控制的输入

Matlab微分方程

来自 PHP 文件信息的不正确/不受欢迎的 ogv MIME 类型