#python #list #matplotlib
Вопрос:
У меня возникла проблема с программой, которую я создал для интеграции и нахождения значения функции с использованием трапециевидного метода и точного интегрирования, затем значение трапециевидного метода будет сравниваться с точным интегрированием с использованием графика.
Вот код, который я пишу:
import numpy.polynomial.polynomial as ply
import matplotlib.pyplot as plt
import numpy as np
#Integration, Trapezoidal Method
# Define function to integrate
def f(x):
return 2 5*x**7 4*x**2 2*x**5
def polynom():
return [2, 0, 4, 0, 0, 2, 0, 5]
# Implementing trapezoidal method
def trapezoidal (x0,xn,n):
# calculating step size
h = (xn - x0) / n
# Finding sum
integration = f(x0) f(xn)
for i in range(1,n):
k = x0 i*h
integration = integration 2 * f(k)
# Finding final integration value
integration = integration * h/2
return integration
#Exact integration
# Find Indefinite integral
I = ply.polyint(polynom())
# Find Definite integral
a = lower_limit
b = upper_limit
A = ply.polyval(b, I) - ply.polyval(a, I)
# Input section
lower_limit = float(input("Enter lower limit of integration: "))
upper_limit = float(input("Enter upper limit of integration: "))
elements = int(input("Enter number of elements : "))
#Sub_interval list
n_interval = []
# iterating till the range
for val in range(0, elements):
sub_interval = int(input("Enter number of sub intervals: "))
n_interval.append(sub_interval) # adding the element
# Call trapezoidal() method and get result
result = trapezoidal(lower_limit, upper_limit, *n_interval) #The *n_interval is used to unpack the list.
print("Indefinite integral's constant of exact integration is: ", I)
print("Definite integral of the exact integration is: ", A)
print("Integration result by Trapezoidal method is: ", result)
print("Error value is: ", (((result-A)/A)*100))
# Plotting the error and with respects to "N"
xValue = [sub_interval, 0]
yValue = [0, ((result-A)/A)*100]
plt.plot(xValue, yValue)
plt.title("Comparison of 'N' to Error Values" )
plt.xlabel("N value")
plt.ylabel("Error value")
plt.show()
Программа выдала ошибку:
trapezoidal() takes 3 positional arguments but 4 were given.
Проблема в том, что я не знаю, как изменить аргументы функций, в то же время все еще используя списки в качестве параметров.
Ответ №1:
Если вы хотите передавать списки в качестве параметров, вам не нужна звездочка (*).
Просто сделай:
result = trapezoidal(lower_limit, upper_limit, n_interval)
Он передаст n_interval
список в качестве параметра для трапециевидной формы.
Например:
def trapezoidal(x0, xn, n):
print(x0, xn, n)
trapezoidal(1, 10, [1, 2, 3, 4])
# n is a list
напечатает
1 10 [1, 2, 3, 4]
Комментарии:
1. Это все равно дает значение ошибки. Ошибка типа: неподдерживаемые типы операндов для /: «с плавающей точкой» и «список». Это не может сработать, вероятно, потому, что (как я уже говорил в вопросе) функция имеет три параметра, в то время как функции должны работать с любым значением, которое вводит пользователь.
2. @nurhadidd это зависит от вашей функции. Вы можете использовать
isinstance(n, list)
в своей функции, чтобы определить, является ли это alist
, и обработать его соответствующим образом.