GraphPlot

command module
v0.0.0-...-cb49962 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 5, 2022 License: GPL-3.0 Imports: 2 Imported by: 0

README

#+TITLE: GraphPlot
#+AUTHOR: Kovalev Pavel

Программа для моделирования работы электрической схемы, написанная на Golang.

При запуске создает png файл, содержащий график напряжения на резисторе-нагрузке, в текущей директории.

* Общая информация
** Зависимости
- golang 1.15
#+begin_src bash
apt install golang
#+end_src
- [[https://github.com/gonum/plot][gonum]] 0.9.0
- [[https://github.com/tdewolff/canvas][canvas]]

** Сборка программы
#+begin_src bash
make
#+end_src

** Пример запуска программы
#+begin_src bash
./graph plot
#+end_src

** Доступные аргументы
#+begin_src text
./graph plot --help

Generate plot images in your directory.
Available formats are: png, svg, tex, pdf, jpg, jpeg, eps, tif, tiff.

Example: graph plot -s 0.1 -o results -f png

This will create directory results/ and put plot images in "png" format into it.

Usage:
  graph plot [flags]

Flags:
      --buffer-size int         change size of line-draw buffer (default 100)
  -c, --capacitors uint         change number of capacitors in circuit (default 6)
  -f, --format string           change resulting images format (default "svg")
  -h, --help                    help for plot
  -l, --load-resistance float   change load resistance value (default 10000)
  -o, --output string           change results directory name (default "results")
  -s, --step float              change default step amount (default 0.001)
  -v, --supply-voltage float    change supply voltage in circuit (default 6000)

Global Flags:
      --config string   config file (default is $HOME/.config/graph/config.yaml)
      --debug           enable debug mode
#+end_src

* Структура программы
- pkg/adapters/circuit

  Код, относящийся к логике схемы(circuit.go).
  Определена основная структура состояния, а также
  внутренние структуры реализующие два состояния системы(charging_state.go,discharging_state.go).
  Для структур состояния определен шаблон функций(state.go), которые они
  должны реализовывать.

- pkg/adapters/plot-img

  Построение графика по заданным точкам при помощи библиотеки gonum.

- pkg/adapters/integrator

  Логика интегрирования.

  Определен шаблон функции и во вложенных папках расположены разные
  реализации методов функции интегрирования.

- pkg/components/plot-cli

  Запуск интегрирования.

- pkg/components/point-generator

  Логика интегрирования по заданному интервалу, вызывается в pkg/components/plot-cli, запускает интегратор
  из pkg/adapters/integrator.

- pkg/domain

  Общие данные, структуры, в частности список интеграторов, доступных pkg/components/point-generator.

* Описание системы ОДУ
Генератор Маркса.

В основе системы уравнений лежит зависимость напряжения на конденсаторе для RC цепей.

u = U_{0}(1-e^{-t/\tau})

Состояние системы определяется текущим напряжением на конденсаторах(C_{0}), а также значениями \tau (R*C_{0}, R_{нагр}*С_{посл}).
Количество конденсаторов равно количеству ступеней генератора.

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

При последовательной разрядке напряжение увеличивается кратно количеству ступеней генератора.

Разрядка конденсаторов начинается, когда напряжение на первом конденсаторе достигает напряжению пробоя замычек(U_{разр}).

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

u = U_{зам}*e^{-t/\tau}

Использовалась информация из [[https://ocw.snu.ac.kr/sites/default/files/NOTE/Lecture_05_Marx%20generators%20and%20Marx-like%20circuits.pdf][презентации]]

X = (u_{1}, ... , u_{n})

Зарядка конденсаторов (\tau_{i} = 2*R*i*C_{0}):
f(x_{i}) = 1/\tau_{i} * (U_{0} - x_{i})

Разрядка конденсаторов (\tau = R_{нагрузки}*C_{послед}):
f(x_{i}) = -1/\tau_{i} * x_{i}

Аналитическое решение получено из формулы:
\sum_{i} u_{i} = U_{0} * \sum_{i}(1-e^{-t/\tau}) = U_{0}*N - \sum_{i} U_{0}*e^{-t/\tau}

где t = -\tau_{0}\ln(1-U_{разр}/U_{0}) - время зарядки конденсатора до U_{разр}.

* Примеры вывода
** Характеристики схемы
- Электроемкость конденсаторов (C): 1 мкФ
- Сопротивление ограничивающих резисторов (R): 5 кОм
- Напряжение источника тока (U_0): 6 кВ
- Количество ступеней конденсаторов: 5
- Напряжение пробоя замычек: 5.7 кВ
- Сопротивление нагрузки: 10 кОм

[[./misc/scheme.png]]

** Метод Эйлера vs Теория
[[./misc/euler-theory.png]]

Красная функция - теория, черная - результат интегрирования.

** Метод средней точки vs Теория
[[./misc/midpoint-theory.png]]

Красная функция - теория, черная - результат интегрирования.

** Метод Богатского-Шампина vs Теория
[[./misc/bogatskiy-shampin.png]]

Красная функция - теория, черная - результат интегрирования.

** Метод Эйлера vs Метод Богатского-Шампина
[[./misc/euler-shampin.png]]

Зеленая функция - метод Эйлера, черная - метод Богатского-Шампина.

** Метод 3/8 vs Теория
[[./misc/three-eighth-theory.png]]

Красная функция - теория, черная - результат интегрирования.

** Неявный метод средней точки vs Теория

Для схемы с одним конденсатором.

[[./misc/midpointImpl-theory.png]]

Красная функция - теория, черная - результат интегрирования.

** Оценка относительной ошибки неявного метода средней точки

Для схемы с одним конденсатором.

[[./misc/midpointImpl-differr.png]]

** Оценка относительной ошибки явного метода 3/8
[[./misc/three-eighth-theory-differr.png]]

** График зарядки-разрядки системы
[[./misc/three-eighth-multiCycle.png]]

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL