ЗДР першого порядку.


План.

Given

. . . (1)

План.

Оператори break, continue, return.

Оператор for

Оператори циклу (for, while).

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

 

Примітка

Використовувати дискретні змінні всередині програм неможна.

 

Панель програмування MathCAD містить два оператори циклу:

· Якщо кількість повторень циклу заздалегідь відома, використається оператор for.

· Якщо цикл повинен завершитися при виконанні деякої умови й момент виконання цієї умови невідомий, використається оператор while.

 

Оператор while

Цикл while виконується доти, поки виконується умова циклу, тому немає необхідності знати кількість повторень заздалегідь. Важливо тільки, щоб де-небудь всередині циклу або в іншій виконуваній частині програми був присутній оператор припинення циклу. У противному випадку цикл буде виконуватися нескінченно.

Якщо виконувана програма зациклилася, її можна зупинити, натиснувши клавішу Esc.

Щоб записати цикл while потрібно виконати наступні дії:

· Встановіть курсор на вільне місце введення в програмі (праворуч від вертикальної риски);

· На панелі програмування натисніть кнопку while. З'явиться шаблон із двома місцями для введення;

· Праворуч від слова while введіть умову виконання циклу. Звичайно це логічний вираз;

· У поле, що залишилося, введіть (знизу під словом while) вираз, що обчислюється в циклі;

· Якщо в циклі потрібно обчислити кілька виразів, то спочатку встановіть курсор на місце введення й натисніть кнопку Add Line стільки разів, скільки рядків буде містити цикл. Потім заповніть всі місця введення потрібними виразами. Видаліть зайві місця введення.

Відшукавши заголовок циклу while, MathCAD перевіряє умову циклу. Якщо вона виконується, то MathCAD виконує тіло циклу (оператори, що повторюються в циклі) й знову перевіряє умову. Якщо умова не виконується, MathCAD закінчує виконання циклу (див. Рис. 22.).

 

 

Рис. 22. Ітераційний цикл.

У циклі for кількість повторень циклу визначається змінною, яку потрібно задати на початку циклу. Ця змінна називається параметром циклу. Розглянемо створення такого циклу:

· Встановіть курсор на вільне місце введення в програмі (праворуч від вертикальної риски);

· На панелі програмування натисніть кнопку for (Цикл for). З'явиться шаблон із трьома місцями для введення;

· Праворуч від слова for введіть ім'я змінної циклу. Після знака введіть діапазон зміни параметра циклу так само, як це робиться за допомогою дискретної змінної. Параметром циклу може бути ряд чисел, або вектор, або список скалярів, діапазонів, векторів, розділених комами;

· У поле, що залишилося (знизу, під словом for) введіть вираз, що обчислюється в циклі;

· Якщо в циклі потрібно обчислити кілька виразів, то спочатку встановіть курсор на місце введення й натисніть кнопку Add Line стільки разів, скільки рядків буде містити цикл. Потім заповніть всі місця введення. Видаліть зайві місця введення (див. Рис. 23.).

 

Рис. 23. Лічильний цикл.

Ці оператори використовуються для керування роботою циклів і всієї програми в цілому:

· continue повертає розрахунок на початок циклу;

· break забезпечує вихід із циклу й продовження роботи програми;

· return забезпечує вихід із програми.

Робота цих операторів показана на рис. 24. Оператор continue у цьому прикладі створює список непарних чисел (вектор V), здійснюючи повернення на початок циклу, якщо залишок від ділення числа n на 2 (mod(n, 2)) дорівнює 0. Оператор break здійснює вихід із циклу й продовження роботи програми, якщо n < 0. Оператор return здійснює вихід із програми, якщо n = -10, із записом введеного коментаря (вихід із програми).

Рис. 24. Використання операторів циклу, continue, return, break.

Примітка

Для вставки в програму операторів continue, break, return, як і інших операторів програмування, потрібно користуватися тільки панеллю програмування. Їх не можна набирати із клавіатури.

 

5.8. Виведення результатів розрахунків із програми.

Підсумком дії програми є результат виконання останнього оператора програми. Якщо останнім оператором є математичний вираз, то результат його обчислення й буде результатом дії програми. Якщо потрібно виводити дані, це робиться шляхом формування всередині програми масивів.

