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

В этом примере показано, как использовать ode23t решить жесткое дифференциальное алгебраическое уравнение (DAE), которое описывает электрическую схему [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');

Ссылки

[1] Hairer, E. и Герхард Ваннер. Решение Обыкновенных дифференциальных уравнений II: Жесткие и Дифференциально-алгебраические проблемы. Спрингер Берлин Гейдельберг, 1991, p. 377. Открыть WorldCat, https://public.ebookcentral.proquest.com/choice/publicfullrecord.aspx? p=3099070

Локальные функции

Перечисленный здесь локальная функция помощника что решатель ОДУ 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

Смотрите также

|

Похожие темы