Решение жесткого дифференциального алгебраического уравнения транзистора

В этом примере показано, как использовать ode23t для решения жесткого дифференциального алгебраического уравнения (ДАУ), которое описывает электрическую схему [1]. Задача однотранзисторного усилителя, закодированная в файле amp1dae.m, может быть переписана в полуявном виде, но этот пример решает его в исходном виде Mu=ϕ(u). Задача включает постоянную, сингулярную большую матрицу M.

Схема транзисторного усилителя содержит шесть резисторов, три конденсатора и транзистор.

  • Начальный сигнал напряжения Ue(t)=0.4sin(200πt).

  • Рабочее напряжение Ub=6.

  • Напряжения в узлах заданы как Ui(t)  (i=1,2,3,4,5).

  • Значения резисторов Ri  (i=1,2,3,4,5,6) являются постоянными, и ток через каждый резистор удовлетворяет I=U/R.

  • Значения конденсаторов Ci  (i=1,2,3) являются постоянными, и ток через каждый конденсатор удовлетворяет I=CdU/dt.

Цель состоит в том, чтобы решить для выходного напряжения через узел 5, U5(t).

Чтобы решить это уравнение в MATLAB ®, необходимо кодировать уравнения, кодировать большую матрицу и задать начальные условия и интервал интегрирования перед вызовом решателя ode23t. Можно либо включить необходимые функции в качестве локальных функций в конец файла (как это сделано здесь), либо сохранить их как отдельные именованные файлы в директории по пути MATLAB.

Кодовая Большая матрица

Используя закон Кирхгофа, чтобы выровнять ток через каждый узел (1-5), можно получить систему из пяти уравнений, описывающих схему:

node1:  Ue(t)R0-U1R0+C1(U2-U1)=0,node2:  UbR2-U2(1R1+1R2)+C1(U1-U2)-0.01f(U2-U3)=0,node3:f(U2-U3)-U3R3-C2U3=0,node4:  UbR4-U4R4+C3(U5-U4)-0.99f(U2-U3)=0,node5:-U5R5+C3(U4-U5)=0.

Большая матрица этой системы, найденная путем сбора производных в левой части уравнений, имеет вид

M=(-c1c1000c1-c100000-c200000-c3c3000c3-c3),

где ck=k×10-6 для k=1,2,3.

Создайте большую матрицу с соответствующими константами ck, а затем используйте 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);

Графическое изображение результатов

Постройте график начального напряжения Ue(t) и выходное напряжение U5(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');

Figure contains an axes. The axes with title One Transistor Amplifier DAE Problem Solved by ODE23T contains 2 objects of type line. These objects represent Input Voltage U_e(t), Output Voltage U_5(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

См. также

|

Похожие темы