Щоб вивести результати розрахунку, потрібно виконати наступні дії:

· Встановіть курсор на порожнє місце введення останнього оператора;

· Для виведення одного числа введіть ім'я відповідної змінної (будь-якої, котрій присвоєне будь-яке значення в програмі або в основному документі);

· Для виведення вектора або матриці введіть їхнє ім'я, але кожен елемент масиву повинен бути визначений або в програмі, або в основному документі.

 

5.9. Контрольні запитання.

1. Коли потрібно застосовувати програмування в системі MathCAD ?

2. Призначення панелі програмування.

3. Послідовність дій при створенні програмного модуля.

4. Призначення кнопки Add Line(Додати лінію).

5. Охарактеризуйте оператор локальне присвоєння.

6. Описати синтаксис та принцип роботи оператора if.

7. Призначення оператора otherwise.

8. Пояснити застосування оператора for.

9. Пояснити принципи роботи оператора while.

10. Призначення операторів continue, break, return.

11. Як вивести результати розрахунків із програми ?

 

Лекція 6. Рішення рівнянь та систем рівнянь. Пошук екстремумів функцій.

 

6.1. Рівняння з одним невідомим.

6.2. Корені полінома.

6.3. Системи рівнянь.

6.4. Пошук екстремумів функцій.

6.5. Контрольні запитання.

6.1. Рівняння з одним невідомим.

Розглянемо алгебраїчне рівняння з однією невідомою f(x)=0, наприклад, sin(x)2+cos(х)-1=0.

Для рішення таких рівнянь MathCAD має вбудовану функцію root, що, залежно від типу завдання, може включати два, або чотири аргументи й, відповідно, працює трохи по-різному.

  • root(f(х),х);
  • root(f(х),х,а,b);

де:

    • f (х) - скалярна функція, що визначає рівняння ;
    • х– аргумент функції відносно якого вирішується рівняння;
    • а,b - границі інтервалу, всередині якого відбувається пошук кореня.

Перший тип функції root вимагає додаткового задання початкового значення (guess value) змінної х. Для цього потрібно просто попередньо присвоїти х деяке числове значення. Пошук кореня буде проводитися поблизу цього числа. Таким чином, присвоєння початкового значення вимагає апріорної інформації про локалізацію (ізоляцію) кореня.

Приведемо приклад рішення дуже простого рівняння sin(x)2+cos(х)-1=0, корені якого відомі заздалегідь.

 

Рис. 25. Графічне рішення рівняння sin(x)2+cos(х)-1=0.

Графік функції f(x)=sin(x)2+cos(х)-1 і положення знайденого кореня показані на рис.13. Зверніть увагу, що, хоча рівняння має нескінченну кількість коренів xn (n=0,±1,±2,...), MathCAD знаходить (із заданою точністю) тільки один з них, х0, що лежить найближче до х=1.5. Якщо задати інше початкове значення, наприклад х=3, то рішенням буде інший корінь рівняння.

Примітка.

Таким чином, для пошуку кореня засобами MathCAD потрібна його попередня локалізація (ізоляція). Це пов'язане з особливостями обраного чисельного методу, що називається методом січних.

Зверніть увагу, що явний вид функції f(х) може бути заданий безпосередньо в тілі функції root.

 

 

Другий тип функції root включає чотири аргументи.

Коли root має чотири аргументи варто пам'ятати про дві її особливості:

  • всередині інтервалу [а,b] не повинно перебувати більше одного кореня, інакше буде знайдений один з них, заздалегідь невідомо, який саме;
  • значення f(а) і f(b) повинні мати різний знаки, інакше буде видане повідомлення про помилку.

Якщо рівняння не має дійсних коренів, але має уявні, то їх також можна знайти. Нижче наведено приклад, у якому рівняння x2+1=0, що має два уявні корені, вирішується два рази з різними початковими значеннями. При задані початкового значення 1.5 (перший рядок ) чисельний метод відшукує перший корінь (уявну одиницю i), а при початковому значенні -1.5 (третій рядок ) відшукує й другий корінь (від’ємну уявну одиницю i).

 

