Сила - в правде. На уровне программирования она выражается в том, что одни и те же программы при одних и тех же начальных условиях обязаны выдавать истинную правду, т.е. одинаковые результаты. И даже разные программы, реализующие одну и ту же задачу, должны вести себя одинаково. Действительно, было бы странно, если бы два калькулятора выдавали отличающиеся результаты на одной и той же операции.  Или, по-другому, все это своего рода «программистская аксиома».

И, вроде бы все так, да не всегда. Критично ли наличие ошибок в программах? Странный вопрос - конечно, критично. Но, тем не менее, найдутся и те, кто скажет – не беда. И даст этому свое объяснение. Здесь, правда,  можно вспомнить, как фирма Intel объясняла несущественность ошибки деления с плавающей точкой в процессоре Pentium (подробнее см. [1]). Но общественность и пользователи объяснили Intel, что она не права. И, понеся большие репутационные и финансовые потери,  ей пришлось с этим согласиться и исправить положение.

Далее, обсуждая конкретные программы, мы столкнемся с тем, что нужно считать ошибками. Отличие от ситуации с Intel только в том, что необходимо будет конкретизировать, кто ошибается и ошибается ли и где источник ошибок. Но то, что идет явно не по плану, подтверждают результаты нашего тестирования. Просто ситуация несколько сложнее проблемы одной операции деления FDIV. 

Итак. Выберем для экспериментов три среды: две известные – это MATLAB, SimInTech и одну, известную больше по статьям вашего покорного слуги, - среду параллельного автоматного программирования ВКПа. Для первых двух можно скачать ограниченные версии.  Их возможностей вполне будет достаточно для наших примеров. Ну, а в отношении третьей - придется довериться автору.

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

        Рис.1. Интегрирование синусоидального сигнала в MATLAB
Рис.1. Интегрирование синусоидального сигнала в MATLAB
Рис.2. Интегрирование синусоидального сигнала в SimInTech
Рис.2. Интегрирование синусоидального сигнала в SimInTech
     Рис. 3. Интегрирование синусоидального сигнала в ВКПа
Рис. 3. Интегрирование синусоидального сигнала в ВКПа

Для пущей уверенности мы собрали еще одну аналогичную схему, заменив только синусоидальный генератор на генератор импульсных сигналов. Но это в целом ситуацию не изменило. Хотя, что там греха таить, основная цель всех этих экспериментов была все же проверить «честность» блока интегрирования среды ВКПа и, если необходимо, доработать его функциональность.

Далее в рамках тестирования ВКПа на примерах все более сложных задач мы создали схемы аттракторов, описанных в статье на Хабре [2]. Это аттракторы Лоренца, Ресслера, Рикитаки и Нозе-Гувера. В статье они представлены схемами в МАТЛАБ. Аналогичные схемы мы собрали для SymInTech и ВКПа. Сравнительные результаты их тестирования оказались столь любопытны, что заслуживают того, чтобы с ними был ознакомлен и Хабр.

При этом отличия в результатах  тестирования аттракторов Лоренца проявились в наибольшей степени. Они приведены для МАТЛАБ на рис. 4, для SymInTech - на рис. 5 и для ВКПа на рис. 6. Глядя на результаты можно лишь сказать, что они похожи и не более того.  Поэтому, анализируя их, надо бы признать, что они фактически опровергают  сформулированную нами ранее  «программистскую аксиому». С таким положением мириться нельзя и это, безусловно, требует своего разбирательства и поиска причин случившегося. 

Рис. 4. Тестирование аттрактора Лоренца в МАТЛАБ
Рис. 4. Тестирование аттрактора Лоренца в МАТЛАБ

 

Рис. 5. Тестирование аттрактора Лоренца в SymInTech
Рис. 5. Тестирование аттрактора Лоренца в SymInTech
Рис. 6. Тестирование аттрактора Лоренца в ВКПа
Рис. 6. Тестирование аттрактора Лоренца в ВКПа

Почему сертифицированный SimInTech  выдает результаты, которые отличаются от, наверное, столь же сертифицированного пакета MATLAB? Может, можно все списать на хаос, который моделируют аттракторы? Однако, повторный перезапуск программ свидетельствует о его отсутствии.

Но автора обеспокоило совсем другое - достаточно сильное на фоне остальных программ отличие результатов, показанных  ВКПа. Отметим также, что перезапуск ВКПа порождал близкие, но все же отличающиеся результаты. Т.е. в какой-то мере они больше отвечали поставленной цели – моделированию хаоса. Но причины этого достаточно понятны. К хаосу они имеют мало отношения и это мы объясним позже.

И тут пришло время вспомнить про параллелизм. Уравнения каждого из аттракторов представляют собой систему из нескольких параллельных дифференциальных  уравнений. Но только у ВКПа можно выбрать один из двух режимов работы: использовать при расчетах теневую память (это стандартный режим, обеспечивающий параллельные свойства среды [3]) или работать в обычном режиме.  Напомним, что в режиме теневой памяти измененные на текущем такте данные помещаются в буфер, чтобы, когда выполнятся все действия, стать новыми значениями. В обычном режиме данные обновляются ровно в моменты их изменений.

Рис. 7. Тестирование аттрактора Лоренца в ВКПа в режиме обычной памяти
Рис. 7. Тестирование аттрактора Лоренца в ВКПа в режиме обычной памяти

После изменения режима расчета в ВКПа были получили графики, представленные на рис. 7. Сам режим работы при этом определяется состоянием переключателем shadow mode of variables (см. рис. 7), т.е. код вычислительных процессов ни как не затрагивается. Как можно видеть, полученные графики в большей степени походят на результаты конкурентов, чем на свой, но полученный в теневом режиме работы среды.  Из этого следует, что два других пакета, решая поставленную задачу, скорее всего, вычисления выполняют строго последовательно, искажая тем самым «правду».

С подобной проблемой параллельных расчетов автору уже приходилось сталкиваться. Тогда участником экспериментов был пакет LabVIEW и решалась проблема моделирования адаптивного ПИД-регулятора (об этом см. статью на Хабре [4]). Значения данных, рассчитанных пакетом, полностью совпадали со значениями, полученными в ВКПа, но были сдвинуты по времени.   Это говорило о последовательной работе созданных моделей объекта и регулятора. Доказано это было, как и выше, путем изменения режима работы среды.

Разные же результатов у ВКПа от запуска к запуску объясняются принципом работы ядра среды. Если первые два рассчитывают работу приложения, то ВКПа ее именно моделирует.  Это происходит в дискретном времени, длительность такта которого «плавающая». Эту разницу соответственно и «ловит» блок интегрирования. Отсюда и некий «хаос» в поведении аттрактора в ВКПа. Но, еще раз, он вполне объясним и потому даже ожидаем.

 Основное вывод, который следует сделать, сводится к тому, что современное программирование, как ни крути, а «антипараллельно». А потому в его рамках сложно в полной мере доверяться даже достаточно известным программным пакетам. Но самое опасное в том, что они используются огромным числом специалистов, не подозревающих о тех последствиях, которые могут произойти, если им доверяться всецело и безоглядно.

В их оправдание можно лишь сказать, что ни MATLAB ни SimInTech лишь отчасти виноваты в том, что не учитывают параллельные свойства реальных систем. Они просто следуют тенденциям и понятиям современного программирования. А те «сертификации», которые они успешно проходят, похоже, столь же "антипараллельны", как и само современное программирование.  

По-хорошему  теперь нужно ждать разъяснений по поводу разницы в результатах «обычных» прогонов, а также по поводу учета параллелизма, как программных, так и вполне реальных систем. Это особенно важно, т.к. в перечень решаемых пакетами задач входят те, которые весьма критичны к ошибкам. Вдруг, не дай Бог,  что-то не так взлетит, не туда попадет, внезапно откажет или не вовремя утонет? Такой хаос нам не нужен!

Приложение

Схемы аттрактора Лоренца в MATLAB, SymInTech, ВКПа

Схемы остальных аттрактор аналогичны и результаты их тестирования достаточно похожи друг на друга. Даже в обоих режимах работы ВКПа.

Литература

  1. Ошибка Pentium FDIV

  2. Генераторы хаоса на ПЛИС

  3. Автоматное программирование: определение, модель, реализация

  4. Параллелизм, корутины, событийные автоматы,… живая математика

