Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кравчук(mathcad) / 2 семестр / MathCAD. Лабораторний практикум. 2010

.pdf
Скачиваний:
274
Добавлен:
29.02.2016
Размер:
11.67 Mб
Скачать

Лабораторна робота №9. Модульне програмування в декількох документах.

Виконання завдання "Багаторядкова функція користувача"

Мета:

закріпити навики перекладу модульного алгоритму розв'язання задачі з мови блок-схем на вхідну мову MathCAD;

навчитися створювати програми-функції - багаторядкові функції користувача для знаходження характеристик різних масивів;

виконати індивідуальне завдання "Багаторядкова функція користувача".

Теоретичні відомості

Модульне програмування в декількох документах

МП у декількох документах складається із трьох етапів.

I.Створення бібліотек заздалегідь визначених простих змінних, масивів та ПФ в окремих документах MathCAD з іменами, наприклад,

LR09_Lib_Form.xmcd, LR09_Lib_Find.xmcd, LR09_Lib_Sort.xmcd.

II.Установлення зв'язку між файлами бібліотек та головним робочим документом (РД) MathCAD за допомогою спеціального оператора

Reference (Посилання).

III.Виклик об'єктів із файлів бібліотек у головний робочий документ MathCAD.

Для вставки оператора Reference у РД MathCAD виконайте наступні дії.

1.Клацніть кнопкою миші в тому місці РД, куди буде вставлений оператор Reference. Як правило, даний оператор розміщується на початку головного РД після оператора ORIGIN:=1, щоб індексація масивів починалася

зодиниці не тільки в головному РД, та й у файлах бібліотек.

2.Зверніться до пункту головного меню MathCAD Insert (Вставка) і виберіть команду Reference (Посилання), щоб з'явилося діалогове вікно Insert Reference (Вставка посилання):

3. У полі введення Insert Reference to file (Вставка посилання на файл) цього діалогового вікна введіть повне ім'я файлу бібліотеки:

D:\ Мои документы \ Викладач \ Група \ Студент \ LR09_Lib_Form.xmcd,

або для пошуку цього файлу клацніть кнопку Browse (Огляд). Пояснювальний

130

текст, що знаходиться нижче цього поля, "Enter or locate path to the document you want to reference. This can be a document on your hard drive, or a document on your company's network" перекладається таким чином: "Введіть або визначте шлях до документу, на який ви хочете послатися. Це може бути документ на Вашому жорсткому диску, або документ у локальній мережі Вашої компанії". Для того щоб в операторі Reference правильно відображалась кирилиця, необхідно при введенні будь-якого оператора, що передує операторові Reference вибрати шрифт, який підтримує кирилицю, наприклад, Arial Cyr.

4.Обов'язково клацніть кнопку OK .

5.Повторіть ці дії для вставки посилань на файли інших бібліотек:

LR09_Lib_Find.xmcd, LR09_Lib_Sort.xmcd

Після виконання цих дій у РД з'являться такі оператори Reference:

Тепер у РД стають доступними ті змінні та ПФ, що визначені у файлах бібліотек, і їх можна викликати.

Якщо клацнути на деякому операторі Reference, MathCAD відкриє відповідний файл бібліотеки і його можна буде відредагувати. Але ці зміни стануть доступними в головному РД після того як:

перезаписати файл бібліотеки та головний РД, закрити обидва файли, і знову відкрити головний РД;

або перезаписати файл бібліотеки, знищити оператор Reference; знову вставити оператор Reference.

Тому для полегшення створення й налагодження ПФ, які будуть розміщені у файлах бібліотек, доцільно притримуватися такої технології програмування:

1)спочатку ПФ розміщуються на початку головного РД;

2)здійснюється налагодження ПФ для правильної роботи;

3)ПФ вилучаються з головного РД і розміщуються у відповідних бібліотеках;

