如何解决集成功能未正确集成?

How to resolve integration function not integrating correctly?

我正在尝试构建一些简单的运算,例如对 lambda 函数进行运算的导数和积分函数,因为 sympy 和 scipy 正在努力整合我传递给他们的一些东西。

微分函数没有给我任何问题,并在绘制时查看 return 输入函数的导数,但积分函数不 return 相同,并且不绘制输入的正确积分。

import matplotlib.pyplot as plt
import numpy as np
from phys_func import func

sr = [-10,10]
x = np.linspace(sr[0],sr[1], 100)

F = lambda x: x**2
f = func.I(F,x)

plt.plot(x,F(x), label = 'F(x)')
plt.plot(x,f(x), label = 'f(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

集成功能不起作用:

def I(F,x):
        dx = (x[len(x)-1] - x[0])/len(x)
        return lambda x : 0.5*( F(x+dx) + F(x) )*dx

有效的微分函数:

def d(f,x):
        dx = (x[len(x)-1]-x[0])/len(x)
        return lambda x: (f(x+dx)-f(x))/dx

谁能帮我一把?

如果不知道单一点的反导数值,就无法从数值上求出函数的反导数。假设如果将 x =a 处的反导数函数值固定为 0(并且给定函数从 [a,x] 连续),那么我们可以使用定积分。对于这个函数,让我们取 a=0(即 0 是反导函数的根),这样你就可以从 [0,x] 做一个定积分。另外,您的集成功能是错误的。您需要对从 0 到 x 的所有 0.5*( F(x+dx) + F(x) )*dx 个元素求和以获得定积分。 可以修改 I(f,x) 如下

def I(F1): # N is number of intervals
    return lambda x, N: np.sum( 0.5*( F1(np.linspace(0,x,num=N)+ (x)/N ) + F1(np.linspace(0,x,num=N)))*(x)/N)
In [1]: import numpy as np

In [2]: def I(F1): # N is number of intervals
    ...:     return lambda x, N: np.sum( 0.5*( F1(np.linspace(0,x,num=N)+ (x)/N
    ...: ) + F1(np.linspace(0,x,num=N)))*(x)/N)
    ...:

In [3]: F = lambda x: x**2

In [4]: x_ran = np.linspace(-10,10, 100)

In [5]: y = I(F)

In [6]: y_ran = []

In [7]: for i in x_ran:
    ...:     y_ran.append(y(i,100))

In [8]: plt.plot(x_ran,y_ran)

In [9]: plt.show()