Для рішення цього рівняння другий вид функції root (із чотирма, а не із двома аргументами) не застосовуємо, оскільки f(х) є додатною функцією, і вказати інтервал, на границях якого вона мала б різний знак, неможливо.

Залишається додати, що f(х) може бути функцією не тільки х, а будь-якої кількості аргументів. Саме тому в самій функції root необхідно визначити, відносно якого з аргументів варто розв’язувати рівняння. Ця можливість проілюстрована нижче на прикладі функції двох змінних f(х,у) =х2-y2+3. У ньому спочатку вирішується рівняння f(x,0)=0 відносно змінної х, а потім - інше рівняння f(1,у) =0 щодо змінної у.

 

У першому рядку визначається функція f(x,y), у другому й третьому - значення, для яких буде виконуватися рішення рівняння по х та по у, відповідно. У четвертому рядку розв’язане рівняння f(x,0)=0, а в останньому - рівняння f(1,y)=0. Не забувайте при чисельному розв’язанні рівнянь щодо однієї зі змінних попередньо потрібно визначити значення інших змінних. Інакше спроба обчислити рівняння приведе до появи помилки "This variable or function is not defined above", у цьому випадку мова йде про те, що інша змінна раніше не визначена. Звичайно, можна вказати значення інших змінних безпосередньо всередині функції root, видаливши, наприклад другий та третій рядки і ввівши останні рядки у вигляді root(f (x,0) ,х)= й root(f (1,у) ,у)=, відповідно.

 

6.2. Корені полінома.

Якщо функція f(х) є поліномом, то всі корені алгебраїчного рівняння f(x)=0 можна знайти, за допомогою вбудованої функцію - polyroots(v),

де v - вектор, створений з коефіцієнтів полінома.

Оскільки поліном n-го степеня має рівно n коренів (деякі з них можуть бути комплексними), вектор v повинен складатися з n+1 елемента. Результатом дії функції polyroots є вектор, що складається з n коренів полінома. При цьому немає потреби вводити початкове наближення, як для функції root.

Коефіцієнти розглянутого в прикладі полінома

f(х) =(х-3 )(х-1)34-6х3 + 12х2-10х+3

записані у вигляді вектора в першому рядку . Першим у векторі повинен йти вільний член полінома, другим — коефіцієнт при х1 і т.д. Відповідно, останнім n+1 елементом вектора повинен бути коефіцієнт при найвищому степені хn.

Інколи вихідний поліном записаний не в розгорнутому виді, а, наприклад, як добуток декількох поліномів. У цьому випадку визначити всі його коефіцієнти можна, виділивши його й вибравши в меню Symbolics (Символіка) пункт Expand (Розкласти). У результаті символьний процесор MathCAD сам перетворить поліном у потрібну форму, користувачеві потрібно буде тільки коректно ввести всі аргументи функції polyroots.

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

Для функції polyroots можна вибрати один із двох чисельних методів - метод поліномів Лаггера (він установлений за замовчуванням) або метод парної матриці.

Для зміни методу:

  • Викличте контекстне меню, клацнувши правою кнопкою миші на слові polyroots.
  • У верхній частині контекстного меню виберіть або пункт LaGuerre(Лаггера), або Companion Matrix(Парна матриця).
  • Клацніть поза дією функції polyroots - якщо включено режим автоматичних обчислень, буде виконано перерахування коренів полінома відповідно до заново обраного методу.

Для того щоб залишити за MathCAD вибір методу рішення, установіть прапорець AutoSelect (Автоматичний вибір), вибравши потрібний пункт контекстному меню.

6.3. Системи рівнянь.

Розглянемо рішення системи n нелінійних рівнянь із m невідомими

f1(x1, ... ,хm) = 0,

fn(x1, ... ,хm) = 0,

В цьому випадку f1(x1, ... ,хm) , ..., fn(x1, ... ,хm) — деякі скалярні функції, що залежать від скалярних змінних х1,х2, ... ,хm і, можливо, ще від яких-небудь змінних. Рівнянь може бути як більше, так і менше числа змінних. Зауважимо, що систему (1) можна формально переписати у вигляді

f(x)=0, (2)

де х - вектор, складений із змінних x1,х2, ... ,хm, a f(х) - відповідно векторна функція.

Для рішення систем є спеціальний обчислювальний блок, що складається із трьох частин, які йдуть послідовно один за одним:

  • Given - ключове слово;
  • система, записана логічними операторами у вигляді рівностей і, можливо, нерівностей;
  • Find(x1... ,хm) - вбудована функція для рішення системи щодо змінних х1,..., хm.

Вставляти логічні оператори потрібно, користуючись панеллю інструментів Boolean (Булівські оператори). Якщо ви віддаєте перевагу введенню з клавіатури, пам’ятайте, що логічний знак рівності вводиться сполученням клавіш <Ctrl>+<=>. Блок Given/Find використовує для пошуку рішення ітераційними методами, тому, як і для функції root, потрібно задати початкові значення для всіх х1, ... ,xm. Зробити це необхідно до ключового слова Given. Значення функції Find є вектор, складений з рішень системи рівнянь. Таким чином, число елементів вектора v дорівнює числу аргументів Find (див. рис.26).

Рис. 26. Розв’язання системи рівнянь.

У перших двох рядках вводяться функції, які визначають систему рівнянь. Потім змінним х та у, відносно яких буде розв’язуватися система рівнянь, присвоюються початкові значення. Після цього потрібно задати ключове слово Given і два логічних оператори, що виражають розглянуту систему рівнянь. Завершує обчислювальний блок функція Find, значення якої присвоюється вектору v. Наступний рядок показує зміст вектора v, тобто рішення системи. Перший елемент вектора v є перший аргумент функції Find, другий елемент - її другий аргумент. В останніх двох рядках здійснена перевірка правильності рішення рівнянь.

Відзначимо, що рівняння можна записувати безпосередньо всередині обчислювального блоку. Таким чином, можна не задавати заздалегідь функції f(x,y) і g(х,у), як це зроблено в перших двох рядках рис. 26, а відразу написати:

х4 + у2 =3

х + 2у = 0

Така форма представляє рівняння в більш звичному і наочному вигляді, що особливо підходить для документування роботи.

Поки що ми розглянули приклад системи із двох рівнянь і таким же числом невідомих, це зустрічається найбільш часто. Але число рівнянь і невідомих може й не збігатися. Більше того, в обчислювальний блок можна додати додаткові умови у вигляді нерівностей. Наприклад, введення обмеження на пошук тільки негативних значень х та у, розглянутий вище рис. 14., приведе до знаходження іншого рішення, як це показано на рис. 27.

Рис. 27. Розв’язання системи рівнянь і нерівностей.

Зверніть увагу, що, незважаючи на ті ж початкові значення, що на рис.26., ми одержали на рис.27., інший корінь. Це відбулося саме завдяки введенню додаткової нерівності, що задано в блоці Givenу передостанньому рядку.

Якщо спробувати вирішити несумісну систему, MathCAD видасть повідомлення про помилку, що жодного рішення не знайдено, і пропозицію спробувати поміняти початкові значення або значення похибки.

Обчислювальний блок використовує константу CTOL, як похибку розв’язків рівнянь, введених після ключового слова Given. Наприклад, якщо CTOL=0.001, то розв’язок х=10 буде вважатися досягнутим і при х=10.001, і при х=9.999. Інша константа TOL визначає умову припинення ітерацій чисельним алгоритмом. Значення CTOL може бути задано користувачем так само як і TOL, наприклад, CTOL:=0.01. За замовчуванням прийнято, що СTOL=TOL=0.001, але ви за бажанням можете перевизначити їх.

Обчислювальним блоком з функцією Find можна знайти і корінь рівняння з однією невідомою. Дія Find у цьому випадку зовсім аналогічна вже розглянутим у даній лекції прикладам. Завдання пошуку кореня розглядається, як рішення системи, що складається з одного рівняння. Єдиною відмінністю буде скалярний, а не векторний тип розв’язку, що повертає функція Find.

Рис. 28 . Пошук кореня рівняння з однією невідомою за допомогою функції Find

 

6.4. Пошук екстремумів функцій.

Екстремум функції однієї змінної.

Пошук екстремуму функції містить у собі завдання знаходження локального і глобального екстремуму. Ці задачі називають ще завданнями оптимізації. Розглянемо конкретно, наприклад, функцію f(x), яка показана графіком (на рис. 29) на інтервалі (-4,2). Вона має глобальний максимум на правій границі інтервалу, локальний мінімум, локальний максимум, локальний мінімум і локальний максимум на лівій границі інтервалу (у порядку з права на ліво).

В MathCAD за допомогою вбудованих функцій вирішується тільки завдання пошуку локального екстремуму. Щоб знайти глобальний максимум (або мінімум), потрібно або спочатку обчислити всі їхні локальні значення й потім вибрати з них найбільше(найменше), або попередньо протабулювати із деяким кроком функцію в розглянутій області, щоб виділити з неї підобласть найбільших (найменших) значень функції й здійснити пошук глобального екстремуму, уже перебуваючи в його околі.

Рис. 29. Графік функції f(х) =х4+5х3-10х.

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

  • Minimize(f, x1, ... ,хm) – виводить вектор значень аргументів, при яких функція f досягає мінімуму;
  • Maximize(f, х1, ... ,хm) – виводить вектор значень аргументів, при яких функція f досягає максимуму;
    • f (x1, ... , хm,...) - функція;
    • x1, ... , xm - аргументи, по яких проводиться мінімізація (максимізація).

Всім аргументам функції f попередньо варто присвоїти деякі значення, причому для тих змінних, по яких проводиться мінімізація, вони будуть сприйматися як початкові наближення. Приклади обчислення екстремумів функції однієї змінної без додаткових умов показані на рис.30. Оскільки ніяких додаткових умов в них не вводиться, пошук екстремумів виконується для будь-яких значень.

Рис. 30. Мінімум та максимум функції однієї змінної.

Рис. 31. Умовний екстремум функції.

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

Рис. 32. Екстремум функції багатьох змінних

Обчислення екстремуму функції багатьох змінних не несе принципових особливостей у порівнянні з функціями однієї змінної. Тому обмежимося прикладом (рис. 32) знаходження мінімуму функції, показаної у вигляді графіків тривимірної поверхні й ліній рівня на рис. 33.

Рис.33. Графіки функції f (х, у).

6.5. Контрольні запитання.

1. За допомогою якої вбудованої функції системи MathCAD можна розв’язати алгебраїчне рівняння?

2. Скільки аргументів може мати функція root ?

3. В чому особливості використання функції root, яка включає два аргументи?

4. Назвіть дві особливості використання функції root , що залежить від чотирьох аргументів?

5. Як знайти уявні корені за допомогою функції root ?

6. Як розв’язати рівняння за допомогою функції root, коли функція f(х) може бути функцією не тільки х, а будь-якої кількості аргументів ?

7. За допомогою якої вбудованої функції можна знайти всі корені алгебраїчного рівняння f(x)=0, якщо функція f(х) є поліномом?

8. Опишіть процес використання функції polyroots.

9. Які чисельні методи можна реалізувати для функції polyroots ?

10. Як можна вибрати один із двох чисельних методів для функції polyroots?

11. Як застосувати спеціальний обчислювальний блокGiven/Find для рішення системи n нелінійних рівнянь із m невідомими ?

12. Як обчислювальний блок використовує константу CTOL і константу TOL ?

13. Як за допомогою обчислювального блоку Given/Find можна знайти корінь рівняння з однією невідомою ?

14. Що означає знайти локальні і глобальні екстремуми?

15. Як знайти локальні і глобальні екстремуми за допомогою системи MathCAD ?

16. Пояснити застосування вбудованих функцій Minimize(f, x1, ... ,хm) Maximize(f, х1, ... ,хm).

17. Пояснити особливості застосування вбудованих функцій Minimize, Maximize у завданнях на умовний екстремум функції мінімізації і максимізації.

 

Лекція №7. Звичайні диференціальні рівняння.

 

7.2. Обчислювальний блок Given/Odesolve.

7.3. Вбудовані функції rкfixed, Rkadapt, Bulstoer.