2016-12-02 1 views
0
.

. Нанесите несколько функций и теперь нужно проиллюстрировать ошибку между фактической областью/интеграцией и приблизительным результатом области/интеграции (рассчитанным с использованием правила трапеции или симпсонов). Получил это далеко от исследования здесь/других мест, и он только рисует один треугольник на данный момент - в неправильной позиции, я думаю. Любой вход? Заранее спасибо.Иллюстрируйте правила Trapzeium/Simpson, используя matplotlib.

N.B. Точное значение, а также приблизительные интегральные значения были рассчитаны ранее в программе, если они требуются.

import numpy as np 
import matplotlib.pyplot as plt 

def f1(x): 
    return np.exp(-4*x)*np.cos(6*np.pi*x) 

x = np.linspace(0, 1, 1500) 
fig = plt.figure() 
ax1 = fig.add_subplot(322) 
xstep = np.arange(0,2) 
ax1.fill_between(f1(xstep), 0, xstep, facecolor='white') # Trapezium 
ax1.plot(x, f1(x),'r-') # Function 

ответ

0

Да, треугольник находится в неправильном месте.

Проблема заключается в fill_between - аргументы должны быть (x1, y1, y2), где y1 - это значение, определяющее, где находится «между». Если вы увеличиваете количество треугольников в коде, вы увидите, что происходит - оси x и y меняются местами. Если вы измените, что точки треугольника будут иметь правильные значения.

Вот код, который я использовал для проверки. Обратите внимание, что я добавил переменную n_steps (облегчило для проверки):

import numpy as np 
import matplotlib.pyplot as plt 

def f1(x): 
    return np.exp(-4*x)*np.cos(6*np.pi*x) 

# parameters for trapezoid rule 
n_steps = 6 

# set up figure 
fig = plt.figure() 
ax1 = fig.add_subplot(111)#(322) 

# range for function 
x = np.linspace(0, 1, 1500) 
xstep = np.linspace(0, 1, n_steps) 

# plot the trapezoid 
ax1.fill_between(xstep, 0, f1(xstep), facecolor='white') 

# plot the function 
ax1.plot(x, f1(x),'r-') # Function 

plt.show() 

Результат выглядит следующим образом:

graph result

черная линия при у = 0, сделанное fill_between. Я бы рекомендовал разместить вертикальные линии в точках, чтобы было более ясно, как делается расчет. Вы бы добавить код, что после построения трапеции, но перед построением графика функции:

# plot vertical lines 
for xval in xstep: 
    ax1.plot((xval, xval), (0, f1(xval)), color='black') 

, что приводит к:

graph with vertical lines

Смежные вопросы