Modelica

Поделись знанием:
Перейти к: навигация, поиск
Modelica
Семантика:

объектно-ориентированное, декларативное программирование

Появился в:

1997

Расширение файлов:

.mo

Выпуск:

3.3 (May 9, 2012[1])

Основные реализации:

AMESim, CATIA Systems, CyModelica, Dymola, JModelica.org, MapleSim, Wolfram SystemModeler, OpenModelica, Scicos, SimulationX, Vertex, Xcos

Лицензия:

[www.modelica.org/licenses/ModelicaLicense2/ Modelica License Version 2]

Сайт:

[www.modelica.org/ www.modelica.org]

Modelica — объектно-ориентированный, декларативный, мультидоменный язык моделирования для компонентно-ориентированного моделирования сложных систем, в частности, систем, содержащих механические, электрические, электронные, гидравлические, тепловые, энергетические компоненты, а также компоненты управления и компоненты, ориентированные на отдельные процессы[1]. Modelica разработана некоммерческой организацией Modelica Association[2]. Эта компания также разрабатывает свободно распространяемую стандартную библиотеку Modelica Standard Library, в версии 3.2.1 содержащую порядка 1360 типичных элементов моделей и 1280 функций из различных областей.





Характеристики

В то время как Modelica напоминает объектно-ориентированные языки программирования, такие как C++ или Java, она отличается от них в двух аспектах. Во-первых, Modelica является языком моделирования, а не обычным языком программирования. Классы Modelica не компилируются в обычном смысле, но преобразуются в объекты, которые затем используются специализированным процессором. Специализированный процессор языком не определятся, хотя к нему предъявляются определённые требования.

Во-вторых, хотя классы могут содержать алгоритмические компоненты, аналогичные операторам или блокам в языках программирования, их основное содержание составляют множества уравнений. В терминах языка Modelica точки, уравнения не задают заранее определенную причинно-следственную связь (causality). Специализированный процессор может (и обычно должен) манипулировать уравнениями в символьном виде, определяя порядок их исполнения и то, какие компоненты в этом уравнении определяют входы и выходы.

История

Первые усилия по созданию языка Modelica были предприняты в сентябре 1996 года Хильдингом Эльмквистом (Hilding Elmqvist). Цель этих усилий состояла в разработке объектно-ориентированного языка для моделирования технических систем, пригодного для многократного использования моделей динамических систем и обмена между этими моделями в стандартизированном формате. Modelica 1.0 основывалась на диссертационной работе[3] Хильдинга Эльмквиста и на опыте использования языков моделирования Allan[4], Dymola, NMF[5], ObjectMath[6], Omola[7], SIDOPS+[8] и Smile[9]. Хильдинг Эльмквист является основным архитектором языка Modelica, Но вклад в развитие языка внесли и многие другие (см. приложение E в[1]).

В сентябре 1997, была выпущена версия 1.0 спецификации языка Modelica. Она получила основой для внедрения в качестве прототипа в коммерческой системе Dymola. В 2000 году была создана некоммерческая ассоциация Modelica, ориентированная на непрерывное развитие языка Modelica и развитие свободной стандартной библиотеки Modelica Standard Library. В том же году началось использование языка Modelica в промышленных приложениях.

Реализации

Коммерческие реализации языка Modelica включают

JModelica.org[14] — расширяющаяся основанная на языке Modelica платформа, состоящая из программ в открытом коде и предназначенная для оптимизации, моделирования и анализа сложных динамических систем. Главная цель проекта состоит в создании «промышленно жизнеспособной» опирающейся на программы в открытом коде платформы для моделирования и оптимизации моделей, написанных на языке Modelica, предлагающая гибкую платформу, служащую как виртуальная лаборатория для развития алгоритмов и исследований.

