пятница, 27 сентября 2024 г.

Интерполяция данных кривыми и их дифференцирование


Жил на свете человек,
Скрюченные ножки,
И гулял он целый век
По скрюченной дорожке.

   К.И. Чуковский, "Скрюченная песня"

 Занятие в аудитории было посвящено практичеcкому выполениею построения графиков, соотвествующих току у его производной в системе последовательно соединенных катушки и резистора (задание - воспроизвести соответствующие графики из учебника Зельдовича-Яглома). 

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




пятница, 20 сентября 2024 г.

Оформление результатов моделирования: рисунки и сохранение в html

Сегодня я злой, придирчивый, детки, — хмурясь и опуская брови, сказал Репин. — Ко мне сегодня без лошадки не подходи. Надо уметь нарисовать лошадку — вот в чем суть, господа художники! Сумеете нарисовать лошадку — мигом подобрею.

    Цитата из воспоминаний о И.Е. Репине, приведенная в эссе В. Березина "Лошадь Репина" ("Новый мир", №11, 2022).


 1. Специальное художественное оформление и сохранение графиков

Могут возникать ситуации, когда более наглядно будет не использовать разметку осей по умолчанию, а специально указать положение меток и то, что на них должно быть указано, допустим, какие либо текстовые обозначения.  В качестве примера рассмотрим, как может быть сформирован при помощи MATLAB/Octave график (панель (А) на рисунке ниже) с такой же разметкой, как на рис. 13.2.3 в учебнике Зельдовича-Яглома (панель (В) на рисунке ниже):


В этом случае положение четырех меток по оси абсцисс указано свойством 'XTick' объекта - текущих осей (gca), а соответствующие им подписи - свойством объекта 'XTickLabel' в виде массива ячеек (cell, т.е. в фигурных скобках), содержащих текстовые подписи, т.е. 

set(gca,'XTick',[0,R*C,2*R*C,3*R*C],...

    'XTickLabel',{'0','RC','2RC','3RC'},...

    'YTick',E0,'YTickLabel',{'E_0'});

Здесь троеточия в конце строки позволяют переносить длинную последовательность команд на новую строку. С осью ординат - аналогично, только не 'XTick' и 'XTickLabel', а 'YTick' и 'YTickLabel'. 

Помимо этого, для подписей на осях (а также в легенде или вообще тексте, помещённом на график) могут потребоваться формы букв и символов, отсутствующие по умолчанию, формулы и т.п. В этом случае следует воспользоваться нотацией LaTeX (см. для справки 'Математические формулы в LaTeX'), заключив надпись в символы формулы $ и указав свойство 'Interpreter', 'Latex' - например, для оси ординат на рисунке (А) выше

ylabel('$\varphi,~\mathrm{V}$','Interpreter','Latex')

Здесь ~ задает фиксированный пробел, а \mathrm{} делает текст внутри прямым шрифтом (что есть стандарт для единиц измерений, в отличие от переменных в формулах).

Кроме того, для создания прилично выглядящих графиков для публикаций их надо сохранять в виде графических файлов на диск. Процедура по умолчанию (Save as) в меню существенно зависит от разрешения монитора и размера развернутого окна (Figure). Поэтому надежнее распечатывать графики в командном режиме с явным указанием размера картинки (например, с сантиметрах). Это делается указанием свойств текущего графического окна (gcf), например, как

set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 5],'PaperSize',[20 5])

Сама команда распечатки

print('FigRC2','-dpng','-r150')

Здесь  'FigRC2' - имя графического файла для сохранения (расширение будет подставлено автоматически), буквосочетание после '-d' - тип файла ('-dpng' - растровый рисунок в PNG, '-dpdf' - векторный график в pdf, такой вариант может быть предпочтительным когда график содержит только линии - векторный формат их прорисовывает именно гладкими линиями, не растеризирует надписи, сохраняя буквы более гладкими, и т.п.), число после -r - разрешение dpi (требования к качественно выглядящим типографским графикам могут содержать явное указание, например 300dpi, то есть это -r300). 

Программный код полностью - по ссылке. Там также показано, как включить в фигуру картинку из графического файла - считать ее командой imread и построить сформированную таким образом RGB матрицу как изображение без осей координат (imshow).

2. Выгрузка комментированного кода результатов его выполнения в виде документа html

Обе программы, MATLAB и GNU Octave, позволяют сохранять программный код в виде веб-страницы с текстом, формулами, заголовками, комментирующими расчетный код, см. например,  презентацию материалов второго занятия.