Комментарии (43)


  1. maeris
    03.12.2022 02:13
    +6

    С таким положением мириться нельзя и это, безусловно, требует своего разбирательства и поиска причин случившегося.

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

    Другое дело, что SimInTech решил симулировать с каким-то конским шагом, и получился полный треш, а две другие программы просто не умеют antialiasing (ну бывает, научный софт не обязан выглядеть как конфетка).


  1. Lord_Ahriman
    03.12.2022 09:03
    +9

    А вы не проверяли результаты в MATLAB Simulink с другим solver'ом (методом реализации численного интегрирования)? Там же их полно, по умолчанию стоит ode45, основанный на методе Рунге-Кутты, потому что он дает приемлемую точность при приемлемой же производительности, но есть и куда более точные типа ode23 (метод Богацкого-Шампина) - он рисует даже для сравнительно простых моделей куда более гладкую и точную кривую. Есть там и методы с фиксированным шагом интегрирования, начиная с метода Эйлера. Я бы, прежде чем делать однозначные выводы, как минимум поигрался бы с разными солверами и шагами интегрирования, потому что практика показывает, что изменения в виде кривых могут быть разительными, особенно на сложных моделях (я, например, электронные фильтры высоких порядков и адаптивные системы моделирую исключительно на "тяжелых", но точных методах). Если что, настраивается в свойствах симуляции, там выбирается метод и размер шага (или границы шага, если используется метод с переменным шагом интегрирования).

    Также, надеюсь, вы учли, что в целях экономии памяти, по умолчанию в блоке Scope есть ограничение на количество точек (по умолчанию, ЕМНИП, последние 4к шагов). Вы меняли этот параметр?

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


  1. YDR
    03.12.2022 12:57
    +4

    А у моделей аттракторов Ресслера и Лоренца разве известно точное численное решение? Я всегда думал, что мы получаем только приближение, а с увеличением точности вычислений решение будет изменяться (ввиду свойств системы).

    Претензия не обоснована. (существует задача, на которой бензопила скажет "р-р-р-р-хрфхщ", и это не значит, что бензопила плохая)


    1. timofeevka
      03.12.2022 14:45
      +1

      Точное численное решение - это масло масляное :) Для данных задач точного аналитического решения нет. Есть только численное.


      1. YDR
        03.12.2022 23:03

        формально, это полноценная система ДУ. Не исключено, что кто-нибудь изобретет способ найти точное решение (хотя бы в смысле предела, хотя бы в каком-то (нелинейном) случае).

        Точное численное решение мало того, что бывает для некоторых задач (вот например дискретных), так еще может быть точным/не точным в разных смыслах, что сразу пришло в голову - точная диагонализация в смысле диагонализации полной матрицы (в противовес методу Ланцоша).


        1. timofeevka
          04.12.2022 15:20
          +1

          Да соглашусь, тут вопрос терминологии, применительно к конкретно непрерывным нелинейным системам дифференциальных уравнений.


  1. timofeevka
    03.12.2022 13:05
    +6

    1. Для решения нелинейных задач по типу аттрактора необходимо в настройках указать методы интегрирования с переменным шагом (лучше адаптивный 1, Адаптивный 3).

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

    3. А при чем вы вообще тут пишете про параллелизм если эта задача решается методом интегрирования строго последовательно и на одном ядре? Вы же вроде не считаете в пакете несколько систем в разных проектах? Если чти в настройках SimInTech есть опции для пакетного расчёта определяющие момент записи сигналов. Но этой конкретной задачи это не касается вообще. В данном конкретном случае слова автора о том что в пакете ВКПа результаты от запуска к запуску различаются говорит о том, что в рамках архитектуры данного программного пакета понятием воспроизводимости вычислительного эксперимента пожертвовали в пользу распараллеливания, причём делать такое в рамках приведённой задачи некорректно. В ПК SimInTech при помощи инструмента пакет можно разбить систему на параллельно исполняемые системы и глянуть как они влияют друг на друга.

    4. shadow mode of variables используется при параллельном расчёте в режиме пакета в SimInTech. Настройка использовать запись сигналов на шагах синхронизации.

    5. Сравнивать результаты численного интегрирования желательно на идентичных методах интегрирования. Задачи с этими аттракторами относятся к классу жёстких, результат их сильно зависит от используемого метода. Если что - в демо-примерах ПК SimInTech все эти задачки есть готовые.

    6. А о чем была статья то? Вы взяли для примера классическую задачу интегрирования жёсткой системы диф уравнений, получили в ВКПа в одном из режимов невоспроизводимость результатов расчётов и делаете выводы что считать жёсткие системы диф уравнений надо сделав каждый интегратор в своём потоке? Ну ок можно это сделать, но вообще это не очень правильно в данном случае. Просто видимо принципиальная парадигма решения подобных задач в ВКПа совсем иная чем в simulink, simintech, modelica и т.д. и по всей видимости эта парадигма для чего-то иного предназначена?


  1. petuhoff
    03.12.2022 13:52
    -2

    Выводы лично для меня однозначные.

    Если на входе одинаковая модель, одинаковое исходное состочние, и в модели не используютя функции рандомайзинга, и параметры моделирования одинаковые, то результаи должен совпадать на 100%, с заданной точностью. Если результаты разные, то это булшит, или факап и надо искать причину.

    Ну а" теневые переменные" в статье очень похоже, не модель халса, а просто мусор который остался с предыдушего расчета и меняет начальное состояние системы приводя к разным результатам при повторении расчетов.

    Другими словами Simulink и SimInTech считают правильно,достоверно и предсказуемл, а ВКПа - просто лажает. Правильное название статьи как я нашел ошибку в ВКП, которой нет в Simulink и SimInTech ;)))


    1. YDR
      03.12.2022 23:08
      +1

      бывает неявное использование случайных чисел ("не метод Монте-Карло"), например, при построении пространства Крылова, или в подобных методах. Произвольный единичный затравочный вектор не должен существенно менять решение, но не должен давать существенных отличий. Точного совпадения не будет.

      Ничего страшного в этом нет. Даже результат вычислений иногда называют "результат численного эксперимента" и выдают в виде "значение+-неопределенность". (хотя это больше свойственно методам с явным использованием случайных чисел)


      1. petuhoff
        04.12.2022 02:00
        +1

        Согласен поэтому я и написал, нет функции рандомайзинга. Поэтому если неявное использование случайных чисел значит такя функция появляется. Ну и отклонения должны быть в пределах заданной точности. Я так думаю.


  1. timofeevka
    03.12.2022 16:24
    +2

    Почитав некоторые статьи автора по поводу автоматного программирования я хочу заметить, что:

    1. Сводимость конечных автоматов к классическим структурным схемам (а приведена именно такая) ограничена. Для разрешения этой проблемы для структурных схем требуется введение операции условного исполнения части схемы по флагу и учёт этой операции при сортировке блоков. Ну или как минимум блока с запоминанием состояния (задержка на шаг интегрирования).

    2. Большинство логических схем с логической обратной связью прекрасно моделируется описанием модели структурной схемой с введением блока задержки на шаг в обратной связи. При этом по выходу задержек не будет на шаге интегрирования относительно входа. При этом в SimInTech можно всё это и как карту состояний нарисовать если что. Про то, что некоторые вещи так не смоделировать я тоже в курсе, но их реальная встречаемость в практически используемых моделях невелика.

    1. Недурно бы было если бы автор обосновал как он интегратор у себя в программе моделирует и как схема при этом сортируется. Потому что в данном случае конкретном случае неповторяемость результатов - это ошибка.


    1. lws0954 Автор
      03.12.2022 20:43
      -2

      Недурно бы было если бы автор обосновал как он интегратор у себя в программе моделирует и как схема при этом сортируется. Потому что в данном случае конкретном случае неповторяемость результатов - это ошибка.

      Исполняю пожелания ;)

      1. Самым элементарным образом - считаю площадь. Известно текущее, предыдущее значения и длительность такта. Что еще надо?

      2. Не сортируется. В параллельной среде сортировка не нужна.

      3. Это не ошибка. Это особенность ядра. Это я пояснил в статье (читайте внимательнее). Длительность такта плавающая и это основная причина. Я так думаю! ;)

        Да, по поводу начальных условий - 10, 0, 0 (X, Y, Z). Это как в статье про аттракторы.

      Про то, что некоторые вещи так не смоделировать я тоже в курсе, но их реальная встречаемость в практически используемых моделях невелика.

      Почти согласен, т.к. встречаюсь. В ПЛК не так уж и редко. Здесь же вот, похоже, случилось именно такое. С аттрактором Лоренца. Думаю и в остальных присутствует. Только проявляется не так очевидно.


      1. timofeevka
        04.12.2022 15:07
        +2

        Ну площадь считать это понятно, но не очень правильно так говорить, т.к. существуют разные способы аппроксимации интегрируемой функции. Я так понял, что вы применяете метод трапеций ?

        Как это сортировка не нужна ? Ну если вы считаете что каждый блок должен рассчитываться изолированно в своём потоке то может и не нужна, только это тогда уже не считается структурной схемой собственно, а как-то совсем по другому должно именоваться. Я же говорю, что вы пытаетесь в данном случае используя некоторую свою нестандартную парадигму понимания структурных схем решать задачи для решения которых должна применяться несколько другая парадигма. И в SimInTech и Simulink и вообще везде по сути структурная схема представляет собой направленный граф, описывающий связь переменных между элементарными моделями блоков. Классическое понимание этого графа подразумевает его сортировку таким образом, чтобы при последовательном исполнении отсортированного списка блоков на входе каждого блока не возникало неопределённости. Если как вы говорите сортировки у вас нет, это значит что эта неопределённость присутствует и заложена в архитектуре вашего расчётного ядра. Вывод из этого, что для решения описанного в статье класса задач такая архитектура непригодна. Это не значит что она для другого будет непригодна, ну к примеру для описания передачи данных между контроллерами по сети, но и там по идее сортировка модели должна присутствовать. Но для вот этой конкретной модели - точно нет, описывать её без наличия сортировки блоков нельзя.

        По поводу ПЛК: я в курсе чем их программируют и я делал свой генератор кода для ПЛК и свою исполняемую среду, которая работает на АЭС успешно. Вообще на данный момент язык LD не очень как-то любят использовать, в основном FBD и ST. Для крупных нетиповых алгоритмов - Си. Так вот в языке FBD сортировка блоков ЕСТЬ ! Т.к. его стандарт предусматривает, что исполнение блоков делается в порядке их соединения и никакой параллельщины там нет на уровне диаграмм, описывающих элементарные алгоритмы.

        Поэтому я могу дать совет по поводу вашего вычислительного ядра: 1 - введите сортировку на уровне структурных схем. 2 - явным образом сделайте указание на схеме параллельно исполняемых ветвей кода.


  1. lws0954 Автор
    03.12.2022 17:09

    Выводы лично для меня однозначные.

    Я бы не спешил так... Мы же не в армии, где все понятно, однозначно и все ходят строем...

    Если результаты разные, то это булшит, или факап и надо искать причину.

    С интересом познал новые слова. Я, извините, закоренелый провинциал и не все до нас доходит быстро и вовремя. Ну, да ладно...

    Так и я же об этом писал. Нужно понять почему результаты в MATLAB и SymInTech разные. Вы же сами говорите, что все должно 100% совпадать. Я могу даже выслать эти проекты, а Вы попробуйте их заставить выдать одинаковые результаты. По отдельности-то у них повторяемость идеальная. Какие параметры и в какое значение их установить, что все было тип-топ. Уж кто, если не Вы сможете это так настроить? Доказать, что это возможно (или какой пакет все же точнее посчитал), если не Ваша прямая обязанность, то хотя бы дело чести... Я так думаю.

    Но выше - это полбеды. Беда - в параллелизме. Это кто бы и чтобы не говорил. Здесь выводы, действительно, однозначные. Ни MATLAB ни SymInTech не решат правильно задачи, содержащие параллелизм. Чтобы они это делали нужны или возможны какие-то "манипуляции". Но поскольку они ни где не упоминаются (возможно, ошибаюсь), то, скорее всего, все решается строго последовательно. В результате что имеем, то имеем.

    Параллелизм проста штука, но почему-то сложно понимаемая :) Для ВКПа это естественная и простая в реализации вещь (речь не о ее ядре). Одним щелчком я перехожу от последовательных вычислений к параллельным и тут же вижу результат. Иногда он очевиден, как в случае аттрактора Лоренца, RS-триггера и т.п., а чаще все он почти не виден, как в случае остальных аттракторов.

    А про "теневые переменные" - Вы просто не разобрались. О каком мусоре речь? Это просто еще одна переменная в которую я записал новое значение текущей переменной, а потом через какое-то время это значение присвоил исходной переменной. Где тут место мусору?

    Другими словами Simulink и SimInTech считают правильно,достоверно и предсказуемл, а ВКПа - просто лажает. 

    Первое еще надо доказать, а со вторым Вы просто поспешили :) Если что и может лажать - это интегратор в ВКПа. Но на простых примерах все ОК. Ну, а в каком месте ему стоять - в сложном или простом примере - это, ведь, должно быть "по барабану". Ведь так? От перемены мест, как известно... его свойства не меняются. Хотя...

    По поводу "поиграться". Поигрался. Неделю играюсь :) Но только сегодня обнаружил, что больше всего влияет значение шага. И это понятно. Но вот сейчас попробую еще одну "игрушку" - поменяю местами уравнения. В случае последовательных расчетов это должно сказаться на результате. Но на это могут повлиять процессы компиляции/исполнения схем. О результатах - доложу ;)


    1. Lord_Ahriman
      03.12.2022 17:36
      +3

      Но только сегодня обнаружил, что больше всего влияет значение шага

      Для аттракторов Рёсслера и Лоренца аналитического решения не существует, а численное решение очевидным образом зависит от величины шага интегрирования (хотя, вообще-то, такие вещи моделируют методами с переменным (адаптивным) шагом, при этом решение будет зависеть и от выбранного метода тоже, т.к. уравнения нелинейные, и от погрешностей интегрирования). Странно, что вы изначально этого не учли и обнаружили постфактум. Также странно, что вы не учитываете свойства нелинейных уравнений, решение, тем более численное, которых зависит от начальных условий, которые вы не указываете, а это крайне важно. Вообще, это довольно очевидные вещи, которые понятны и без всякого моделирования любому, кто более-менее понимает, как реализуются численные методы решения ДУ, тем более, нелинейных.

      А где вы там нашли проблемы с параллелизмом и какие-то программные ошибки, я, простите, не могу понять (либо вы вкладываете в термин "параллелизм" какой-то иной, не общепринятый смысл). Не могли бы вы пояснить, какую проблему вы вообще хотите решить этими исследованиями? Возможно, это было где-то в ваших предыдущих постах, но я не могу найти.


      1. lws0954 Автор
        03.12.2022 20:57

        А где вы там нашли проблемы с параллелизмом и какие-то программные ошибки, я, простите, не могу понять (либо вы вкладываете в термин "параллелизм" какой-то иной, не общепринятый смысл). Не могли бы вы пояснить, какую проблему вы вообще хотите решить этими исследованиями? Возможно, это было где-то в ваших предыдущих постах, но я не могу найти.

        Ну, ведь, в статье все это представлено. В ВКПа в паралльном режиме имеем один результат. Он достаточно сильно отличается от двух других пакетов. А они выдают достаточно похожие результаты. Может, если их настроить они будут даже одинаковы. Но в первом приближение пусть даже так.

        Я меняю режим работы ВКПа на последовательный и ВКПа выдает похожий результат. Это о чем-то говорит? Позволяет сделать вывод? Позволяет.

        Во-первых, явно они работают в последовательном режиме, как и последовательный ВКПа.

        Во-вторых, если бы работали в параллельном режиме, то, скорее всего, выдавали результат, похожий на ВКПа.

        В-третьих, результаты последовательного и параллельного расчетов отличаются достаточно сильно. Уравнения параллельные. Решение последовательное. Оно отличается достаточно существенно от параллельного (см. расчеты в ВКПа).

        Вывод. Вариант существующего расчета содержит ошибки. И в МАТЛАБ и в SymInTech. Так что, похоже, это и есть та самая "лажа". Даже с учетом их отличий друг от друга (настройки или что-то иное - не знаю)


        1. lws0954 Автор
          03.12.2022 21:03

          Не могли бы вы пояснить, какую проблему вы вообще хотите решить этими исследованиями? Возможно, это было где-то в ваших предыдущих постах, но я не могу найти.

          Эта проблема называется - модель параллельных вычислений. И статья на эту тему. И еще одна. Это так сказать концептуально. Остальные поясняют те или иные детали. Как и нынешняя ;) Так что если читать, то желательно читать все ;)


        1. Lord_Ahriman
          03.12.2022 21:09

          Вариант существующего расчета содержит ошибки. И в МАТЛАБ и в SymInTech. Так что, похоже, это и есть та самая "лажа". аже с учетом их отличий друг от друга (настройки или что-то иное - не знаю)

          Еще раз. Для того, чтобы говорить о неких ошибках и "лаже" при численном решении нелинейных(!) дифференциальных уравнений путем сравнения результатов в разных средах, вы должны хотя бы, как минимум, обеспечить одинаковые условия нахождения этих решений, т.е. должен использоваться в точности один и тот же метод интегрирования, один и тот же шаг (если выбран метод с фиксированным шагом), одни и те же начальные условия. Если вы не обеспечили эти условия, то говорить о последовательных или параллельных расчетах и их влиянии не имеет никакого смысла. Ну или тогда берите в качестве "кошек" линейные ДУ, потому что на нелинейных у вас малейшая разница в условиях вылезет в существенно разных результатах (особенно в аттракторах).
          Вы можете хотя бы сказать, какие методы у вас использованы в Simulink, в SymInTech и в ВКП?

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


          1. timofeevka
            04.12.2022 14:42

            Да он ответил выше - площадь считает. Т.е. видимо метод трапеций.


        1. petuhoff
          04.12.2022 02:14

          Когда вы меняет реди работы в ВПК и получаете другой результат, вы обнаруживаете ошибку в ВПК. И связана она как я понял с тем, что в "паралелном" режиме появляются "теневые переменные" куда сохраняются переменные с линий связи, в итоге в результате расчета "паралелном режиме" изменение переменных на линии связи не учитывается во время такта. И считается не совсем та схема которая изображена. А какя то другая, причем какая точно, судя по всему, вам самому неизвестно. :)))


        1. mentin
          04.12.2022 06:17
          +2

          Я меняю режим работы ВКПа на последовательный и ВКПа выдает похожий результат. Это о чем-то говорит? Позволяет сделать вывод? Позволяет.

          Во-первых, явно они работают в последовательном режиме, как и последовательный ВКПа.

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

          Возможны другие объяснения, даже более простые. Скажем, это просто правильный результат, а в режиме теневых переменных у вас просто ошибка.

          Более вероятная причина - погрешности вычислений. Параллельные и последовательные вычисления различаются погрешностью, и при малом шаге разница между ними должна уменьшаться до пренебрежимой на коротких расчетах. Недостаток малого шага - большое число шагов приводит к накоплению ошибок. Это можно оценить аналитически, для разных уравнений оказываются точнее иногда параллельные иногда последовательные вычисления. Утверждать что последовательные это лажа, мягко говоря, неверно.


    1. lws0954 Автор
      03.12.2022 20:29

      Не получилось :( Но, как бы, тоже понятно. Почти сразу ;) Это в ПЛК на языке функциональных блоков (кажется SFC) можно устанавливать порядок исполнения блоков. Здесь не нашел. Похоже, что нет. Хотя понимать в какой последовательности блоки исполняются было бы важно и можно было бы проверить задуманное.


      1. YDR
        03.12.2022 23:15
        +1

        приведите более жизненный пример, где в ПЛК нужно решить такую дикую задачу.


        1. lws0954 Автор
          04.12.2022 10:17
          -1

          Смотрите мои статьи. У меня почти в любом проекте на ПЛК от 10 до 40 блоков, работающих параллельно. Там любые связи между ними. Хотел было собрать даже аттракторы. Но ... не нашел готового интегратора, а самому лепить что-то не захотелось, т.к. операции с плавающей точкой там проблема :(. Проблемы появляются при работе с переменными. Например, в одной цепи я изменяю сигнал (по типу Мили), а где-то цепь ниже в этом же состоянии реагирует на его значение. Решения два. Или привязать сигнал к состоянию (по типу Мура) или переместить цепь выше.


    1. petuhoff
      04.12.2022 01:46
      +1

      Не надо прибеднятся провинциальностью, вся Москва это понаехавшие провинциалы. Даже мэр в москве - оленевод, своего толкового не нашлось :))). Москвичи, которые настоящие, зажратые и обленившиеся. По моему опыту поездок по стране, в регионах живых и толковых людей гораздо больше. А тем более среди тех кто сложными вещами щанимается. Поэтому провинциальность это преимущество!

      Разные результаты Simulinka и SimInTech вполне обьяснимы, разными метолами интегрирования, разными шагами интегрирования, разным вычислением площади под интегралом. Что бы SimInTech и Simulink совпали междусобой у них в настройках должен быть метод Эйлера и одинаковый шаг.

      А вот два прогона расчета в одной среде должны совпадать.

      Что до паралельности и последовательности, так в SimInTech блоки сортируются поэтому порядок расчета определяется методом сортировки.

      Что значит в паралельно среде сортировака не нужна? Если на схеме последовательность блоков с линиями связи, то определить первые для расчета и зависимые блоки по любому нужно. Например блок на схеме блоки константа -> синус -> усилитель-> график. Без вычисления константы синус чего будет считатся и что выведется на график?


      1. lws0954 Автор
        04.12.2022 13:00
        -1

        А вот два прогона расчета в одной среде должны совпадать.

        Ну, вот и разобрались. Спасибо. Действительно, совпадает. С этим разобрались. Но не с параллелизмом. Все же есть ВКПа, которое диссонирует с MATLAB и SimInTech. Как с этим быть. Сказать, мол, ваша ВКПа и сами с ней разбирайтесь. Но как? В последовательном режиме все примерно также, как и Вашем пакете. А в параллельном режиме - другое. Магии здесь нет. Есть только, вроде бы, разные режимы работы с данными. Хотя, конечно, есть и другие отличия. Ну, например, я выход любого блока могу замкнуть на его вход и он будет работать. И не только интегратор, но и любой другой, реализующий те же отдельные операции на схеме. У Вас - это ошибка. Но, ведь, для реальных элементов это вполне допустимо.

        Что значит в паралельно среде сортировака не нужна?

        Это свойство параллельных процессов. Их результат не определяется последовательностью работы процессов. И, вообще, в параллельной среде такой последовательности даже нет.

        Без вычисления константы синус чего будет считатся и что выведется на график?

        Ровно то, что у него на входе на текущий момент. Представьте электронную схему. У ней есть последовательность работы элементов? Нет. Они работают параллельно друг другу. Вспомним аналоговые машины. У них есть блоки и схема их соединений. Есть там порядок? Нет.

        Да, есть проблема начального старта. В реальных схемах для этого часто создают схему начального запуска или установки в начальное состояние. Мне, например, пришлось создавать блок, который запускал бы интеграторы одновременно. И это нормально. Это динамическая система и там все так и должно быть. В статическом варианте, т.е. при расчете, все это контролируется и запускается так, как прописано запускать блоки в ядре. В ВКПа полная "демократия", которой приходится управлять. Иначе это будет анархия и хаос. Нам это надо? Образно говоря, если в MATLAB и SymInTech - жесткий тоталитаризм, то в ВКПа - управляемая демократия :)

        Хотя... тоталитаризм тоже иногда нужен. И я подумываю, что, как вариант, его хорошо бы ввести и в ВКПа. Но под контролем. Как в случае переключателя режима работы с памятью. И чтобы вычисления в ВКПа совпадали с MATLAB и SymInTech. Это чтобы снять все вопросы. Для этого, думаю, достаточно контролируемый такт (привязанный к реальному времени) нужно заменить на жесткий - заданный.


        1. timofeevka
          04.12.2022 15:14
          +1

          Хотя, конечно, есть и другие отличия. Ну, например, я выход любого блока могу замкнуть на его вход и он будет работать.

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


          1. lws0954 Автор
            05.12.2022 13:36

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

            Правильно говорить не о парадигме, а модели вычислений. Моя модель исключает мгновенные вычисления на уровне процессов. Это кибернетика, когда модель процесса представлена дискретным преобразователем. Но в пределах дискретного такта действия можно считать мгновенными (иначе они не смогу "влезть" в него. Это согласуется с реалиями, т.к. в природе нет (!) мгновенных процессов/действий. Нет и все. Так боженька придумал и ни чего с этим не поделаешь.Из-за этого в реальном мире "алгебраические цепи" - нонсенс. Все это придумали "математики", чтобы разрулить свои проблемы. Свои, а не реальных систем.

            Моя модель полностью исключает понятие "алгебраических петель" и все, что с ними связано. И это тоже факт: для обычный вычислений "алгебраические цепи" и боьба с ними актуальная тема, для "моей модели" это уже пройденный этап ;)

            Так что та модель, которую я использую годится для описания любых систем без исключения. Ну, как теория автоматов. Отличие только в одном - в исключении понятия "алгебраических петель". Это кибернетика.

             Поэтому я говорю - доделайте сортировку модели

            В реальном мире ни какой сортировки нет. В принципе. Сортировки объектов - это опять "крутеж-вертеж" обычной модели вычислений. В автоматной ВКПа в этом надобности нет. Ну, от слова совсем. Не нужна и диагностика, о которой Вы говорите. Ну, совсем. Время контролируется на уровне создания модели процесса/объекта. И определяется строго числом переходов/тактов модели. Но один такт будет всегда и обязательно. Это факт Еще раз - нет, не было и не будет мгновенных процессов. Все функциональные выражения типа у = f(x) с точки зрения реального мира - абсурд. И работают только лишь в рамках определенных ограничений. Например, на уровне действий в рамках используемой мною модели. Не зря в теории автоматов предлается две модели - комбинационная и последовательностная. Первая грубая и годится лишь для узког класса процессов, вторая - точнее и применима для всех случаев. Но у нее есть один прокол - алгебраические цепи :) Таким образом, правильно все же писать y(t+1) = f(x(t)) и забыть про всякие "цепи".


            1. timofeevka
              05.12.2022 13:44

              Ну так а зачем тогда непрерывную модель приводить как пример? Алг петля это по сути мгновенная обратная связь. В модели она формирует алгебраическое уравнение. В жизни этого в аналоговой схемотехнике полно.


              1. lws0954 Автор
                05.12.2022 15:57

                Что значит "непрерывная", "дискретная"? Передо мной структурная схема, состоящая из блоков (MATLAB, SimInTech). У меня тоже в ВКПа есть такие же блоки. Беру, соединяю, смотрю, сравниваю. Результаты не совпадают. Что-то не то. Пытаюсь понять в чем дело. Вот "на пальцах" мои действия.

                Безусловно, в схемотехнике обратных связей полно. Но там их не разрывают и не вставляют в разрыв элементы задержки. Кроме, конечно, специальных схем - типа реализации автоматов.


        1. petuhoff
          04.12.2022 16:06
          +1

          Я кажется понял, где в ВКП ошибка. :))))) Вы почему то сомтрите на квадратики струкутрных схем как на элементы физического мира, а это не физика, а математика. И поэтому когда вы вставляете "теневые переменные" вы просто изменяете схему рассчта, по сути дела меняете математическую формулу, причем меняете неочевидным способом, и даже сами не очень понимает что изменили. Приходится выдумывать какие то "паралелные вычисления". Все проще у вас в схеме неявно появляется задержка на такт интегрирования.

          Ну, например, я выход любого блока могу замкнуть на его вход и он будет работать. 

          Работать то он будет, толко что он будет считать? Тайно сие виликая есть :)) Предположим вы замкнули на вход сумматор и он заработал. Алилуя! Если бы вы соединили провода или трубы в физическом мире, то воросов нет. Но у нас тут математика и у меня сразу появляются два разных варината соединения и оба правильные.

          Два варианта развязки петли на сумматоре.
          Два варианта развязки петли на сумматоре.

          А как это происходит в SimInTech? Здесь пользователь ставит задержку на такт и обязан указатьначальное условие. И мы получаем две разные математические модели. В одном случае мы стартуем расчет с 1 на выходе и на каждом такте увеличиваем, в другом случае у нас на стартер уже двойка, поскольку цитата:

          Ровно то, что у него на входе на текущий момент.

          Казалось бы подумаешь, 1 или 2 дальше то все будет нормально и практически одинаково, это стартовой единичкой можно пренебреч. Но не тут то было соберем два схемы как показано на следующем рисунке, просто добави интегратор и заберем в суматор обратную свзяь после интегратора. Для ВКП это одинаковые схемы, поскольку "демократия", "свойство параллельных процессов" все дела. Вопрос что должен давать самый правый график сравнения двух процессов?

          Аналогичные модель для ВКПа (на самомо деле нет)
          Аналогичные модель для ВКПа (на самомо деле нет)

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


          1. lws0954 Автор
            04.12.2022 18:51

            Решил собрать схему, чтобы посмотреть воочию :) Что за блок t внизу со стрелкой назад? Не могу никак найти на панели блоков. В каком он наборе элементов?


            1. timofeevka
              04.12.2022 19:20
              +1

              Это блок задержки на шаг интегрирования. Закладка нелинейные


              1. lws0954 Автор
                04.12.2022 19:25
                +1

                спасибо.


          1. lws0954 Автор
            04.12.2022 22:25
            +1

            Докладываю:)

            Вот в SymInTech

            Hidden text

            Вот ВКПа

            Hidden text

            Здесь дискретные такты 1 мсек и 100 мсек. В первом случае почти идеально. Во втором - есть вопросы: зеленый график (разность) в ВКПа сдвинут заметно правее. Какой правильнее - не знаю. Но замечу все сделано в параллельном режиме. В последовательном - зеленый в нуле.


            1. lws0954 Автор
              04.12.2022 22:41
              +1

              Или вот еще с двумя задержками и 100 мсек:

              Hidden text

              Тоже есть над чем подумать...

              Признаюсь, что мне пока не понятно почему в последовательном режиме зеленый график нуле (причина-то понятна - выходы интеграторов абсолютно одинаковы). Но это, может, потому, что "последовательная карта" так ложится. Но мне главное, что в параллельном режиме все работает. Ну, а в нюансах поведения зеленого графика нужно разобраться: возможно, тут какая-то "собака и зарыта" :) Главное, что пример простой и можно, думаю, разобраться.


              1. petuhoff
                04.12.2022 23:24
                +1

                А мне кажется все же очевидно с этапа инициализации. Вернитесь к схеме с суматорами без интегратора. В нулевой момент времени, при замыкании выхода суматора на вход, какая величина отображается на выходе суматора 2 или 1?

                В SimInTech это определяет пользователь, когда задает началные условия для задержки на такт интегрирования. В ВКП это делается "демократически" и вы похоже сами не знаете какие начальные условия вы задаете в задаче. :).


                1. lws0954 Автор
                  05.12.2022 14:16

                  В нулевой момент времени, при замыкании выхода суматора на вход, какая величина отображается на выходе суматора 2 или 1?

                  То, что заложено в модели для этого момента времени. У меня это обычно ноль. По крайней мере для сумматора. И только в следующий момент на его выходе будет сумма того, что было на входах модели в момент 0. Сумматор не может считать мгновенно. Это также ясно, как и то, что телепортации нет, не было и не будет :)

                  ... и вы похоже сами не знаете какие начальные условия вы задаете в задаче. :).

                  Я все досконально знаю. Для автоматов формально можно просчитать состояние системы на любом такте системы. Для этого определена операция композиции (умножения) автоматов. А можете ли это сделать Вы?


                  1. petuhoff
                    05.12.2022 16:48

                    Да, ситуация еще более запущена. Вы даже в выходе сумматора не вполне уверенны, у вас на старте расчета в момент времент t=0 на выходе суматора "обычно ноль", но это не точно:))).

                    В кокакой следующий момент времни? На следуюшем шаге интегрирования? Вы же ведем расчет дискретно, у нас есть шаг по времени, постоянный или переменный в зависимости от метода расчета.

                    Если замкнуть выход суматора на вход?

                    Блок сумматор как набор операций для контроллера конечно требует физического время для вычисления. Но блок суматор как математическая действие, не требует никакого времени. Например, я сумирую силу тяжести и силу упругого сжатия пружины, в динамической задаче "грузик на пружинке". что бы посчитать ускорение груза. Ваш блок сумирование выдаст 0, в итоге модель с самого начала будет содержать неверные скорости и ускорения для груза. Соответсвенно использовать такой суматтор для расчета ускорения под действием суммы сил нельзя в принципе.


          1. lws0954 Автор
            05.12.2022 14:08

            Я кажется понял, где в ВКП ошибка. :)))))

            Вы еще не поняли - ошибки нет :)))) Действительно, любой блок для меня процесс. Он по закону просто обязан иметь задержку. Как минимум, - единичную. Другое дело, что реальная величина этой задержки может быть разная. У "мгновенных блоков" они может быть близкой к нулю (но не равной нулю), у "тормознутых" - большая. Это как у реальных элементов: есть быстродействующие и не очень. Для меня любой блок в MATLAB и SimInTech должен иметь как минимум задержку определяемую заданным дискретным тактом. Т.е. в данном случае все блоки схемы имеют одинаковое быстродействие. В ВКПа же, например, объекты могут иметь разное быстродействие.

            Если бы вы соединили провода или трубы в физическом мире, то воросов нет. Но у нас тут математика ...

            У Вас математика, которая не согласуется с реальным миром. Что можно сказать о ней? Только одно - плохая математика. Такую математику обязательно надо дорабатывать до адекватности реальным системам.

            Работать то он будет, толко что он будет считать? Тайно сие виликая есть :)) 

            Ни каких тайн. Все строго формально обосновано. Для меня, например, полная тайна - где Рай и есть ли Бог ;) А то, что доказывается математички формально и подтверждается реальным поведением процессов тайны уже не представляет :).

            А как это происходит в SimInTech? Здесь пользователь ставит задержку на такт и обязан указатьначальное условие. И мы получаем две разные математические модели. В одном случае мы стартуем расчет с 1 на выходе и на каждом такте увеличиваем, в другом случае у нас на стартер уже двойка,

            И это не правильно. Любые вчисления требуют времени. У Вас в момент времени 0 сумматоры уже что-то суммируют, устанавливая значение на выходе. Это неправильная математика. В ВКПа это произойдет как минимум только на следующем такте (может быть и позже, но только не мгновенно). И это отражает поведение сумматора, как реального процесса. И это же найдет отражение в поведении всей схемы (об этом еще будет речь).

            А использую я этот сумматор не как аналог физического устройства, а как математическое выражение,...

            Любое даже самое маленькое "математическое выражение" это или маленький процесс или операция в раках другого процесса маленько или не очень. И об этом необходимо помнить обязательно.Особенно когда мы реализуем не отдельный процесс, а их параллельное множество. У Вас их тут как минимум два (по числу интеграторов). Но, если посчитать блоки, то их, безусловно, девять. И последнее число - это правильно. Я так думаю! :)


            1. lws0954 Автор
              05.12.2022 14:21

              Продолжаю докладывать:)

              Вот что имеем, если время такта равно 0.001

              Такт 1 мсек в порядке: ВКПа, MATLAB, SimInTech

              А здесь 0.1

              Такт 100мсек

              Да, параметры одинаковые. Вот только результаты разные :( Так кому довериться?


            1. petuhoff
              05.12.2022 17:51
              +1

              Любое даже самое маленькое "математическое выражение" это или маленький процесс или операция в раках другого процесса маленько или не очень. И об этом необходимо помнить обязательно.Особенно когда мы реализуем не отдельный процесс, а их параллельное множество. У Вас их тут как минимум два (по числу интеграторов). Но, если посчитать блоки, то их, безусловно, девять. И последнее число - это правильно. Я так думаю! :)

              Это безусловно новое слово в науке и технике, получается Matlab SimInTech столько лето обманывали доверчивый народ. Я то друак думал, что когда уменя модель груза на пружинке в виде набора блоков, совпадает с моделью на языке программирования, или в виде передаточной функции, это хорошо. А на самом деле это все неправильно! Вы только что отменили ТАУ, как науку, а Эйлер перевернулся в гробу!

              Вот у меня одна и та же математическая модель грузика на пружинке записанная разным способами в среде структурного моделирования, и она законмерно дает один и тот же результат с заданной точностью, поскольку это математическая модель! Но это ошибка!!!!

              В зеленом квадрате модель, использует сумматор 4-х слагаемых. Вопрос. Если заменит один блок суматора на три блока. Должна ли модель выдавать другие результаты? В SimInTech от перемены мест слагаемых суммма не меняется! Представляете и это ошибка!!!! Без ВКПа, мы об это даже не догадались бы:

              Разныем модели для ВКПа, на самом деле нет.
              Разныем модели для ВКПа, на самом деле нет.


              1. lws0954 Автор
                05.12.2022 22:45

                В зеленом квадрате модель, использует сумматор 4-х слагаемых. Вопрос. Если заменит один блок суматора на три блока. Должна ли модель выдавать другие результаты? В SimInTech от перемены мест слагаемых суммма не меняется! Представляете и это ошибка!!!! Без ВКПа, мы об это даже не догадались бы:

                Речь не об ошибке и не об отмене ТАУ, а о том, что, действительно, один блок и три блока - это разные реализации пусть и одного и того же. В статье на примере квадратичной функции я как раз эту тему подробнее рассматриваю. Модель ВКПа учитывает временные свойства блоков. MATLAB и SimInTech нет, т.е. игнорируется важное свойство реальных объектов - их инерционность. В этом проблема. Вы же тоже решаете не абстрактные формулы, которые нарушая все законы физики мгновенно что-то вычисляют. Вы моделируете поведение реальных объектов. И не учитывать временные свойства тех модулей/блоков, из которых они затем будут состоять -это не правильно. В этом причина тех различий в результатах, которые мы имеем.

                Не мне Вас учить, что скорость компонентов влияет на характеристики изделия из них. И в ВКПа так. Сейчас у меня все блоки работают на одной скорости, т.е. в одном дискретном времени. Возможно, это иногда не отражает свойств модели. Но здесь надо обсуждать модель, а не принцип. У Вас получаются блоки двух видов - "мгновенные" и работающие в дискретном времени (шаг интегрирования). В этом случае, чтобы адекватно отражать Вашт модели мне надо было бы в ВКПа "мгновенные" блоки помещать в более быстрые автоматные пространства. Я не могу, к сожалению, иметь дискретное время меньше 1 мсек. А именно в нем интеграторы дают более-менее качественную картину. Поэтому их "обвес" тоже работает на этой скорости. Часто это не имеет значения, а иногда влияет на процессы. Все определяется моделью.

                Вот и в последнем примере. В нем, кажется ошибка. Я тупо изменил левый верхний сумматор на оператор умножения и только тогда получил в SimInTech похожую картинку. Собрал в ВКПа. Получил аналог, но частота и амплитуда колебаний другая. Видимо, в этом случае "обвес" имеет значение. Но, может, и я что-то накосячил.

                Кстати, а как у Вас создается "многовходовой сумматор"? У меня в ВКПа только на два входа и нет коэффициентов на входах. Все пришлось реализовать блоками. Нет, конечно, проблем на С++ создать многовходовой сумматор и с коэффициентами. В этом случае свойства схемы будут другие. Ну, как в упомянутой выше статье создать блок для квадратичной функции.

                Еще раз. Речь не о том, что я в каком-то негативном свете хочу выставить MATLAB или SimInTech или, тем более, отменить ТАУ. Речь о том, что эти пакеты, как и теория, не учитывают временные свойства всех (!) компонент схем. Из-за этого возникают проблемы. Может не так часто как [мне бы] хотелось, но возникают. В данном случае они вылезли на примере аттрактора Лоренца (до этого на примере RS-триггера). И, честное слово, я не специально это сделал ;) Я случайно обнаружил и просто озвучил факт. А уж Ваше дело с ним соглашаться или нет. Но формально все верно. И с этим тоже уже ни чего не поделаешь. Автоматы - "понимашь", кибернетика - "чтоб ее". И ТАУ базируется на ней, а не наоборот. И поменять этот порядок я не могу. Со всем моим к Вам уважением и уважением к ТАУ. Во всем виновата теория автоматов и только она... ;).