OpenModelica[15] — среда для моделирования, опирающаяся на открытый код и язык Modelica, ориентированная для промышленного и академического применения. Её долгосрочное развитие поддержано бесприбыльной организацией — Open Source Modelica Consortium (OSMC). Цель усилий OpenModelica состоит в создании в рамках Open Source Modelica продвинутых моделей[16], а также среды для компиляции и моделирования, опирающихся на свободно распространяемое в бинарном коде и исходниках программное обеспечение для исследований[17], обучения[18] и промышленных нужд.

Свободно распространяемая предназначенная для моделирования среда Scicos использует часть языка Modelica для моделирования компонент. Поддержание большей части языка Modelica находится в разработке. Тем не менее, по-прежнему имеет место некоторая несовместимость и расхождения в интерпретации между различными средствами, касающимися языка Modelica.[19]

Примеры

Следующий фрагмент программы демонстрирует очень простой пример дифференциального уравнения первого порядка (<math>\dot x = - c \cdot x</math>):

model FirstOrder
  parameter Real c=1 "Time constant";
  Real x "An unknown";
equation
  der(x) = -c*x "A first order differential equation";
end FirstOrder;

На этом примере интересно отметить присутствие описания объекта 'parameter', которое указывает на то, что он не зависит от времени, а также оператора 'der', символически представляющего производную от переменной по времени. Также примечательны строки документации, которые могут быть ассоциированы с декларациями и уравнениями.

Встроенные и определяемые пользователем типы

В языке Modelica имеются четыре встроенных типа: Real, Integer, Boolean, String. Определяемые пользователем типы обычно ассоциируются с физическими величинами, единицами, номинальными значениями и иными атрибутами:

type Voltage = Real(quantity="ElectricalPotential", unit="V");
type Current = Real(quantity="ElectricalCurrent", unit="A");
  ...

Соединители, описывающие физическое взаимодействие

Взаимодействие между компонентами определено физическими портами, называемыми соединители или коннекторы (connector). Так, например, электрический пин (штырь) определён как:

connector Pin "Electrical pin"
   Voltage      v "Potential at the pin";
   flow Current i "Current flowing into the component";
end Pin;

При рисовании линий соединения между портами смысл состоит в том, что соответствующие соединителю переменные без префикса «flow»[20] идентичны (пример такой переменной здесь: «v»), а соответствующие соединителю переменные с префиксом «flow» (пример такой переменной здесь: «i») определены уравнением с нулевой суммой (сумма всех соответствующих переменных «flow» равна нулю). Мотивация состоит в том, чтобы автоматически выполнялись соответствующие уравнения баланса на сколь угодно малой точке соединения.

Базовые компоненты модели

Базовые компоненты модели определены моделью и содержат уравнения, описывающие взаимоотношения между переменными соединителя в декларативной форме, то есть без определения порядка вычислений. Вот например, модель конденсатора[21]:

model Capacitor
  parameter Capacitance C;
  Voltage u "Voltage drop between pin_p and pin_n";
  Pin pin_p, pin_n;
equation
  0 = pin_p.i + pin_n.i;
  u = pin_p.v - pin_n.v;
  C * der(u) = pin_p.i;
end Capacitor;

Здесь C — ёмкость, pin_p и pin_n — обкладки конденсаторов, имеющие смысл пинов, u — разность потенциалов между обкладками pin_p и pin_n.

Первое уравнение выражает закон сохранения заряда для конденсатора (равенство зарядов на его обкладках), второе уравнение — разность потенциалов между обкладками, третье уравнение определяет переменный ток.

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

Полные правила для определения сбалансированных моделей довольно сложны, о них можно узнать из [1], раздел 4.7.

Однако для большинства случаев могут быть установлены простые правила, которые считают число уравнений и число неизвестных так, как это делают большинство средств, предназначенных для моделирования:

Модель сбалансирована, если число её уравнений равно числу её переменных.

Переменные и уравнения должны быть посчитаны по следующему правилу:

->Число уравнений модели                               = 
  Число уравнений, определённых в самой модели         + 
  число потоковых переменных из внешних соединителей
 
->Число переменных модели = Число переменных, определённых в самой модели,
  включая переменные в физических соединителях. 

