python - python中的梯形规则
问题描述
我正在尝试使用梯形规则对 n = 2^p 其中 p= [1,2...20] 的范围内的积分进行评估,以产生不同的积分值。我试图实现一个for循环来定义n和h但是我得到一个TypeError:'list'对象不能被解释为整数。有没有办法调整我的代码以产生我想要的结果?
import math as math
#define limits of our interval
a=0
b=2
#define our n value
n_vals=[2**p for p in range (0,21)]
#define our h value
h_vals=[(b-a)/n for n in n_vals]
#define our function f(x) here
f= lambda x: math.exp(x)+x**2
#we calculate the trapezium method by breaking it into smaller parts
#We use for loop calculating integral of f(x) using trapezium rule
#Combine parts to find integral
S = 0.5*(f(a) + f(b))
for k in range(1,n_vals):
S += f(a + k*h_vals)
Integral = h_vals*S
print("Integral = %f" % Integral)
解决方案
在这里你有一些问题,首先你需要迭代一个索引或所需的 nval 来计算 de 积分,每次我会给你一个解决方案的建议,但我认为你的方法定义不好,因为这不是你计算积分的方式
import math as math
#define limits of our interval
a=0
b=2
#define our n value
n_vals=[2**p for p in range (0,21)]
#define our h value
h_vals=[(b-a)/n for n in n_vals]
#define our function f(x) here
f= lambda x: math.exp(x)+x**2
#we calculate the trapezium method by breaking it into smaller parts
#We use for loop calculating integral of f(x) using trapezium rule
#Combine parts to find integral
for n,h in zip(n_vals,h_vals): #here n and h are the actual value for every iteration
S = 0.5*(f(a) + f(b))
for k in range(1,n):
S += f(a + k*h) #here you have a problem with definition of trapezoidal integral
Integral = h*S
print(f"Integral = {Integral}")
另一个建议是创建一个函数来计算一个区间的积分,然后调用该函数进行累积:
def trap(f,a,b):
return ( f(a) + f(b) ) / 2 * (b-a)
import math as math
#define limits of our interval
a=0
b=2
#define our n value
n_vals=[2**p for p in range (0,21)]
#define our h value
h_vals=[(b-a)/n for n in n_vals]
#define our function f(x) here
f= lambda x: math.exp(x)+x**2
现在您的集成代码:
for n,h in zip(n_vals,h_vals):
S = 0
for k in range(n):
thisA = a+k*h
thisB = a+(k+1)*h
S += trap(f,thisA,thisB)
print(f"Integral for {n} partitions = {S}")
推荐阅读
- ios - 在集合视图中选择和删除图像
- swift - Swift:检查对象是否不是类的实例
- java - JavaFX:如何选择平铺并添加数字和边框线?
- angularjs - 使用 tomcat 服务器开发 angularJS 应用程序
- javascript - 如何动态更改 HTML“rect”标签上的“a href”链接?
- javascript - 通过java脚本在cmd(Windows)上运行python脚本
- c# - 分层 c# 递归排序
- javascript - 如何使用 Jquery 选择具有特定类的父级的子级?
- java - 有没有办法告诉java线程重新加载缓存?
- php - 如何处理在“then”阶段有很多步骤的小黄瓜场景