Skip to main content
LibreTexts - Ukrayinska

28.5: Додаткові теми

  • Page ID
    75974
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    У цьому розділі представлено кілька більш просунутих тем, які дозволяють використовувати комп'ютерне програмування для спрощення багатьох завдань. У цьому розділі ми покажемо вам, як можна написати власну програму для чисельної оцінки значення інтеграла будь-якої функції.

    Визначення власних функцій

    Хоча 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 → ∞\). Наша стратегія оцінки інтеграла:

    1. Визначте функцію Python для\(f(x)\).
    2. Створити масив, xvals,\(N\) значень\(x\) між\(x_{a}\) і\(x_{b}\).
    3. Оцініть функцію для всіх цих значень і збережіть їх у масиві, fvals.
    4. Цикл над усіма значеннями в масиві 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\) точної аналітичної відповіді?

    Відповідь