如何解决集成功能未正确集成?
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()
我正在尝试构建一些简单的运算,例如对 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()