Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Застосування: Обчислення 3D Траєкторій з Використанням Циклів While | Візуалізації
Основи Matlab
course content

Зміст курсу

Основи Matlab

Основи Matlab

1. Базовий синтаксис та кодування у текстовому редакторі
2. Основи Кодування
3. Навчання Через Застосування
4. Візуалізації
5. Рекурсія та Множення Матриць

book
Застосування: Обчислення 3D Траєкторій з Використанням Циклів While

Тут ви дізнаєтесь, як обчислювати траєкторії об'єктів, що рухаються у 3D-просторі, а також ознайомитесь з іншим аспектом програмування: цикли while, унікальні властивості яких роблять їх такими ж базовими елементами, як і for-цикли та умовні оператори if, хоча вони зустрічаються не так часто.

Структура циклу While

Цикли while схожі на for-цикли, але їхня ключова відмінність полягає у механізмі контролю ітерацій. Замість фіксованої кількості повторень, цикл while виконується доти, доки булева умова істинна. Ось як це працює:

  • Спочатку перевіряється булева умова;

  • Якщо умова істинна, виконується код всередині циклу;

  • Після виконання коду умова перевіряється знову. Якщо вона все ще істинна, код виконується ще раз. Це триває, доки умова залишається істинною;

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

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

Оскільки цикли while повторюються, доки булева умова не стане хибною, існує ризик (через обставини або помилку), що булева умова завжди буде істинною, і цикл while виконуватиметься нескінченно!
Тому, якщо ви помітили, що ваша програма виконується значно довше, ніж зазвичай, варто зупинити її у Matlab, натиснувши:

  • ctrl + c;

  • cmd + c.

Щоб зупинити виконання коду та переосмислити логіку й код.

Рівняння руху в 1D з постійним прискоренням

У відео використовується 1D рівняння руху:

  • t: час (у секундах);

  • x(t): положення об'єкта в момент часу t;

  • xi: початкове положення об'єкта;

  • vi: початкова швидкість об'єкта;

  • a: прискорення об'єкта (вважається сталим).

Це застосовується незалежно до ортогональних компонент x, y, z положення, швидкості та прискорення за допомогою компонентних матричних операцій.

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

Те, що x, y, z є ортогональними (перпендикулярними), дозволяє застосовувати це до кожного з цих вимірів окремо, і водночас це можна розглядати як аналіз одновимірної задачі для спрощення розуміння.

Завдання

Створіть власну версію програми з відео, розуміючи цілі:

  1. Імпортуйте початкові положення та швидкості як окремі матриці, а мітки об'єктів — як комірковий масив;

  2. Окремо згрупуйте їх у дві 3D-матриці так, щоб положення (x, y, z координати) кожного об'єкта могли змінюватися по стовпцях власного 2D шару. Те саме можна зробити для початкових швидкостей (хоча вони не змінюються — це завжди початкові швидкості), щоб забезпечити узгодженість індексації надалі;

  3. For-цикл по об'єктах для обчислення 3D-траєкторії кожного об'єкта;

  4. Обчисліть траєкторію кожного об'єкта у while-циклі, де булевий вираз спочатку перевіряє, чи об'єкт ще знаходиться над землею (його z-координата ≥ 0). Усередині while-циклу застосуйте одновимірне рівняння руху для обчислення нового положення (застосовуйте його до x, y, z координат незалежно за допомогою матричних операцій). Обчислення положення у будь-який момент часу повинно залежати ТІЛЬКИ від:

    • Початкового положення об'єкта;

    • Початкової швидкості об'єкта;

    • Часу, що розглядається.

Воно не повинно залежати від попереднього положення.

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

  • Обмежте for-цикл однією ітерацією або, еквівалентно, видаліть об'єкти 2 та 3 (дані та мітки) з Excel-файлу, щоб перевірити роботу програми з одним об'єктом;

  • Непараболічні траєкторії можуть свідчити про проблему із застосуванням рівняння руху або некоректне програмування компонентних обчислень (зверніть увагу на крапки перед множенням тощо);

  • Початкові положення (перший стовпець кожного 2D шару) у вашій 3D-матриці траєкторій повинні збігатися з тими, що записані у Excel-файлі;

  • Не повинно бути жодних від'ємних значень (кожен об'єкт стартував із додатним положенням і швидкістю у всіх напрямках x, y, z);

  • Перевірте, як було визначено прискорення, або спробуйте встановити його рівним нулю. Це повинно дати рух із постійною швидкістю, що утворює прямі лінії при побудові графіка (якщо подивитися зверху на 3D-графік, який показує лише рух у напрямках x, y, де прискорення було нульовим, ви побачите те саме);

  • Відповідно до нашої системи координат, прискорення вільного падіння становить -9.8 м/с² (вниз до Землі), а не +9.8.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

