Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.12 Mб
Скачать

§ 36. Розв’язування математичних задач

У цьому параграфі на прикладі методу простих ітерацій для роз­в’язування нелінійного рівняння розглянемо застосування VBA, властивостей та методів об’єктів електронної таблиці для розв’я­зування математичних задач.

  1. Постановка задачі. Створити макрос у середовищі електронної таблиці для розв’язування нелінійного рівняння методом простих іте­рацій і відобразити ітераційний процес у вигляді таблиці (рис. 4.9).

Рис. 4.9 Рис. 4.10

  1. Теоретичні відомості про метод простих ітерацій. Щоб розв’я­зати нелінійне рівняння f(x) = 0 методом простих ітерацій, рівнян­ня потрібно звести до вигляду х = z(х) так, щоб виконувалась умова |z(x)| < 1, яку називають умовою збіжності ітераційного процесу. На­приклад, рівняння х cosx = 0 перетворюють до вигляду x = cosx. Метод реалізують за допомогою рекурентної формули так:

xі+1 = z(xi),

де х0 - довільне початкове наближення до розв’язку, і = 0, 1, 2, 3... Обчислення припиняють, коли різниця (яку називають похибкою) |xi+1xi| стане меншою від деякого заданого малого числа. Нехай це число 0,001. Якщо описана умова виконається, то вважають, що розв’язок знайдено з точністю 0,001.

Формули, які реалізують описаний метод засобами електронної таблиці, показані на рис. 4.10. Увага! Вручну треба заповнити лише один рядок таблиці А3:С3. Інші рядки заповнить VBA-програма (макрос). Результат роботи програми зображено на рис. 4.9. Розв’я­зок задачі міститься в клітинці В20. Це число 0,738.

У клітинку А4 будемо заносити число — результат обчислень з клітинки В3, у клітинку А5 — результат обчислень з клітинки В4 і т. д. Саме так реалізують ітераційний процес xi+1=z(xi).

3. Відомості про VBA, об’єкти ЕТ, їхні властивості та методи. Для розв’язування задачі застосуємо об’єкти WorksheetFunction та App­lication з властивостями Formula, ActiveSheet, Value, Columns, Font та Color, а також з методом Copy.

У VBA доступ до функцій MS Excel здійснюється через об’єкт WorksheetFunction. За замовчуванням він є властивістю об’єкта Applica­tion. У більшості випадків немає необхідності явно зазначати об’єкт WorksheetFunction для доступу до функцій MS Excel, оскільки він за замовчуванням є активним для об’єкта Application. Наприклад, роз­глянемо чотири коректні вирази і їхні значення для випадку табли­ці з рис. 4.9:

Application.WorksheetFunction.Max(Columns(1)) ‘= 1

WorksheetFunction.Pi ‘= 3.14159265

Application.Sum(Range("a3:c3")) ‘= 2

Count(A1:A21) ‘=20

Значення властивостей Value та Formula об’єкта типу Range вико­ристовують з метою виконання типових дій — надання значень клі­тинкам та занесення формул. Значенням Value є числове значення заданої клітинки, а значенням Formula є вираз для формули у вигля­ді рядка символів. Наприклад:

Application.Range("A4").Value = 3.5 'тут а4 = 3,5

Application. Range("a5"). Formula = "= $А$4 + $А$4"

'тут в а5 є формула = $А$4 + $А$4, що дає результат 7.

Властивість ActiveSheet об’єктів з колекції Windows чи WorkBooks містить активну сторінку робочої книжки MS Excel. Ця властивість характерна також для об’єкта Application. Наведені нижче вирази по­вертають назву («Sheetl» або «Аркуші» тощо) активного аркуша робочої книжки файлу filename.xls:

Windows(''filename'').ActiveSheet.Name

Workbooks("filename.xls").ActiveSheet.Name

Application.ActiveSheet.Name

Колекція Columns містить стовпці активної сторінки чи певного діапазону. Цією властивістю володіють об’єкти Application, Range, Worksheet, наприклад:

Worksheets("Sheet1").Columns(1).Font.Bold = True

'шрифт у стовпці А буде жирним

Range("e5:h9").Columns(2).Value = 25

'клітинки другого стовпця f5:f9 діапазону e5:h9 містять 25

Функція CStr перетворює числа, дати і логічні вирази у рядкові дані. Розглянемо фрагменти коду

Dim MyDouble, MyString

MyDouble = 437.324 'Змінна MyDouble містить число 437.324

MyString = CStr(MyDouble) ' MyString містить рядок "437.324"