Заметим, что стандартные соединители на входе (такие как RealInput или IntegerInput) не вносят вклада при счёте переменных, так как в них не определены новые переменные.

Смысл такого определения может быть пояснён на приведённом выше примере конденсатора. Каждый из его соединителей содержат потоковую переменную, то есть ток. При проверке оказывается, что эта переменная ни с чем не соединена. Это соответствует тому, что на каждом соединителе устанавливается уравнение pin.i=0. Вот почему должно быть добавлено уравнение для каждой потоковой переменной.

Пример может быть распространён на другие случаи, в которые вовлечены иные типы потоковых переменных, например, силы, моменты и т. д.

Представленная выше модель конденсатора сбалансирована, так как

number of equations =   3+2=5   (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5   (u, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

Верификация этой модели с помощью OpenModelica[15] даёт:

Class Capacitor has 5 equation(s) and 5 variable(s).
3 of these are trivial equation(s).

Другой пример, содержащий как входящие, так и физические соединители представлен, следующей моделью из Modelica Standard Library:

model SignalVoltage 
  "Generic voltage source using the input signal as source voltage"
  Interfaces.PositivePin p;
  Interfaces.NegativePin n;
  Modelica.Blocks.Interfaces.RealInput v(unit="V") 
    "Voltage between pin p and n (= p.v - n.v) as input signal";
  SI.Current i "Current flowing from pin p to pin n";
equation 
  v = p.v - n.v;
  0 = p.i + n.i;
  i = p.i;
end SignalVoltage;

Компонент SignalVoltage сбалансирован, так как

number of equations =   3+2=5  (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5  (i, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

Проверка с помощью OpenModelica[15] даёт:

Class Modelica.Electrical.Analog.Sources.SignalVoltage has 5 equation(s) and 5 variable(s).
4 of these are trivial equation(s).

Иерархические модели

Иерархическая модель составляется из базовых моделей с помощью базовых моделей-примеров за счёт соответствующих значений параметров модели и за счёт связей моделей с помощью соединителей. Типичный пример представлен следующей электрической цепью:

model Circuit
   Capacitor C1(C=1e-4) "A Capacitor instance from the model above";
   Capacitor C2(C=1e-5) "A Capacitor instance from the model above";
     ...
equation
   connect(C1.pin_p, C2.pin_n);
   ...
end Circuit;

С помощью языкового элемента annotation(…) определения могут быть добавлены к модели, что не будет сказываться на моделировании. Аннотации используются для графической выдачи, документации и информации о версиях. Базовое множество графических аннотаций стандартизовано таким образом, чтобы графические вид и выдача моделей были бы теми же самыми в различных реализациях языка Modelica.

Свободно распространяемая книга «[book.xogeny.com/ Modelica by Example]» содержит многочисленные примеры, похожие на данные, с детальным пояснением всех свойств языка Modelica версии 3.3.

Приложения

Modelica разработана так, что она остаётся нейтральной по отношению к области применения. Как результат, она используется в многочисленных приложениях, таких как жидкостные системы (например, производство энергии парогенераторами, гидравлика, и т. д.), автостроение (особенно трансмиссии) и механические системы (например, системы многих тел, мехатроника и т. д.).

В автостроении многие производители используют язык Modelica. Среди них Ford [22] ,[23],[24] General Motors,[25] Toyota,[26] BMW[27] и Daimler.[28] Язык Modelica также используется при моделировании течений с учётом теплопереноса и энергетических систем.[29]

Напишите отзыв о статье "Modelica"

Примечания

  1. 1 2 3 4 [www.modelica.org/documents/ModelicaSpec33.pdf Modelica Language Specification, Version 3.3]. Modelica Association (9 мая 2012). Проверено 7 апреля 2015.
  2. [www.modelica.org/ Homepage of the Modelica Association]
  3. [www.control.lth.se/database/publications/article.pike?action=fulltext&artkey=elm78dis A Structured Model Language for Large Continuous Systems.].
  4. Jeandel A., Boudaud F.: [www.modelica.org/publications/papers/p303.pdf Physical System Modelling Languages: from ALLAN to Modelica], Building Simulation’97, IBPSA Conference, Prague, September 8-10, 1997.
  5. [www.equa.se/dncenter/handbook.pdf Per Sahlin, NMF HANDBOOK. An Introduction to the Neutral Model Format. NMF version 3.02. Nov 1996]
  6. [www.ida.liu.se/labs/pelab/omath/ ObjectMath]
  7. S.E. Mattsson, M. Andersson and K.J..Aström: Object-oriented modeling and simulation. In: Linkens, ed., CAD for Control Systems (Marcel Dekker, 1993) pp. 31-69.
  8. [citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.4266 A.P.J. Breunese and J.F. Broenink, Modeling Mechatronic Systems Using The Sidops+ Language. In: Proceedings of ICBGM’97, 3rd International Conference on Bond Graph Modeling and Simulation, Phoenix, Arizona, January 12-15, 1997, SCS Publishing, San Diego, California, Simulation Series, Vol.29, No.1, ISBN 1-56555-050-1.]
  9. Ernst T., Jähnichen S., Klose M.: [www.modelica.org/publications/papers/imacs97.pdf Object-Oriented Physical Systems Modeling, Modelica, and the Smile/M Simulation Environment]. 15th IMACS World Congress on Scientific Computation, Modelling and Applied Mathematics, Berlin, August 24-29, 1997.
  10. [cydesign.com/cymodelica CyModelica product page].
  11. [www.maplesoft.com/products/maplesim/modelica.aspx Supports Modelica standard]. Maplesoft. Проверено 11 октября 2009.
  12. [www.3ds.com/products/v6/v6-plm/portfolio//?no_cache=1&did=75 Modelica in CATIA (module: CATIA Systems Dynamic Behavior)]. Dassault Systemes.
  13. [www.3ds.com/cn/news-events/press-room/release/1220/1/ Announcement of DS' acquisition of Dynasim]
  14. [www.jmodelica.org The JModelica.org project].
  15. 1 2 3 [www.openmodelica.org OpenModelica project]
  16. Adrian Pop, David Akhvlediani, Peter Fritzson [www.actapress.com/Abstract.aspx?paperId=32114Integrated UML and Modelica System Modeling with ModelicaML in Eclipse], In Proceedings of the 11th IASTED International Conference on Software Engineering and Applications (SEA 2007), Cambridge, MA, USA
  17. Håkan Lundvall and Peter Fritzson [dx.doi.org/10.1007/978-3-540-75416-9_49Automatic Parallelization of Object Oriented Models Executed with Inline Solvers], In Proceedings of EuroPvm/Parsim, Springer Verlag LNCS, Volume 4757, 2007. See also pvmmpi07.lri.fr/parsim07.html. Paris, France.
  18. Anders Fernström, Ingemar Axelsson, Peter Fritzson, Anders Sandholm, Adrian Pop [www.modelica.org/publications/papers/2006-03-10-Fernstrom-etal-TeachingWorkshop-NotebookTeaching.pdfOMNotebook - Interactive WYSIWYG Book Software for Teaching Programming], In Proc. of the Workshop on Developing Computer Science Education — How Can It Be Done?, 2006. Linköping University, Dept. Computer & Inf. Science, Linköping, Sweden
  19. Jörg Frochte [dx.doi.org/10.3384/ecp11063812Modelica Simulator Compatibility — Today and in Future], The 8th International Modelica Conference, March 20th-22nd 2011, Technical University, Dresden, Germany
  20. англ: поток
  21. англ.: capacitor
  22. Michael Tiller, Paul Bowles, Mike Dempsey [www.modelica.org/events/Conference2003/papers/h32_vehicle_Tiller.pdf Development of a Vehicle Modeling Architecture in Modelica], 3rd International Modelica Conference
  23. Erik Surewaard, Eckhard Karden, Michael Tiller [www.modelica.org/events/Conference2003/papers/h11_Surewaard.pdf Advanced Electric Storage System Modeling in Modelica], 3rd International Modelica Conference
  24. Charles Newman, John Batteh, Michael Tiller [www.modelica.org/Conference2002/papers/p17_Newman.pdf Spark-Ignited Engine Cycle Simulation in Modelica], 2nd International Modelica Conference
  25. E. D. Tate, Michael Sasena, Jesse Gohl, Michael Tiller [www.modelica.org/events/modelica2008/Proceedings/sessions/session4c4.pdf Model Embedded Control: A Method to Rapidly Synthesize Controllers in a Modeling Environment], 6th International Modelica Conference
  26. S. Soejima, T. Matsuba [www.modelica.org/events/Conference2002/papers/p09_Soejima.pdf Application of mixed mode integration and implicit inline integration at Toyota], 2nd International Modelica Conference
  27. Henrik Wigermo, Johannes von Grundherr, Thomas Christ [www.modelica.org/events/modelica2008/Proceedings/sessions/session4c3.pdf Implementation of a Modelica Online Optimization for an Operating Strategy of a Hybrid Powertrain], 6th International Modelica Conference
  28. Brückmann, Strenkert, Keller, Wiesner, Junghanns [www.qtronic.de/doc/DCT_2009.pdf Model-based Development of a Dual-Clutch Transmission using Rapid Prototyping and SiL], International VDI Congress Transmissions in Vehicles 2009, Friedrichshafen, Germany
  29. Michael Wetter, Christoph Haugstetter [simulationresearch.lbl.gov/wetter/download/WetterHaugstetter-2006.pdf Modelica versus TRNSYS — A Comparison Between An Equation-Based and a Procedural Modeling Language for Building Energy Simulation], 2nd SimBuild Conference, Cambridge, MA, USA, August 2006.

Отрывок, характеризующий Modelica

L'Europe n'eut bientot fait de la sorte veritablement qu'un meme peuple, et chacun, en voyageant partout, se fut trouve toujours dans la patrie commune. Il eut demande toutes les rivieres navigables pour tous, la communaute des mers, et que les grandes armees permanentes fussent reduites desormais a la seule garde des souverains.
De retour en France, au sein de la patrie, grande, forte, magnifique, tranquille, glorieuse, j'eusse proclame ses limites immuables; toute guerre future, purement defensive; tout agrandissement nouveau antinational. J'eusse associe mon fils a l'Empire; ma dictature eut fini, et son regne constitutionnel eut commence…
Paris eut ete la capitale du monde, et les Francais l'envie des nations!..
Mes loisirs ensuite et mes vieux jours eussent ete consacres, en compagnie de l'imperatrice et durant l'apprentissage royal de mon fils, a visiter lentement et en vrai couple campagnard, avec nos propres chevaux, tous les recoins de l'Empire, recevant les plaintes, redressant les torts, semant de toutes parts et partout les monuments et les bienfaits.
Русская война должна бы была быть самая популярная в новейшие времена: это была война здравого смысла и настоящих выгод, война спокойствия и безопасности всех; она была чисто миролюбивая и консервативная.
Это было для великой цели, для конца случайностей и для начала спокойствия. Новый горизонт, новые труды открывались бы, полные благосостояния и благоденствия всех. Система европейская была бы основана, вопрос заключался бы уже только в ее учреждении.
Удовлетворенный в этих великих вопросах и везде спокойный, я бы тоже имел свой конгресс и свой священный союз. Это мысли, которые у меня украли. В этом собрании великих государей мы обсуживали бы наши интересы семейно и считались бы с народами, как писец с хозяином.
Европа действительно скоро составила бы таким образом один и тот же народ, и всякий, путешествуя где бы то ни было, находился бы всегда в общей родине.
Я бы выговорил, чтобы все реки были судоходны для всех, чтобы море было общее, чтобы постоянные, большие армии были уменьшены единственно до гвардии государей и т.д.
Возвратясь во Францию, на родину, великую, сильную, великолепную, спокойную, славную, я провозгласил бы границы ее неизменными; всякую будущую войну защитительной; всякое новое распространение – антинациональным; я присоединил бы своего сына к правлению империей; мое диктаторство кончилось бы, в началось бы его конституционное правление…
Париж был бы столицей мира и французы предметом зависти всех наций!..
Потом мои досуги и последние дни были бы посвящены, с помощью императрицы и во время царственного воспитывания моего сына, на то, чтобы мало помалу посещать, как настоящая деревенская чета, на собственных лошадях, все уголки государства, принимая жалобы, устраняя несправедливости, рассевая во все стороны и везде здания и благодеяния.]
Он, предназначенный провидением на печальную, несвободную роль палача народов, уверял себя, что цель его поступков была благо народов и что он мог руководить судьбами миллионов и путем власти делать благодеяния!
«Des 400000 hommes qui passerent la Vistule, – писал он дальше о русской войне, – la moitie etait Autrichiens, Prussiens, Saxons, Polonais, Bavarois, Wurtembergeois, Mecklembourgeois, Espagnols, Italiens, Napolitains. L'armee imperiale, proprement dite, etait pour un tiers composee de Hollandais, Belges, habitants des bords du Rhin, Piemontais, Suisses, Genevois, Toscans, Romains, habitants de la 32 e division militaire, Breme, Hambourg, etc.; elle comptait a peine 140000 hommes parlant francais. L'expedition do Russie couta moins de 50000 hommes a la France actuelle; l'armee russe dans la retraite de Wilna a Moscou, dans les differentes batailles, a perdu quatre fois plus que l'armee francaise; l'incendie de Moscou a coute la vie a 100000 Russes, morts de froid et de misere dans les bois; enfin dans sa marche de Moscou a l'Oder, l'armee russe fut aussi atteinte par, l'intemperie de la saison; elle ne comptait a son arrivee a Wilna que 50000 hommes, et a Kalisch moins de 18000».
[Из 400000 человек, которые перешли Вислу, половина была австрийцы, пруссаки, саксонцы, поляки, баварцы, виртембергцы, мекленбургцы, испанцы, итальянцы и неаполитанцы. Императорская армия, собственно сказать, была на треть составлена из голландцев, бельгийцев, жителей берегов Рейна, пьемонтцев, швейцарцев, женевцев, тосканцев, римлян, жителей 32 й военной дивизии, Бремена, Гамбурга и т.д.; в ней едва ли было 140000 человек, говорящих по французски. Русская экспедиция стоила собственно Франции менее 50000 человек; русская армия в отступлении из Вильны в Москву в различных сражениях потеряла в четыре раза более, чем французская армия; пожар Москвы стоил жизни 100000 русских, умерших от холода и нищеты в лесах; наконец во время своего перехода от Москвы к Одеру русская армия тоже пострадала от суровости времени года; по приходе в Вильну она состояла только из 50000 людей, а в Калише менее 18000.]
Он воображал себе, что по его воле произошла война с Россией, и ужас совершившегося не поражал его душу. Он смело принимал на себя всю ответственность события, и его помраченный ум видел оправдание в том, что в числе сотен тысяч погибших людей было меньше французов, чем гессенцев и баварцев.


Несколько десятков тысяч человек лежало мертвыми в разных положениях и мундирах на полях и лугах, принадлежавших господам Давыдовым и казенным крестьянам, на тех полях и лугах, на которых сотни лет одновременно сбирали урожаи и пасли скот крестьяне деревень Бородина, Горок, Шевардина и Семеновского. На перевязочных пунктах на десятину места трава и земля были пропитаны кровью. Толпы раненых и нераненых разных команд людей, с испуганными лицами, с одной стороны брели назад к Можайску, с другой стороны – назад к Валуеву. Другие толпы, измученные и голодные, ведомые начальниками, шли вперед. Третьи стояли на местах и продолжали стрелять.
Над всем полем, прежде столь весело красивым, с его блестками штыков и дымами в утреннем солнце, стояла теперь мгла сырости и дыма и пахло странной кислотой селитры и крови. Собрались тучки, и стал накрапывать дождик на убитых, на раненых, на испуганных, и на изнуренных, и на сомневающихся людей. Как будто он говорил: «Довольно, довольно, люди. Перестаньте… Опомнитесь. Что вы делаете?»
Измученным, без пищи и без отдыха, людям той и другой стороны начинало одинаково приходить сомнение о том, следует ли им еще истреблять друг друга, и на всех лицах было заметно колебанье, и в каждой душе одинаково поднимался вопрос: «Зачем, для кого мне убивать и быть убитому? Убивайте, кого хотите, делайте, что хотите, а я не хочу больше!» Мысль эта к вечеру одинаково созрела в душе каждого. Всякую минуту могли все эти люди ужаснуться того, что они делали, бросить всо и побежать куда попало.
Но хотя уже к концу сражения люди чувствовали весь ужас своего поступка, хотя они и рады бы были перестать, какая то непонятная, таинственная сила еще продолжала руководить ими, и, запотелые, в порохе и крови, оставшиеся по одному на три, артиллеристы, хотя и спотыкаясь и задыхаясь от усталости, приносили заряды, заряжали, наводили, прикладывали фитили; и ядра так же быстро и жестоко перелетали с обеих сторон и расплюскивали человеческое тело, и продолжало совершаться то страшное дело, которое совершается не по воле людей, а по воле того, кто руководит людьми и мирами.
Тот, кто посмотрел бы на расстроенные зады русской армии, сказал бы, что французам стоит сделать еще одно маленькое усилие, и русская армия исчезнет; и тот, кто посмотрел бы на зады французов, сказал бы, что русским стоит сделать еще одно маленькое усилие, и французы погибнут. Но ни французы, ни русские не делали этого усилия, и пламя сражения медленно догорало.
Русские не делали этого усилия, потому что не они атаковали французов. В начале сражения они только стояли по дороге в Москву, загораживая ее, и точно так же они продолжали стоять при конце сражения, как они стояли при начале его. Но ежели бы даже цель русских состояла бы в том, чтобы сбить французов, они не могли сделать это последнее усилие, потому что все войска русских были разбиты, не было ни одной части войск, не пострадавшей в сражении, и русские, оставаясь на своих местах, потеряли половину своего войска.
Французам, с воспоминанием всех прежних пятнадцатилетних побед, с уверенностью в непобедимости Наполеона, с сознанием того, что они завладели частью поля сраженья, что они потеряли только одну четверть людей и что у них еще есть двадцатитысячная нетронутая гвардия, легко было сделать это усилие. Французам, атаковавшим русскую армию с целью сбить ее с позиции, должно было сделать это усилие, потому что до тех пор, пока русские, точно так же как и до сражения, загораживали дорогу в Москву, цель французов не была достигнута и все их усилия и потери пропали даром. Но французы не сделали этого усилия. Некоторые историки говорят, что Наполеону стоило дать свою нетронутую старую гвардию для того, чтобы сражение было выиграно. Говорить о том, что бы было, если бы Наполеон дал свою гвардию, все равно что говорить о том, что бы было, если б осенью сделалась весна. Этого не могло быть. Не Наполеон не дал своей гвардии, потому что он не захотел этого, но этого нельзя было сделать. Все генералы, офицеры, солдаты французской армии знали, что этого нельзя было сделать, потому что упадший дух войска не позволял этого.
Не один Наполеон испытывал то похожее на сновиденье чувство, что страшный размах руки падает бессильно, но все генералы, все участвовавшие и не участвовавшие солдаты французской армии, после всех опытов прежних сражений (где после вдесятеро меньших усилий неприятель бежал), испытывали одинаковое чувство ужаса перед тем врагом, который, потеряв половину войска, стоял так же грозно в конце, как и в начале сражения. Нравственная сила французской, атакующей армии была истощена. Не та победа, которая определяется подхваченными кусками материи на палках, называемых знаменами, и тем пространством, на котором стояли и стоят войска, – а победа нравственная, та, которая убеждает противника в нравственном превосходстве своего врага и в своем бессилии, была одержана русскими под Бородиным. Французское нашествие, как разъяренный зверь, получивший в своем разбеге смертельную рану, чувствовало свою погибель; но оно не могло остановиться, так же как и не могло не отклониться вдвое слабейшее русское войско. После данного толчка французское войско еще могло докатиться до Москвы; но там, без новых усилий со стороны русского войска, оно должно было погибнуть, истекая кровью от смертельной, нанесенной при Бородине, раны. Прямым следствием Бородинского сражения было беспричинное бегство Наполеона из Москвы, возвращение по старой Смоленской дороге, погибель пятисоттысячного нашествия и погибель наполеоновской Франции, на которую в первый раз под Бородиным была наложена рука сильнейшего духом противника.



Для человеческого ума непонятна абсолютная непрерывность движения. Человеку становятся понятны законы какого бы то ни было движения только тогда, когда он рассматривает произвольно взятые единицы этого движения. Но вместе с тем из этого то произвольного деления непрерывного движения на прерывные единицы проистекает большая часть человеческих заблуждений.
Известен так называемый софизм древних, состоящий в том, что Ахиллес никогда не догонит впереди идущую черепаху, несмотря на то, что Ахиллес идет в десять раз скорее черепахи: как только Ахиллес пройдет пространство, отделяющее его от черепахи, черепаха пройдет впереди его одну десятую этого пространства; Ахиллес пройдет эту десятую, черепаха пройдет одну сотую и т. д. до бесконечности. Задача эта представлялась древним неразрешимою. Бессмысленность решения (что Ахиллес никогда не догонит черепаху) вытекала из того только, что произвольно были допущены прерывные единицы движения, тогда как движение и Ахиллеса и черепахи совершалось непрерывно.
Принимая все более и более мелкие единицы движения, мы только приближаемся к решению вопроса, но никогда не достигаем его. Только допустив бесконечно малую величину и восходящую от нее прогрессию до одной десятой и взяв сумму этой геометрической прогрессии, мы достигаем решения вопроса. Новая отрасль математики, достигнув искусства обращаться с бесконечно малыми величинами, и в других более сложных вопросах движения дает теперь ответы на вопросы, казавшиеся неразрешимыми.
Эта новая, неизвестная древним, отрасль математики, при рассмотрении вопросов движения, допуская бесконечно малые величины, то есть такие, при которых восстановляется главное условие движения (абсолютная непрерывность), тем самым исправляет ту неизбежную ошибку, которую ум человеческий не может не делать, рассматривая вместо непрерывного движения отдельные единицы движения.
В отыскании законов исторического движения происходит совершенно то же.
Движение человечества, вытекая из бесчисленного количества людских произволов, совершается непрерывно.
Постижение законов этого движения есть цель истории. Но для того, чтобы постигнуть законы непрерывного движения суммы всех произволов людей, ум человеческий допускает произвольные, прерывные единицы. Первый прием истории состоит в том, чтобы, взяв произвольный ряд непрерывных событий, рассматривать его отдельно от других, тогда как нет и не может быть начала никакого события, а всегда одно событие непрерывно вытекает из другого. Второй прием состоит в том, чтобы рассматривать действие одного человека, царя, полководца, как сумму произволов людей, тогда как сумма произволов людских никогда не выражается в деятельности одного исторического лица.
Историческая наука в движении своем постоянно принимает все меньшие и меньшие единицы для рассмотрения и этим путем стремится приблизиться к истине. Но как ни мелки единицы, которые принимает история, мы чувствуем, что допущение единицы, отделенной от другой, допущение начала какого нибудь явления и допущение того, что произволы всех людей выражаются в действиях одного исторического лица, ложны сами в себе.
Всякий вывод истории, без малейшего усилия со стороны критики, распадается, как прах, ничего не оставляя за собой, только вследствие того, что критика избирает за предмет наблюдения большую или меньшую прерывную единицу; на что она всегда имеет право, так как взятая историческая единица всегда произвольна.