Основная конструкция оформления исходного кода для этой цели - разделять блоки комментирующего текста и исполнимого кода двойным знаком коментария %%, см. оформление, приводящее к упомянутой презентации, по ссылке на исходный m-файл. В текстовых разделах можно употреблять и более структурирующую их разметку - перечень соответствующих команд см. на сайтах разделов помощи MATLAB или Octave.

После этого программу надо не просто выполнить (run), а опубликовать (publish), создастся папка html, которая будет содержать сформированный документ и графики к нему (если при оформлении вставлялись внешние картинки, то их надо скопировать туда же). В MATLAB это можно сделать прямо из среды кнопкой - на вкладке Publish (и там же есть настройки), в GNU Octave это делается из командной строки командой publish('имя_файла.m') - сам файл с кодом, называющийся имя_файла.m при этом в редакторе можно и не открывать. 

Небольшая тонкость, касающаяся процесса в Octave: по умолчанию программы, проводящие разметку в процессе, рассчитаны на кодировку UTF-8. Поэтому, если m-файл создан в Windows в кодировке CP1251 (или на Mac'e в его кодировке), то при попытке запустить publish с таким файлом вылезет ошибка. Поэтому файл надо сконвертировать в кодировку UTF-8 (например, при помощи Notepad++) и использовать в аргументе publish уже этот сконвертированный вариант.

Кроме того, в стилевом файле по умолчанию имя заголовка подставляется по-английски, самый просто способ исправить - открыть любым блокнотом сгенерированный html-файл, найти там строку <h2>Contents</h2> и заменить ее на <h2>Содержание</h2>. 

И вообще в целом, этот файл - стандартный простой html со встроенной таблицей стилей (css), которую можно настроить, открыв и скорректировав файл как текстовый. Например, Octave, в отличие от MATLAB'а по умолчанию печатает код в рамке на белом фоне (MATLAB - на светло-сером). Использовать светло-серый фон можно добавив background-color: LightGray в стиля участков кода, т.е. сделав

pre.oct-code {

  border: 1px solid Grey;

  padding: 5px;

  background-color: LightGray

И так с любым форматированием - это уже делается стандартными методами, можно вручную в блокноте, можно в Word'e или его аналогах и т.п. Сгенерированный html файл можно также конвертировать в другие удобные форматы, используя, например, свободную программу Pandoc.

четверг, 12 сентября 2024 г.

Основы работы в MATLAB/Octave на примере простых электрических цепей

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

Часть I:  основы работы с языком, задание данных, функции, работающие с ними и основы визуализации - на примере закона Ома для резистора, конденсатора и цепи с их параллельным соединением.




В интерактивном виде для расчетов в OctaveOnline - по ссылке (там можно менять параметры и пересчитывать в интерактивном онлайн-режиме (при каждом редактировании/изменении не забывать нажать на сохранение перед запуском на счет)).

Часть II: самостоятельное упражнение - по образцу кода с резистором и конденсатором, написать программу, моделирующую поведение цепи с резистором и катушкой индуктивности, используя параграфы 13.5 и 13.5 учебника  Зельдовича и Яглома для справки по соответствующей теории; построить графики, воспроизводящие иллюстрации из этих параграфов.

четверг, 5 сентября 2024 г.

Вводное занятие

Введение - непристойное слово. 

Цитата из "Лексикона прописных истин" Г. Флобера

 

Обзорное вводное занятие, посвященное двум основным вопросам: (1) при помощи чего планируется моделировать и (2) что планируется моделировать.

(1) Основной язык программирования для лабораторных занятий по предмету - MATLAB. Тем, у кого нет соответствующей программной среды (или же раздражает медлительность интерфейса и большой объем требуемой памяти ее современных версий), следует установить GNU Octave [https://octave.org/, см. также постоянную ссылку в правой колонке сайта] - последние версии этого свободного программного обеспечения(для всех целей учебного курса будет использоваться только программный код, полностью совместимый с MATLAB). 

Кроме этого, можно использовать онлайн-версию GNU Octave [https://octave-online.net/, см. также постоянную ссылку в правой колонке сайта], для не слишком долгих и массивных вычислений ее может быть достаточно; хранить там свои файлы можно при условии бесплатной регистрации. Кроме того, это дает возможность создавать отдельные веб-приложения в режиме просмотра (Octave Online Bucket), ссылкой на которые можно демонстрировать результаты работы с отдельной моделью.

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