Метод Сору застосовують до різних об’єктів, зокрема, клітинки, ді­апазону, аркуша тощо. Цей метод копіює об’єкт, який його викликав у буфер обміну, якщо параметр методу не зазначено, або у зазна­чений параметром діапазон. Формули копіюються за правилами ко­піювання формул в ЕТ, тобто з модифікацією значень. Наприклад,

Cells(3, 2).Copy 'копіюємо вміст клітинки b3 у буфер обміну

Cells(3, 2).Copy(Cells(4, 2)) 'вміст клітинки b3 копіюється в b4.

Клітинка b4 (див. рис. 4.10) міститиме формулу = cos(c4).

Значення з буфера обміну можна вставити за допомогою методу Paste. Його застосовують зазвичай до об’єкта Selection. Якщо встав­ляється не одне значення, а цілий діапазон, то область, куди встав­ляють дані, спочатку потрібно виокремити методом Select.

4. Створення макросу. Запустимо програму Microsoft Excel. Ство­римо макрос з назвою Iteration. Призначення макросу — розв’язуван­ня нелінійного рівняння методом простої ітерації. Ознайомтеся з кодом макросу, де застосовано рекурсію — звертання процедури до самої себе:

Sub lteration()

Dim n As Integer

n = WorksheetFunction.CountA(ActiveSheet.Columns(1 )) + 1

'n - номер першої непорожньої клітинки стовпця А

Cells(n, 1 ).Value = Cells(n - 1, 2).Value

'в n-ту клітинку стовпця А копіюємо число з

'n—1-ї клітинки стовпця В

Cells(n - 1, 2).Copy (Cells(n, 2))

'в n-ту клітинку стовпця В копіюється формула = COS(An)

'з n—1-ї клітинки стовпця В

Cells(n, 3).Formula = "= abs(a" + CStr(n) + "-b" + CStr(n) + ")"

'формула в стовпці С формується як рядок = abs(an - bn)

If Abs(Cells(n, 3).Vaiue) > 0.001 Then

Iteration 'якщо точність не досягнута, продовжуємо

'ітераційний процес шляхом рекурсивного виклику функції

'Iteration, інакше результат виводимо червоним кольором

Else

Cells(n, 2).Font.Color = QBColor(12) 'замальовуємо клітинку

End If

End Sub

5. Розв’язування задачі. Введемо в електронну таблицю рядки з заголовком таблиці та заголовками трьох стовпців, як показано на рис. 4.9. Розграфимо таблицю вручну. Задамо необхідні формати клітинок (тут 7 цифр після десяткової крапки) та ширину стовпців. У клітинку АЗ введемо початкове наближення, а у клітинки В3 і С3 — формули (див. рис. 4.10).

Розташуємо на аркуші ЕТ кнопку «Розв’язати рівняння» та призначимо їй макрос Iteration. Клацнемо на кнопці «Розв’язати рів­няння» і отримаємо розв’язок — таблицю, що зображена на рис. 4.9. Розв’язок задачі (0,7387603) відображено червоним кольо­ром. Для отримання розв’язку було виконано 20-3=17 ітерацій. Збережемо файл.

Вправи

  1. Вручну очистіть таблицю, зберігши лише вхідні дані (рядки 1, 2, 3). Розв’яжіть задачу з точністю 0,01 і 0,0001. Скільки треба ітерацій, щоб отримати розв’язки із заданими точностями?

  2. Модифікуйте код макросу, щоб значення точності можна було зада­вати: а) на аркуші електронної таблиці, наприклад, у клітинці D1; б) функцією InputBox.

  3. Розв’яжіть рівняння 2пх = sin их 4- п, де п - номер варіанта. Підказка. Для цього достатньо звести рівняння до вигляду, придатного до засто­сування методу простої ітерації, та змінити формулу у клітинці D3.

  4. Розташуйте на аркуші ЕТ кнопку «Очистити» і складіть для неї мак­рос очищення клітинок таблиці (за винятком рядків 1-3).

  5. Замініть у макросі Iteration команду

Cells(n, 3).Formula = "=abs(a" + CStr(n) + "b" + CStr(n) + ")",

(яка відповідає за заповнення стовпця С формулами) іншою коман­дою, застосувавши метод Copy.

  1. Розташуйте на аркуші електронної таблиці кнопку «Наступна ітера­ція» і запрограмуйте її так, щоб після натискання на неї відбувалося обчислення лише одного наступного кроку методу простих ітерацій і заповнення одного рядка в таблиці.