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