Это функция, зависящая от тока через диод. Но этот ток является неизвестной величиной. И сама функция тоже поэтому неизвестна.
В первом посте я предложил своё решение. Там я принял, что ток диода равен току катушки
.
И предложил функцию, описывающую проводимость диода
Работает она, представляя диод как резистор с переменной проводимостью. Нелинейность создаётся при помощи сравнений и логической операции "ИЛИ":
- Если напряжение на конденсаторе(на мембране)
превышает некую константу
, представляющую собой порог напряжения для открытия диода и общую для всей сети, то
проводимость диода
становится равной 1.0 и ток через катушку
начинает возрастать а напряжение на
начинает убывать.
- Пока ток катушки
диод продолжает оставаться открытым, и, в силу инерции
опускается аж до отрицательных значений.
- Когда ток прекращается диод закрывается - оба условия не выполняются и проводимость
равна нулю.
- Падение напряжения на диоде не моделируется, так как лишь навредит модели.
Первый вопрос из шапки как раз таки и был про мой способ моделирования диода. Способ вроде хорош, что не нужно хранить дополнительные состояния-переменные. Для клетки хранится лишь список входных сопротивлений, напряжение на мембране и ток катушки(диода). Такое удобно подставлять в шаг итерации.
А также, он очень добр к железу - результаты сравнений являются масками, и мы обходимся вовсе без медленных условных переходов cmp/jmp - на уровне SSE инструкций это
генерация битовых масок,
операция или и
умножение(логическое и) напряжения на полученную маску. Такая парадигма идеально подходит для параллельной обработки и всяческих видеокарт.
Что касается трансформаторов - то они мало чего дадут, но сильно всё усложнят, и сильно отдалят модель от реальности.
Судя по тому, что Вы сейчас описали (множество соединённых между собой нейронов), в модели есть серьёзная проблема - это угасание сигналов. В Вашей цепи нет активных элементов. Мощность, так или иначе, рассеивается на резисторах. Если нейронов немного, то ещё ладно. Но если вы намекаете на аналогии с нервной системой, то сигналы рано или поздно угаснут до такой степени, что последующие нейроны просто перестанут на них реагировать.
В биологических нейронах такой проблемы нет, так как они сами генерируют электрический сигнал. Поэтому, Вашу модель нужно доработать, иначе она не будет функционировать.
Я и предложил идеальные "псевдотрансформаторы", которые являются источниками входного напряжения, управляемые током
. Ввести такое упрощение, чтобы напряжение на вторичных обмотках было пропорционально току на первичной. Это и будут активные элементы. Тогда входной ток в конденсатор становится рассчитать вроде очень просто. Правило кирхгофа, да.
В общем виде, задача решается так:
1. Для каждого элемента (двухполюсника) есть два неизвестных: ток через него
и напряжение на нём (между выводами)
.
2. Для активных сопротивлений всё просто, закон Ома:
3. Для реактивных сопротивлений (конденсаторы, индуктивности) чуть сложнее, возникают дифференциальные уравнения:
конденсатор:
индуктивность:
4. Для нелинейных элементов типа диода используется ВАХ (вольт-амперная характеристика) для связи между
и
, или какое-то её приближение.
5. Далее применяем правила Кирхгофа. В частности, они дадут некоторые простые выводы (но простых выводов может не хватить):
а) Ток через последовательно включенные элементы (без ответвлений) один и тот же
б) Напряжение на параллельно включенных элементах одно и то же.
6. После чего всё это сводится в систему уравнений от
переменных, где
- количество элементов.
Отличная задумка, так и хочется сделать. Двухполюсником является система конденсатор-диод-катушка и пытаюсь вымучить формулы для интегрирования напряжения и тока.
Про модель диода.
Судя по описанию на картинке, Вам достаточно простой модели:
1. Если напряжение на диоде меньше порогового:
, то сопротивление его бесконечно, то не течет:
2. Если напряжение на диоде равно пороговому:
, то сопротивление его рано нулю, ток может быть любым.
Как это может быть реализовано в Вашем случае, с учетом того, что диод подключен последовательно индуктивности, а ток через индуктивность не может остановиться мгновенно:
1. Если на прошлой итерации ток через диод (а значит и через индуктивность) был ноль (или поменял знак, что тоже самое), а напряжение еще не достигло порогового
, то считаем ток нулем,
, снова рассчитываем напряжение на диоде
.
2. Если на прошлой итерации ток через диод (а значит и через индуктивность) был ноль, (или поменял знак, что тоже самое), а напряжение уже достигло порогового
, то фиксируем напряжение:
и рассчитываем ток.
3. Если на прошлой итерации ток через диод (а значит и через индуктивность) был не ноль, то фиксируем напряжение:
и рассчитываем ток.
Моя схема такова:
1. Если ток катушки больше нуля или напряжение больше порогового - то диод открыт(в режиме КЗ) - фиксируем напряжение конденсатора и рассчитываем новый ток катушки по предложенной вами формуле.
2. В противном случае диод закрыт и ток катушки строго равен нулю (ввиду неточности модели ток может стать немного отрицательным, и "застрять" в этом положении, бесплатно заряжая конденсатор) - в программе нужно добавить следующую строку чтобы исправить ошибку:
IL += di() * dt;
IL *= gd(); // исправит бесплатную подзарядку конденсатора
Лёгкая функция - реализуется через 1 вычитание, 2 сравнения, логическое ИЛИ, логическое И на уровне арифметики без вовлечения условных переходов.
вопрос - как можно реализовать эту функцию через экспоненту?