Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MIP_Lab_2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
227 Кб
Скачать
☆

3. Зв’язування значень параметрів просторово розподілених об’єктів і процесів із координатами в межах моделі.

Розв’яжемо для прикладу просту задачу. Нехай на ділянці, визначеною матрицею Spot, знаходиться джерело забруднення атмосфери результат дії якого також проявляється у вмісті певної речовини у ґрунті на цій ділянці. Джерело знаходиться у комірці (0,0). Концентрація речовини у ґрунті зворотно-пропорційно залежить від відстані, що описується наступним законом:

Концентрація = 0,00054*(1/Відстань) мг/м.куб.

В Mathcad це треба записати наступним чином:

Результат обрахування занесений в матрицю Concentration

Перевірте це:

Завдання. Розрахуйте концентрації, що зменшуються за законом

Концентрація = Відстань*(2/7)+Відстань2*(4/19)

4. Визначення перебігу часу у імітаційних моделях

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

або

5. Циклічні операції в Mathcad

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

А) Збільшити кожен елемент вектора на постійне значення

Б) Помножити або поділити кожен елемент на постійне значення

В) Виконати з кожним елементом матриці математичну операцію з числом, значення якого залежить від номеру комірки

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

Знадобилися всього 3 математичних вирази для отримання заповненої матриці відстаней.

Завдання. Заповніть матрицю відстаней для прямокутної ділянки довжиною 100, шириною 400 з кроком 50.

Розглянемо явні цикли в Mathcad.

Цикл – це спеціальна програмна структура (оператор мови програмування). Цикл дозволяє багато разів повторити одну й ту ж послідовність команд в залежності від певних умов. Мова програмування, яку підтримує Mathcad має вбудовані оператори циклів.

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

Рис.1. Прямий порядок обходу матриці

Можна задати й інший порядок обходу матриці, наприклад такий, як на наступних рисунках

Рис.2. Зворотний порядок обходу матриці

Рис.3. Прямий горизонтальний порядок обходу матриці

Оскільки елементами матриці є числа, то операція яка з ними виконується це – математична операція. Її можна оформити у вигляді окремої функції.

Для прикладу, напишемо просту функцію у(х)=х2-3:

Як бачите, вона підносить число-аргумент у квадрат, а від результату віднімає 3. В матриці Matrix – 9 елементів. Для того, щоб застосувати до кожного з них функцію Pryklad_1(x) без оператору циклів необхідно було б зробити це по черзі з кожним елементом 9 разів – так як показано нижче:

і так далі.

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

Вищенаведений приклад э дуже простим приклад. Він застосовує всього одну операцію до кожного елемента. Таки цикли можна виконувати й неявно (див. приклад нижче)!

Застосування оператору циклу дозволяє легко виконувати повторні операції з елементами матриці.

Для обходу матриці з застосуванням до кожного елемента функції Pryklad_1(x) запишемо нову функцію:

В цій короткій програмці окремі записи і символи означають наступне:

  1. Matrix_obhod() – ім’я нової функції яка здійснює обхід матриці;

  2. (Nazva) – Змінна-аргумент, замість якої при використанні треба писати ім’я тієї матриці, по якій здійснюється обхід;

  3. вертикальна лінія – символ тексту програми (вставляється з панелі «Programming» кнопкою «Add Line»;

  4. for – спеціальний оператор циклу, який означає «доки», він вводиться не з клавіатури, а лише натисканням однойменної кнопки на панелі «Programming»;

  5. j та i – тимчасові інтервальні змінні, які пробігають значення «від 0 – до номера останнього стовпчика» та «від 0 – до номера останнього рядку». Запис типу «j 0 .. 10» означає «число j належить (входить до) діапазону значень від 1 до 10»

  6. - обходити по черзі всі стовпчики, причому cols(Nazva) – це кількість стовпчиків у матриці, а cols(Nazva)-1 – це номер останнього стовпчику (в матриці з 3-х стовпчиків він дорівнює «2»;

  7. - обходити по черзі всі рядки, причому rows(Nazva) – це кількість рядків у матриці, а rows(Nazva)-1 – це номер останнього рядку;

  8. m – тимчасова змінна-матриця, до якої заноситься результат обрахування;

  9. mi,j – поточний елемент тимчасової змінної-матриці (i – номер рядку (в Mathcad за замовчанням нумерація завжди починається з 0), а j- номер стовпчика (аналогічно);

  10. Pryklad(Nazvai,j) - операція яка виконується над поточним елементом Nazvai,j (в стовпчику i, та в рядочку j) матриці Nazva.

  11. - запис, який означає «повернути матрицю-змінну m як результат виконання програми».

Така програма є нечутливою до зміни кількості стовпчиків і рядків у матриці-аргументі.

Завдання. Визначить на аркуші Mathcad функцію Matrix_obhod(), як в наведеному вище прикладі, і застосуйте її до матриць Spot і Concentration.

Обхід інтервальних змінних здійснюється простим неявним циклом

Завдання. Запишіть на аркуші Mathcad попередній приклад.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]