4)на початку кожної бібліотеки створюється текстова область з описом синтаксису та дії наявних ПФ;

5)копії цих текстових областей розміщуються в головному РД після відповідних операторів Reference, щоб можна було бачити синтаксис та дію ПФ із кожної бібліотеки;

6)усі файли перезаписуються на диск і закриваються;

7)відкривається головний РД, у якому тепер усі виклики ПФ здійснюються через оператори Reference із файлів бібліотек.

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

131

Індивідуальні завдання для виконання лабораторної роботи

Умову індивідуального завдання "Багаторядкова функція користувача" візьміть із навчального посібника Visual Basic 6.0 відповідно до власного варіанта, який такий самий як у 1 семестрі, тобто дорівнює номеру студента в списку групи за 1 семестр [1, с. 161-169].

Зразок виконання лабораторної роботи

Умова. Задано три вектори:

x = xi ,i =1, 14 ; y = yj , j= 1, 13; z = zk , k =1, 15.

Упорядкувати вектор c = cq ,q =1,3 по спаданню, який складається з

компонентів:

с1 – максимальне значення серед від’ємних компонентів вектора x; с2 – максимальне значення серед від’ємних компонентів вектора y; с3 – максимальне значення серед від’ємних компонентів вектора z.

Формування векторів x, y та z виконати за допомогою вбудованої функції rnd(x) на проміжку [-30, 30] у вигляді програми-функції в окремому документі MathCAD з ім'ям LR09_Lib_Form.xmcd. ПФ для пошуку компонентів вектора c розмістити в окремому документі MathCAD з ім'ям LR09_Lib_Find.xmcd. ПФ для впорядкування компонентів вектора c розмістити в окремому документі

MathCAD з ім'ям LR09_Lib_Sort.xmcd.

Порядок виконання роботи

1.Відкрийте документ MathCAD LR01_Прізвище.xmcd і запишіть його на жорсткий диск у папку D:\Мои документы\Викладач\Група\ під іменем LR09_Прізвище.xmcd. Це буде головний робочий документ.

2.Відредагуйте першу текстову область: а) змініть номер лабораторної роботи з №1 на №9; б) замініть речення "Лінійний алгоритм" на "Модульне програмування

вдекількох документах" і в наступному рядку введіть текст: "Багаторядкова функція користувача". Іншу частину робочого листка можна очистити.

3.Проаналізуйте умову завдань зразка даної лабораторної роботи, блок-схему алгоритму виконання зразка (див. нижче), умову власного варіанта, та накресліть блок-схему алгоритму виконання завдань власного варіанта за допомогою стандартних графічних символів - блоків.

4.Лістинг виконання завдань зразка лабораторної роботи з MathCAD №9 наведений на рис. 2.38.1 - 2.38.3.

5.Проаналізуйте лістинг виконання завдань зразка даної лабораторної роботи, і виконайте відповідним чином завдання власного варіанта, переклавши блок-схему алгоритму на вхідну мову MathCAD.

6.Оскільки генератори випадкових чисел у Visual Basic та MathCAD різні, то порівняти результати виконання даного завдання в цих двох системах програмування можна тільки якісно.

132

133

Рис. 2.38.1. Лістинг виконання зразка ЛР з MathCAD №9: головний робочий документ

134

Рис. 2.38.2. Продовженнялістингу виконання зразка ЛР з MathCAD №9: головний робочий документ

Рис. 2.38.3. Закінченнялістингу виконання зразка ЛР з MathCAD №9: файли бібліотек

135

7.Оформіть звіт про виконання лабораторної роботи за наступними пунктами: Назва роботи, Тема роботи, Варіант, Група, Прізвище; Умова варіанта, Результати розрахунків; Висновки: перелік засвоєних елементів вхідної мови

MathCAD.

8.Захистіть роботу у викладача, давши відповіді на контрольні запитання.

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

1.У чому полягають особливості МП у декількох документах?

