В этом примере показано, как использовать ode23t для решения жесткого дифференциального алгебраического уравнения (DAE), описывающего электрическую цепь [1]. Проблема однотранзисторного усилителя, закодированная в примере файла amp1dae.m, может быть переписана в полуявном виде, но этот пример решает ее в исходном виде ). Задача включает в себя постоянную сингулярную массовую матрицу М .
Схема транзисторного усилителя содержит шесть резисторов, три конденсатора и транзистор.

Начальный сигнал напряжения - 200.dt).
Рабочее напряжение Ub 6.
Напряжения в узлах задаются 1,2,3,4,5).
Значения резисторов ) постоянны, и ток через каждый резистор удовлетворяет U/R.
Значения конденсаторов ) постоянны, и ток через каждый конденсатор удовлетворяет I=C⋅dU/dt.
Целью является решение проблемы выходного напряжения через узел 5, ).
Чтобы решить это уравнение в MATLAB ®, необходимо кодировать уравнения, кодировать массовую матрицу и задавать начальные условия и интервал интегрирования перед вызовом решателяode23t. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные именованные файлы в каталоге по пути MATLAB.
Используя закон Кирхоффа для выравнивания тока через каждый узел (от 1 до 5), можно получить систему из пяти уравнений, описывающих схему:
(U4 -U5 ) =0.
Массовая матрица этой системы, найденная путём сбора производных членов в левой части уравнений, имеет вид
),
где 10-6 1,2,3.
Создайте массовую матрицу с соответствующими константами , а затем используйте odeset для задания матрицы массы. Несмотря на то, что очевидно, что матрица массы является единственной, оставьте 'MassSingular' опция при ее значении по умолчанию 'maybe' для тестирования автоматического обнаружения проблемы дисковой полки решателем.
c = 1e-6 * (1:3);
M = zeros(5,5);
M(1,1) = -c(1);
M(1,2) = c(1);
M(2,1) = c(1);
M(2,2) = -c(1);
M(3,3) = -c(2);
M(4,4) = -c(3);
M(4,5) = c(3);
M(5,4) = c(3);
M(5,5) = -c(3);
opts = odeset('Mass',M);Функция transampdae содержит систему уравнений для этого примера. Функция определяет значения для всех напряжений и постоянных параметров. Производные, собранные в левой части уравнений, кодируются в матрице масс, и transampdae кодирует правую часть уравнений.
function dudt = transampdae(t,u) % Define voltages and parameters Ue = @(t) 0.4*sin(200*pi*t); Ub = 6; R0 = 1000; R15 = 9000; alpha = 0.99; beta = 1e-6; Uf = 0.026; % Define system of equations f23 = beta*(exp((u(2) - u(3))/Uf) - 1); dudt = [ -(Ue(t) - u(1))/R0 -(Ub/R15 - u(2)*2/R15 - (1-alpha)*f23) -(f23 - u(3)/R15) -((Ub - u(4))/R15 - alpha*f23) (u(5)/R15) ]; end
Примечание.Эта функция включается как локальная функция в конце примера.
Задайте исходные условия. В этом примере используются согласованные начальные условия для тока через каждый узел, вычисленные в [1].
Ub = 6; u0(1) = 0; u0(2) = Ub/2; u0(3) = Ub/2; u0(4) = Ub; u0(5) = 0;
Решение системы дисковых полок в течение интервала времени [0 0.05] использование ode23t.
tspan = [0 0.05]; [t,u] = ode23t(@transampdae,tspan,u0,opts);
Постройте график начального напряжения ) и выходного напряжения t).
Ue = @(t) 0.4*sin(200*pi*t); plot(t,Ue(t),'o',t,u(:,5),'.') axis([0 0.05 -3 2]); legend('Input Voltage U_e(t)','Output Voltage U_5(t)','Location','NorthWest'); title('One Transistor Amplifier DAE Problem Solved by ODE23T'); xlabel('t');

[1] Хэйрер, Э. и Герхард Ваннер. Решение обыкновенных дифференциальных уравнений II: Жесткие и дифференциально-алгебраические задачи. Спрингер Берлин Гейдельберг, 1991, с. 377.
Здесь приведена локальная вспомогательная функция, которая используется решателем ODE. ode23t вызывает для вычисления решения. Можно также сохранить эту функцию как собственный файл в каталоге по пути MATLAB.
function dudt = transampdae(t,u) % Define voltages and parameters Ue = @(t) 0.4*sin(200*pi*t); Ub = 6; R0 = 1000; R15 = 9000; alpha = 0.99; beta = 1e-6; Uf = 0.026; % Define system of equations f23 = beta*(exp((u(2) - u(3))/Uf) - 1); dudt = [ -(Ue(t) - u(1))/R0 -(Ub/R15 - u(2)*2/R15 - (1-alpha)*f23) -(f23 - u(3)/R15) -((Ub - u(4))/R15 - alpha*f23) (u(5)/R15) ]; end