我想实现一个python程序,它可以计算这个积分
我知道如何使用For Loop制作它,它看起来像这样
import numpy as np;
def numint(f,alpha,beta,N,b,c):
s = np.size(b);
x = np.linspace(alpha,beta,N);
h = x[1]-x[0];
result = 0;
result1 = 0;
for j in range(1,N+1):
for i in range(1,s+1):
result1+=b[i]*f(x[j-1]+h*c[i]);
result+=h*result1;
result1 = 0;
return result;
没有循环我觉得它应该是这样的:
def numint(f,alpha,beta,N,b,c):
s = np.size(b);
x = np.linspace(alpha,beta,N);
h = np.ones(N,dtype=int)*(x[1] - x[0]);
result = 0;
result = np.sum(h[1:N+1] * np.sum(b*(f(x[0:N]+h[0]*c))));
return result;
但结果的第二部分= np.sum ...是错的,我不知道如何解决它。有什么建议吗?
编辑:
def numint(f,alpha,beta,N,b,c):
s = np.size(b);
x = np.linspace(alpha,beta,N);
h = np.ones(N,dtype=int)*(x[1] - x[0]);
functionResult = f(x+h*c);
dif = np.diff(functionResult);
result = 0;
result = np.sum(h[1:N+1] * np.sum(b*dif.sum()));
return result;
作为提示:向量化它们 但我不知道如何使用它
答案 0 :(得分:0)
您正在寻找的是np.diff功能。
假设您正在寻找f(x)= x ^ 2的0到10的积分,其中F(x)=(x ^ 3)/ 3:
x = np.linspace(0, 10, 1000)
F = lambda x: x**3/3
b = F(x)
dif = np.diff(b)
sum = dif.sum()
print(sum)
333.33333333333326
实际结果是333.3 ......
您可以使用任何所需的函数替换F,但键是np.diff,它会将数组的大小减小一。然后,只需按照您的间隔求和差异,即可获得结果。
您可以通过简单地增加步数(在我的示例中为1000)来提高结果的精确度。