2.Чому МП у декількох документах є найбільш сучасним стилем програмування?

3.Який документ MathCAD називається головним?

4.Що таке бібліотека програм-функцій?

5.Як використовуються програми-функції для МП у декількох документах?

6.Для чого і яким оператором установлюється зв'язок між головним робочим документом MathCAD, і файлом бібліотеки?

7.Дія яких операторів головного робочого документа MathCAD поширюється також і на файли бібліотек?

8.Як швидко відкрити файл бібліотеки для редагування?

9.Що треба зробити, щоб зміни у файлі бібліотеки стали доступними в головному робочому документі MathCAD?

136

2.2.2. Змістовий модуль 4. Mathcad: розв'язання систем рівнянь

Лабораторна робота №10. Нелінійні рівняння та системи (СНР).

Виконання завдання "Розв'язання нелінійних рівнянь та систем"

Мета:

навчитися графічним методом відокремлювати корені нелінійних рівнянь;

набути навиків уточнення коренів нелінійних рівнянь та систем нелінійних рівнянь (СНР) за допомогою вбудованих функцій;

виконати індивідуальне завдання "Розв'язання нелінійних рівнянь тасистем".

Теоретичні відомості

Розв’язання нелінійних рівнянь

В інженерних розрахунках зустрічаються рівняння виду

f(x) = 0 ,

(2.1)

де функція f(x) повинна бути визначена й неперервна на деякому скінченому або нескінченному інтервалі (a, b), тобто коли a < x < b.

Рівняння (1) називається лінійним, якщо функція f(x) є поліномом

(многочленом, багаточленом) першого степеня

f(x) = P1(x) = a1 x1 + a0 x0 = a1 x + a0 ,

тобто коли вона лінійна. Для всіх інших випадків рівняння (2.1) називається нелінійним.

Розрізняють два види нелінійних рівнянь: алгебраїчні та трансцендентні.

Якщо функція f(x) є алгебраїчним поліномом n-го степеня f(x) = Pn(x) = an xn + an-1 xn-1 + … + a1 x + a0 ,

то рівняння (2.1) називається алгебраїчним нелінійним рівнянням (АНР). Якщо ж функція f(x) містить елементарні функції (тригонометричні, логарифмічні, показникові та ін.), то таке рівняння називається трансцендентним нелінійним рівнянням (ТНР).

Значення x* називається коренем рівняння (1), якщо воно перетворює рівняння (1) на тотожність, тобто f(x*) 0.

Точно знайти корені рівняння (2.1) можна тільки в окремих випадках. Тому для його розв’язання використовують чисельні методи, які дозволяють обчислити наближені значення кореня цього рівняння із заданою точністю.

Процес обчислення коренів нелінійного рівняння складається із двох етапів:

1)відокремлення коренів, тобто визначення графічним методом або методом табулювання доволі малих відрізків, які містять лише по одному кореню рівняння;

2)уточнення кореня, тобто доведення його до заданої точності, чисельними методами (дихотомії, або бісекції, або половинного ділення; дотичних Ньютона; хорд або січних; простої ітерації).

ВMathCAD для уточнення кореня будь-якого нелінійного рівняння застосовується вбудована функція root(f(var), var [, a, b]).

137

Функція root повертає значення змінної var, яке знаходиться між a і b, та робить вираз f(var) рівним до нуля із заданою точністю. Цій функції повинно передувати початкове наближене значення змінної var.

Функція root для уточнення значення кореня застосовує метод хорд (січних). Початкове значення змінної var є першим наближенням до кореня, а процес уточнення завершується, коли значення функції f(var) при наступному наближенні стає менше значення вбудованої змінної TOL (Convergence Tolerance - Допуск збіжності), яке за умовчанням дорівнює TOL = 10-3. Для зміни значення TOL можна ввести в РД оператор TOL := <нове значення>, або в головному меню MathCAD вибрати пункти Tools => Worksheet Options… => Built-In Variables (Інструменти => Параметри робочого листка… => Вбудовані змінні) і на цій вкладці змінити значення TOL.

