28.5: Додаткові теми
- Page ID
- 75974
У цьому розділі представлено кілька більш просунутих тем, які дозволяють використовувати комп'ютерне програмування для спрощення багатьох завдань. У цьому розділі ми покажемо вам, як можна написати власну програму для чисельної оцінки значення інтеграла будь-якої функції.
Визначення власних функцій
Хоча Python надає безліч модулів і функцій, часто корисно мати можливість визначити свої власні функції. Наприклад, припустимо, що ви хотіли б визначити функцію, яка обчислює\(\frac{1}{2}x^{2} +\frac{1}{4}x^{3} + \cos(2x)\), для заданого значення\(x\). Це робиться легко за допомогою ключового слова def в Python:
код пітона\(\PageIndex{1}\)
Визначення функції
#import the math module in order to use cos
import math as m
#define our function and call it myfunction:
def myfunction(x):
return x**2 / 3 + x**3 / 4 + m.cos(2*x)
#Test our function by printing out the result of evaluating it as x = 3
print ( myfunction(3) )
Вихід
10.710170286650365
Кілька речей, які слід зазначити щодо коду вище:
- Функції визначаються за допомогою ключового слова
def, за яким слідує ім'я, яке ми вибираємо для функції (у нашому випадкуmyfunction) - Якщо функції приймають аргументи, вони вказуються в дужках після імені функції (у нашому випадку у нас є один аргумент, який ми вибрали для виклику
x) - Після імені функції і аргументів ставимо двокрапку
- Код, який належить функції, після двокрапки повинен бути відступом (це дозволяє Python знати, де закінчується код функції)
- Функція може «повернути» значення; це робиться за допомогою ключового слова
return. - Ми використовували «оператор»
**, щоб взяти ступінь числа (x**2), а оператор*- для множення чисел. Python не зрозуміє щось на кшталт2x; потрібно використовувати оператор множення, тобто2*x.
У наведеному вище прикладі ми написали функцію Python для представлення математичної функції. Однак можна написати функцію для виконання будь-якого набору завдань, а не тільки для застосування математичної функції. Функції Python дуже корисні для того, щоб уникнути необхідності багаторазово вводити один і той же код.
Нагадаємо, що модуль numpy дозволяє застосовувати функції до масивів чисел, а не єдиного числа. Ми можемо трохи змінити код вище, так що, якщо аргумент функції, х, є масивом, функція буде витончено повертати масив чисел, до якого була застосована функція. Це робиться шляхом простої заміни виклику математичної версії функції cos за допомогою numpy версії:
код пітона\(\PageIndex{2}\)
Визначення функції, яка працює над масивом
#import the numpy module in order to use cos to an array
import numpy as np
#define our function and call it myfunction:
def myfunction(x):
return x**2 / 3 +x**3 / 4 + np.cos(2*x)
#Test our function by printing out the result and evaluating it at x = 3 (same as before)
print( myfunction(3) )
#Test it with an array
xvals = np.array([1, 2, 3])
print ( myfunction(xvals) )
Вихід
10.710170286650365 [ 0.1671865 2.67968971 10.71017029]
де ми створили масив xvals за допомогою модуля numpy.
Використання циклу для обчислення інтеграла
Можливість визначати власні функції в Python дозволяє нам легко спростити складні завдання. Використання «петель» - це ще один спосіб, яким комп'ютерне програмування може значно спростити обчислення, які в іншому випадку були б дуже стомлюючими. У циклі можна повторити одне і те ж завдання багато разів. У наведеному нижче прикладі просто п'ять разів роздруковується твердження:
Код Python\(\PageIndex{3}\)
Проста петля
#A loop to print out a statement 5 times:
for i in range(5):
print("The value of i is ", i)
Вихід
The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 The value of i is 4
Кілька приміток до коду вище:
- Цикл визначається за допомогою ключових слів
для... in - Значення після ключового слова
forє змінною «iterator» і буде мати різне значення кожного разу, коли код всередині циклу виконується (в нашому випадку ми називали зміннуi) - Значення після ключового слова
in- це масив значень, які буде приймати ітератор - Функція
range (N)повертає масив зNцілих значень між0іN-1(у нашому випадку це повертає п'ять значень\(0,1,2,3,4\)) - Коду, який буде виконуватися на кожній «ітерації» циклу, передує двокрапка і відступ (так само, як код функції також слідує за двокрапкою і має відступ)
Тепер у нас є всі інструменти для оцінки інтеграла чисельно. Нагадаємо, що інтеграл функції\(f(x)\) між\(x_{a}\) і\(x_{b}\) є просто сумою:
\[\begin{aligned} \int_{x_{a}}^{x_{b}}f(x)dx &= \lim_{\Delta x \to 0}\sum _{i=0}^{i=N-1}f(x_{i})\Delta x \\ \Delta x&=\frac{x_{b}-x_{a}}{N} \\ x_{i}&=x_{a}+i\Delta x \end{aligned}\]
Межа\(∆x → 0\) еквівалентна ліміту\(N → ∞\). Наша стратегія оцінки інтеграла:
- Визначте функцію Python для\(f(x)\).
- Створити масив,
xvals,\(N\) значень\(x\) між\(x_{a}\) і\(x_{b}\). - Оцініть функцію для всіх цих значень і збережіть їх у масиві,
fvals. - Цикл над усіма значеннями в масиві
fvals, помножте їх на\(∆x\) і підсумуйте їх разом.
Давайте використаємо Python для оцінки інтеграла функції\(f(x) = 4x^{3}+3x^{2}+5\) між\(x = 1\) і\(x = 5\):
Код Python\(\PageIndex{4}\)
Чисельне інтегрування функції
#import numpy to work with arrays:
import numpy as np
#define our function
def f(x):
return 4*x**3 + 3*x**2 + 5
#Make N and the range of integration variables:
N - 1000
xmin = 1
xmax = 5
#create the array of values of x between xmin and xmax
xvals = np.linspace(xmin, xmax, N)
#evaluate the function at all those values of x
fvals = f(xvals)
#calculate delta x
deltax = (xmax - xmin) / N
#initialize the sum to be zero:
sum = 0
#loop over the values fvals and add them to the sum
for fi in fvals:
sum = sum + fi*deltax
#print the result:
print("The integral between {} and {} using {} steps is {:.2f}".format(xmin, xmax, N, sum))
Вихід
The integral between 1 and 5 using 1000 steps is 768.42
Можна легко інтегрувати вищевказану функцію аналітично і отримати точний результат\(768\). Числова відповідь наблизиться до точної відповіді, оскільки ми робимо\(N\) більше. Звичайно, сила числового інтегрування полягає в тому, щоб використовувати її, коли функція не може бути інтегрована аналітично.
Вправа\(\PageIndex{1}\)
Яке значення ви\(N\) повинні використовувати вище, щоб отримати в межах\(0.01\) точної аналітичної відповіді?
- Відповідь
-