course content

Зміст курсу

Основи Matlab

Основи Matlab

1. Базовий синтаксис та кодування у текстовому редакторі
2. Основи Кодування
3. Навчання Через Застосування
4. Візуалізації
5. Рекурсія та Множення Матриць

book
Застосування: Обчислення 3D Траєкторій з Використанням Циклів While

Тут ви дізнаєтесь, як обчислювати траєкторії об'єктів, що рухаються у 3D-просторі, а також ознайомитесь з іншим аспектом програмування: цикли while, унікальні властивості яких роблять їх такими ж базовими елементами, як і for-цикли та умовні оператори if, хоча вони зустрічаються не так часто.

Структура циклу While

Цикли while схожі на for-цикли, але їхня ключова відмінність полягає у механізмі контролю ітерацій. Замість фіксованої кількості повторень, цикл while виконується доти, доки булева умова істинна. Ось як це працює:

  • Спочатку перевіряється булева умова;

  • Якщо умова істинна, виконується код всередині циклу;

  • Після виконання коду умова перевіряється знову. Якщо вона все ще істинна, код виконується ще раз. Це триває, доки умова залишається істинною;

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

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

Оскільки цикли while повторюються, доки булева умова не стане хибною, існує ризик (через обставини або помилку), що булева умова завжди буде істинною, і цикл while виконуватиметься нескінченно!
Тому, якщо ви помітили, що ваша програма виконується значно довше, ніж зазвичай, варто зупинити її у Matlab, натиснувши:

  • ctrl + c;

  • cmd + c.

Щоб зупинити виконання коду та переосмислити логіку й код.

Рівняння руху в 1D з постійним прискоренням

У відео використовується 1D рівняння руху:

  • t: час (у секундах);

  • x(t): положення об'єкта в момент часу t;

  • xi: початкове положення об'єкта;

  • vi: початкова швидкість об'єкта;

  • a: прискорення об'єкта (вважається сталим).

Це застосовується незалежно до ортогональних компонент x, y, z положення, швидкості та прискорення за допомогою компонентних матричних операцій.

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

Те, що x, y, z є ортогональними (перпендикулярними), дозволяє застосовувати це до кожного з цих вимірів окремо, і водночас це можна розглядати як аналіз одновимірної задачі для спрощення розуміння.

Завдання

Створіть власну версію програми з відео, розуміючи цілі:

  1. Імпортуйте початкові положення та швидкості як окремі матриці, а мітки об'єктів — як комірковий масив;

  2. Окремо згрупуйте їх у дві 3D-матриці так, щоб положення (x, y, z координати) кожного об'єкта могли змінюватися по стовпцях власного 2D шару. Те саме можна зробити для початкових швидкостей (хоча вони не змінюються — це завжди початкові швидкості), щоб забезпечити узгодженість індексації надалі;

  3. For-цикл по об'єктах для обчислення 3D-траєкторії кожного об'єкта;

  4. Обчисліть траєкторію кожного об'єкта у while-циклі, де булевий вираз спочатку перевіряє, чи об'єкт ще знаходиться над землею (його z-координата ≥ 0). Усередині while-циклу застосуйте одновимірне рівняння руху для обчислення нового положення (застосовуйте його до x, y, z координат незалежно за допомогою матричних операцій). Обчислення положення у будь-який момент часу повинно залежати ТІЛЬКИ від:

    • Початкового положення об'єкта;

    • Початкової швидкості об'єкта;

    • Часу, що розглядається.

Воно не повинно залежати від попереднього положення.

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

  • Обмежте for-цикл однією ітерацією або, еквівалентно, видаліть об'єкти 2 та 3 (дані та мітки) з Excel-файлу, щоб перевірити роботу програми з одним об'єктом;

  • Непараболічні траєкторії можуть свідчити про проблему із застосуванням рівняння руху або некоректне програмування компонентних обчислень (зверніть увагу на крапки перед множенням тощо);

  • Початкові положення (перший стовпець кожного 2D шару) у вашій 3D-матриці траєкторій повинні збігатися з тими, що записані у Excel-файлі;

  • Не повинно бути жодних від'ємних значень (кожен об'єкт стартував із додатним положенням і швидкістю у всіх напрямках x, y, z);

  • Перевірте, як було визначено прискорення, або спробуйте встановити його рівним нулю. Це повинно дати рух із постійною швидкістю, що утворює прямі лінії при побудові графіка (якщо подивитися зверху на 3D-графік, який показує лише рух у напрямках x, y, де прискорення було нульовим, ви побачите те саме);

  • Відповідно до нашої системи координат, прискорення вільного падіння становить -9.8 м/с² (вниз до Землі), а не +9.8.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 3
some-alt