В упражнении вас просят вычислить производную, используя переменную точность (представленную с использованием переменной h
), и сравнить ее с точной / реальной производной функции.
Пусть h
= 10^ -j, где j варьируется от 0 до 20. Это означает, что h будет (дискретно) изменяться от 10⁻⁰ до 10⁻²⁰.Для этого вы можете использовать for
-loop и функцию range(...)
.Затем передайте это в функцию derivative
(для которой вы можете использовать третий параметр для значения h
)
def derivative(func, x, h):
return (func(x + h) - func(x)) / h
Далее вам необходимо сравнить это с точным производное.Функция f(x) = sin(x)
имеет известную (точную) производную, которая cos(x)
.В математической записи d(sin x)/dx = cos x
.Это означает, что для любого x
, cos(x)
даст вам точную производную sin
при этом x
.
Таким образом, вам нужно сравнить результат функции derivative(...)
со значением cos(x)
.Это даст вам разницу.Затем вы можете использовать базовую функцию Python abs(x)
, чтобы получить абсолютную величину этой разницы, которая даст вам абсолютную разницу, которая является желаемым результатом.Сделайте это для каждого j
от 0 до 20 и сохраните результаты где-нибудь, в массиве или в формате.
from math import sin, cos, pi
x = pi / 4
diffs = {}
for j in range(21): # range is exclusive so range(21) will stop at 20
h = 10 ** -j
deriv = derivative(sin, x, h)
exact = cos(x)
diff = abs(deriv - exact)
diffs[h] = diff
Затем вы можете использовать функцию loglog
pyplot, чтобы отобразить эти результаты на графике., передавая как X результат range(...)
и как Y массив, содержащий результаты.
import matplotlib.pyplot as plt
ordered = sorted(diffs.items())
x, y = zip(*ordered)
plt.loglog(x, y)