пятница, 17 октября 2025 г.

Аппроксимация линейной комбинацией функций

 Рассмотрим масштабированную кривую зависимости напряжения батареи от уровня заряда, полученную на предыдущем занятии. Для процесса разрядки соотеветствующие значения хранятся в переменных Vd1 (напряжение от 3 В до 4.2 В) и SOC1dn (уровни заряда от 0 до 1, соотвестственно). Для удобства и экономии времени расчета эти переменные можно сохранить на диск в файл, с инменм, например, V_SoC.mat (из панели переменных вручную или командой save). 

Соотвественно, для решения задачи иетерполяции удобно создать новый m-файл, загрузив в его начале нужные данные как

load V_SoC

Набор типичных комбинаций функций, используемый для представления зависимости V(SoC) можно найти в статье или выборке из нее, приведенной на 8 слайде презентации вводного занятия.

Для начала рассмотрим два варианта: (1) полиномиальную интерполяцию и (2) интерполяцию моделью Нернста. 

пятница, 10 октября 2025 г.

Интерполяция и экстраполяция сплайнами

 Предварительно выбраны напряжения при разрядке Vd и зарядке Vc батареи и рассчитаны методом подсчёта протекшего заряда (интегрирование тока по отношению к номинальной емкости) соответствующие им уровни заряда SoSd и SoCc. Соответствующие графики:



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

пятница, 26 сентября 2025 г.

Зависимость напряжения открытой цепи от времени и от степени зарядки

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

Графики делать отдельно для процессов зарядки и разрядки. 

Чтобы выбрать индексы в переменной, соответствующие нужному критерию, используется функция find (например, indn=find(I<0) - выдает индексы элементов массива I, которые меньше нуля, что соответствует разрядке батареи; построение только соответствующих точек как функции времени - plot(t(indn),I(indn))., подробнее - см. по ссылке (или же присвоить нужное подмножество элементов вектора другой переменной). Каждый рисунок подписать заголовком, описывающим, что изображено (используя title). 

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


Для построения зависимости напряжения от степени заряда (SoC), SOC можно определить двумя способами. Первый - непосредственно по определению

где интеграл с переменным верхним пределом вычисляется функцией cumtrapz (см. ее документацию по ссылке). Поправочный коэффициент h для разрядки близок к единице, для зарядки - подобрать так, чтобы при полной зарядке SoC=1.

Второй, учитывая постоянность тока разрядки и зарядки: 0 соответствует минимуму напряжения в данных, 1 соответствует максимуму напряжения в данных. Найти индексы минимального и максимального значения - использовать функции min и max с двумя выходами (значение и его индекс), см. подробнее по ссылке-1 и ссылке-2. Вектор SoC создать линейным семплингом от 0 до 1 с числом элементов массива, равным длине выбранного участка (функция length, см. по ссылке), см. по ссылке описание соответствующей функции linspace.

Свойства графиков

Линии и маркеры на графике модифицируются задаением их свойств - или в аргументе самой функции plot, или присвоив команде plot имя и перечисляя свойства командой set, примененной к этому имени объекта. 

Пример первого подхода:
    figure
    plot(t,I,'--','color','blue','LineWidth',1);
    hold on;
    plot(t(1:100:end),I(1:100:end),'o','MarkerSize',4);
    xlabel('{\it t}, s');
    ylabel('{\it I}, A');
    set(gca,'FontSize', 18, 'FontName','Times')

Пример второго подхода:
    figure
    pl1=plot(t,V);
    hold on;
    pl2=plot(t(1:100:end),V(1:100:end));
    xlabel('{\it t}, s');
    ylabel('{\it v}, V');
    title('C');
    set(pl1,'LineStyle','-','LineWidth',1,'color','blue');
    set(pl2,'Marker','s','MarkerFaceColor','magenta',...
       'color','black','LineWidth',1.5,'MarkerSize',10);
    set(gca,'FontSize', 20, 'FontName','Times');

Перечень свойств можно переносить на следующую строку (как это показано выше для объекта pl2), закончив разрываемую строку многоточием (это относится вообще в любым строкам). Объект gca - текущие оси (задается общие свойства типа размера и начертания шрифта осей). Полный перечень свойств графических объектов - по ссылке.




пятница, 5 сентября 2025 г.

Загрузка и построение данных

В базе экспериментальных данных, описанной в работе "Experimental data on open circuit voltage characterization for Li-ion batteries", находящейся в свободном доступе по https://doi.org/10.1016/j.dib.2021.107071, выбрать одну батарею (каждый студент в группе - свою, различную от прочих), скачать данные измерения тока и напряжения при цикле разряда-заряда при температуре T=20 oC и построить соответствующие графики. 

Разобрать данные, считанные с переменную data, в отельные переменные t (время), I (ток), U (напряжение), присвоив им все содержимое соответствующей колонки (например, t=data(:,1)); для данных разных экспериментов создать разные файлы (дополнив имена переменных номером эксперимента (например, t1 - время для первого экcперимента, t2 - для второго и т.д.).

Построить графики для всех экспериментов на одном рисунке (то есть на одном - для тока, на другом - для напряжения); индивидуальные фигуры создаются командой figure. Чтобы графики накладывались, после первого указать команду отключения перерисовки (hold on). Подписать оси с обозначением величин и их размерностей (xlabel, ylabel), каждых из графиков должен быть своего цвета и стиля штриховки - подробности оформления свойств линий и графика в целом см. по ссылке.

Подобрать нормально читаемый размер шрифта ('FontSize') и его начертание ('FontName'). Глобальное оформление текущих осей делается командой set, устанавливающей свойства, в данном случае, текущих осей (gca), например, set(gca,'FontName','Times').

Отчет: прислать m-файл, выполняющий все требуемые действия на электронную почту, заголовок файла в форме "Фамилия_1" (чтобы было видно, кто сделал и номер практического занятия). В начале файла комментарием (т.е. после %) указать название исследуемой батареи.