Kodomo

Пользователь

Условия и циклы

Конспект

План рассказа

Контрольная работа

Предположим, что у нас уже описан класс Vector таким, как мы его описали на прошлой лекции, т.е, например, так:

   1 class Vector(object):
   2     def __init__(self, x, y):
   3         self.x = x
   4         self.y = y
  1. Опишите функцию dot_product, которая получает на вход два вектора и возвращает их скалярное произведение.

  2. Что ответит питон на такое:
       1  >>> def f(b, a):
       2  ...     return a - b
       3  ...     return a + b
       4  >>> a = 8
       5  >>> b = 50
       6  >>> f(a, b)
    

Задание

Следующая часть модели солнечной системы: собственно вся модель.

Нам нужно сделать класс Model, который будет хранить в себе список состояний всех планет. Ещё у этого класса есть параметр delta_t – шаг симуляции.

У этого класса нужно сделать метод step, который делает переход от предыдущего состояния модели к следующему – через интервал delta_t.

Создав такой класс для моделей, сделайте модель с Землёй, Луной и Солнцем из прошлого занятия, запустите симуляцию с шагом 1 час на 365 дней вперёд и убедитесь, что за это время Земля совершила примерно1 полный оборот вокруг Солнца.

Подсказки

Состояние планеты вполне можно считать синонимом понятия "объект планета".

Задействованные физические уравнения очень простые:

  1. a = F / m – силу мы посчитали в прошлый раз, масса у нас есть; получаем ускорение.

  2. v' = v + a * delta_t – решение уравнения движения для скорости при постоянном ускорении. (Под записью v' имеется в виду скорость в следующий момент времени, а не производная).

  3. x' = x + v * delta_t – решение уравнения движения для положения2 при постоянной скорости.

Понятно, что в уравнениях 2 и 3 ни ускорение, ни скорость не являются постоянными, и это, собственно, и является основным источником ошибки. Тем не менее, для простых ситуаций или для достаточно маленького delta_t ошибка будет достаточно мала.3

Если мы подвинем одну планету, потом посчитаем, куда нужно двигать другую планету, потом третью – то, наверное, получится менее точная модель, чем если мы сначала посчитаем, куда нужно подвинуть каждую планету, а потом дружно их все подвинем. А на самом деле, нам достаточно прежде, чем двигать, запомнить силы притяжения, действующие между планетами.

Не стоит пытаться посчитать силу притяжения планеты к самой себе!

Упражнения

Упражнения не приближают вас к цели написания модели солнечной системы и не требуются для получения зачёта. Их можно делать сколько угодно – пока не наступит посинени^W понимание, – или не делать вовсе. Если вы их будете делать, какие-нибудь комментарии на тему того, хорошо, плохо или совсем не о том, я буду давать. Разумеется, упражнения можно делать в любом порядке; я постарался приблизительно упорядочить упражнения в порядке возрастания сложности.

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

Все упражнения совершаются в файле excercises.py, и как всегда, я настоятельно прошу почаще делать коммиты (самое редкое – после написания и отладки каждой функции), делать к коммитам содержательные комментарии и не забывать хотя бы изредка делать push'и. Сейчас всё это мелочи и не существенно, но будет очень сильно играть когда вы будете работать в команде или когда вы будете использовать репозитории для себя для хранения истории.

Ни одна из функций не должна менять входные данные, если на вход даётся изменяемый объект.

  1. В моём случае Земля ушла от своих исходных координат примерно на 1 миллион километров, что кажется приемлемо мало, учитывая, что при этом она почти сохранила своё расстояние до Солнца; точнее, она оказалась на 1 миллион километров по своей орбите не доходя до точки возврата; если симуляцию продолжить после этого ещё на 11 часов, она оказывается в трёх тысячах от точки возврата, что меньше радиуса Земли; получается, такая грубая модель дала нам ошибку примерно в 11 часов на год (1)

  2. В физике принято называть это радиус-вектором, но у нас уже есть радиус планет, так что мы будем использовать термин положение, чтобы не запутаться. (2)

  3. Что такое мала, что такое достаточно, и как небольшой кровью сделать ошибку ещё меньше -- это вопрос численных методов в математике, и мы обойдёмся такой грубой моделью. (3)