Розв’язання систем нелінійних рівнянь (СНР)

В MathCAD 14 максимальне число рівнянь у системах і відповідно змінних доведено до 400, а для розв’язання застосовано ітераційні методи.

Для уточнення коренів системи нелінійних рівнянь використовуються вбудовані функції наступних форматів:

Find(var1, var2, …) або find(var1, var2, …) (Знайти);

MinErr(var1, var2, …) або minerr(var1, var2, …) (Мінімальна похибка),

де var1, var2, … - список невідомих.

Розглянемо технологію розв'язання СНР на прикладі системи із двох рівнянь: y = f1(x), y = f2(x).

Алгоритм розв'язання СНР

1.Побудувати на одному графіку обоє рівняння.

2.Із графіку знайти малі відрізки на осях OX та OY, у які попадають координати точки перетину кривих, і на яких обидві функції неперервні й монотонні (не мають екстремумів та особливих точок).

3.Вибрати границі цих відрізків у якості початкових наближень x0, y0 для відповідних невідомих:

x0 := < границя відрізка по осі OX >, y0 := < границя відрізка по осі OY >.

4.Надрукувати правіше або нижче ключове слово Given або given, яке відкриває блок розв'язання СНР, тобто вказує MathCAD на те, що далі слідує система рівнянь {або | і} нерівностей, які накладають обмеження на пошук розв'язків.

5.Правіше або нижче ввести рівняння (нерівності) у довільному порядку. Між правими та лівими частинами рівнянь поставити логічний (жирний) знак

рівності, а в нерівностях - знаки відношень <, >, , , .

6. Увести довільний вираз, що включає виклик вбудованих функцій find(x0, y0) або minerr(x0, y0), який і закриває блок розв’язання СНР. Оскільки виклики мають більше одного аргументу, то ці функції повернуть вектор розв’язків.

Цей алгоритм може бути застосованим для розв'язання й одного рівняння.

138

Приклад. Знайти корені кубічного рівняння w(u) := u3 - 3u2 – 30u + 10.

Зауваження: при застосуванні функції minerr необхідно додатково перевірити істинність одержаних результатів.

Причинами відсутності розв'язку може бути:

1)рівняння не мають дійсних коренів;

2)початкове наближення задане дійсне, а корені комплексні, і навпаки;

3)у процесі пошуку розв'язку послідовність наближень попала в точку локального мінімуму;

4)у процесі пошуку розв'язку послідовність наближень попала в точку, з якої метод мінімізації не може визначити подальший напрямок руху;

5)можливо, що задача при даному значенні TOL не може бути розв'язана, і його необхідно збільшити.

Обчислення коренів алгебраїчного нелінійного рівняння.

Для обчислення всіх коренів алгебраїчного нелінійного рівняння

f(x) = Pn(x) = an xn + an-1 xn-1 + … + a1 x + a0 = 0

застосовується вбудована функція polyroots(a), яка не потребує початкового наближення, і обчислює відразу всі корені, як дійсні, так і комплексні.

Функція polyroots повертає вектор, що містить усі корені полінома, коефіцієнти якого занесені у вектор a

a = {a0 , a1 … an}.

Комплексним числом називається вираз z = x + i ∙ y,

де x і y - дійсні числа, а i - уявна одиниця, яка задовольняє визначенню i ∙ i = i2 = -1.

Число x називається дійсною частиною комплексного числа z, а число y - уявною частиною комплексного числа z, і позначаються вони так:

x = Re(z) = Re z, y = Im(z) = Im z.

Модуль комплексного числа вводиться за формулою z x2 y2 .

Число z x i y називається спряженим до числа z = x + i ∙ y. Воно має таку властивість: z z z2 Re z 2 Im z 2.

139