Правило трапеции в python

#python #loops #for-loop

Вопрос:

Я пытаюсь оценить интеграл, используя правило трапеции для диапазона n = 2^p, где p= [1,2…20], чтобы получить различные значения интеграла. Я попытался реализовать цикл for для определения n и h, однако я получаю ошибку типа: объект «список» не может быть интерпретирован как целое число. Есть ли способ настроить мой код для получения желаемого результата?

 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)  

Комментарии:

1. Вы пытаетесь умножить список на число с плавающей точкой. Ты не можешь этого сделать

Ответ №1:

Здесь у вас есть некоторые проблемы, сначала вам нужно выполнить итерацию по индексу или по желаемым nvals для вычисления интеграла каждый раз, когда я буду предлагать вам решение, но я думаю, что ваш метод плохо определен, потому что вы не так вычисляете интеграл

 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}")