Форум программистов, компьютерный форум, киберфорум
Wolfram Mathematica
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.11.2018
Сообщений: 2

WhenEvent в моделировании задачи

05.11.2018, 01:37. Показов 1131. Ответов 2

Студворк — интернет-сервис помощи студентам
Нужно численно смоделировать задачу (см. вложение): летит равномерно прямолинейно шарик 1, к нему притягивается шарик 2, есть трение об землю, при ударе об землю теряется только и вся вертикальная скорость.

Пишу в Mathematica такой код:

https://www.cyberforum.ru/cgi-bin/latex.cgi?g=9.8\\<br />
m=2\\<br />
 v_0=2 \\ <br />
y_1(\text{t$\_$})=a \\<br />
 x_1(\text{t$\_$})\text{:=}t v_0\\<br />
 Q_x(\text{t$\_$})\text{:=}\frac{k \left(x_1(t)-x_2(t)\right)}{\left(\left(x_1(t)-x_2(t)\right){}^2+\left(y_1(t)-y_2(t)\right){}^2\right) \sqrt{\left(x_1(t)-x_2(t)\right){}^2+\left(y_1(t)-y_2(t)\right){}^2}}<br />
\\Q_y(\text{t$\_$})\text{:=}\frac{k \left(y_1(t)-y_2(t)\right)}{\left(\left(x_1(t)-x_2(t)\right){}^2+\left(y_1(t)-y_2(t)\right){}^2\right) \sqrt{\left(x_1(t)-x_2(t)\right){}^2+\left(y_1(t)-y_2(t)\right){}^2}}\\<br />
 \text{$\$$Assumptions}=\left\{f>0,k>0,a>-1,x_0>0,t>-1\right\}

А потом решаю систему дифуров при данных константах:

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
f=0.025;k=2;a=0;x_0=2;\\<br />
\text{NDSolve}\left[\left\{x_2(0)=x_0,y_2(0)=0,x_2'(0)=0,y_2'(0)=0,m x_2''(t)=\left(<br />
\begin{array}{cc}<br />
 \{ & <br />
\begin{array}{cc}<br />
 Q_x(t)-\text{sgn}\left(x_2'(t)\right) \left(m g-Q_y(t)\right) f & y_2(t)=0 \\<br />
 Q_x(t) & y_2(t)\neq 0 \\<br />
\end{array}<br />
 \\<br />
\end{array}<br />
\right),m y_2''(t)=Q_y(t)-g m,\text{WhenEvent}\left[y_2(t)\leq 0,\left\{y_2'(t)\to 0,y_2(t)\to 0\right\}\right]\right\},x_2,\{t,0,5\}\right]

Эвент описывает событие: если шарик опускается ниже y=0, обнуляется вертикальные скорость и координата. Кусочно-заданная функция решает, есть ли сила трения или нет (если y_2 == 0, то шарик на земле, значит, сила трения есть). При данных условиях шарики не успеют слипнуться и второй шарик всегда будет двигаться, поэтому остальные условия я опустил.

Такой код даёт ответ x_2[t=0.75] = 1.90611 (а это неверный ответ).

Если убрать кусочно-заданную функцию, то ответ тоже будет неверным, хоть и должно быть справедливо выражение y_2[t] == 0 при любом t:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\text{NDSolve}\left[\left\{x_2(0)=x_0,y_2(0)=0,x_2'(0)=0,y_2'(0)=0,m x_2''(t)=Q_x(t)-f \text{sgn}\left(x_2'(t)\right) \left(g m-Q_y(t)\right),m y_2''(t)=Q_y(t)-g m,\text{WhenEvent}\left[y_2(t)\leq 0,\left\{y_2'(t)\to 0,y_2(t)\to 0\right\}\right]\right\},x_2,\{t,0,5\}\right]
(в таком случае x_2[t=0.75] = 1.9749)

Теперь, если поменять условие эвента с y_2 <= 0 на y_2 == -0.001 получится верный ответ:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\text{NDSolve}\left[\left\{x_2(0)=x_0,y_2(0)=0,x_2'(0)=0,y_2'(0)=0,m x_2''(t)=Q_x(t)-f \text{sgn}\left(x_2'(t)\right) \left(g m-Q_y(t)\right),m y_2''(t)=Q_y(t)-g m,\text{WhenEvent}\left[y_2(t)=-0.001,\left\{y_2'(t)\to 0,y_2(t)\to 0\right\}\right]\right\},x_2,\{t,0,5\}\right]

причём, если поставить условие y_2 == -0.0001, то NDSolve ломается на t = 0.85 (а при предыдущем, y_2 == -0.001, он ломается на t = 400).

Наверно, я не совсем понимаю, как должны работать WhenEvent. Как нужно исправить код, чтобы всё работало, как надо?

вот условие задачи
Вложения, ожидающие проверки
Тип файла: png Screenshot_1023.png
Тип файла: png Screenshot_1024.png
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.11.2018, 01:37
Ответы с готовыми решениями:

Объем в моделировании при моделировании по 3 проекциям
только начал изучать правда, вопрос поэтому простой, наверное - но вот никак не могу вникнуть в суть. начинают строить 3d модель по трем...

Возможно в моделировании из 2D в 3D
В какой программе это возможно, я не очень разбираюсь в моделировании, но мне оно очень нужен для диплома

Моделировании работы с *.bat
Народ, подскажите пожалуйста Задали сделать модель командного процессора типа cmd. С небольших кол-вом команд и т.п. Одно из условий,...

2
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,489
05.11.2018, 01:40
Rustik2000, было бы лучше, если бы был прикреплен к сообщению архив рабочего документа, а не просто операторы на картинке...
0
0 / 0 / 0
Регистрация: 05.11.2018
Сообщений: 2
05.11.2018, 01:53  [ТС]
В архиве рабочий документ с небольшими пояснениями
Вложения
Тип файла: rar 1_2017 — копия (2).rar (69.6 Кб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2018, 01:53
Помогаю со студенческими работами здесь

Проблема при моделировании
Всем добрый день. Хочу выполнить моделирование выпрямителя, но возникла проблема. Не могу в библиотеке найти блок &quot;Bus Bar&quot;....

Ошибка при моделировании
Ребят, подскажите, что означает эта ошибка: &quot;ERROR: Sequence name not legal for column&quot;.

Ошибка в моделировании системы Java
Подскажите пожалуйста почему ругается: java.lang.RuntimeException: Недопустимое значение: NaN at...

Метод Монте-Карло в моделировании
Уважаемые форумчане, помогите пожалуйста исправить программу, сижу второй день :-|:umnik:,но при разных параметрах программа работает...

При моделировании вылетает из программы
Подскажите, пожалуйста, в чем может быть проблема. При запуске моделирования ошибок не выдает, программа GPSS пишет &quot;Model...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru