Этот пример показывает, как решить транзистор с дифференциальным уравнением с частными производными (PDE) и использовать результаты, чтобы получить производные с частными производными, которые являются частью решения большей задачи.
Рассмотрите УЧП
Это уравнение возникает в теории транзисторов [1], и - функция, описывающая концентрацию носителей избыточного заряда (или отверстий) в основе PNP транзистора. и являются физическими константами. Уравнение удерживается на интервале для раз .
Начальное условие включает константу и дается
Задача имеет граничные условия, заданные как
Для фиксированного , решение уравнения описывает сверновение избыточного заряда как . Это сверновение производит ток, называемый током разряда излучателя, который имеет другую постоянную :
Уравнение верно для из-за несоответствия граничных значений в для и . Поскольку УЧП имеет решение серии замкнутой формы для можно вычислить ток разряда излучателя как аналитически, так и численно, и сравнить результаты.
Чтобы решить эту задачу в MATLAB, необходимо кодировать уравнение УЧП, начальные условия и граничные условия, затем выбрать подходящий mesh решения перед вызовом решателя pdepe
. Можно либо включить необходимые функции в качестве локальных функций в конце файла (как это сделано здесь), либо сохранить их как отдельные, именованные файлы в директории по пути MATLAB.
Чтобы отслеживать физические константы, создайте массив структур с полями для каждого. Когда вы позже задаете функции для уравнений, начального условия и граничных условий, можно пройти в этой структуре как дополнительный аргумент, чтобы функции имели доступ к константам.
C.L = 1; C.D = 0.1; C.eta = 10; C.K = 1; C.Ip = 1;
Прежде чем вы сможете кодировать уравнение, необходимо убедиться, что это в том виде, в котором pdepe
решатель ожидает:
В этой форме PDE является
Таким образом, значения коэффициентов в уравнении
(Декартовы координаты без угловой симметрии)
Теперь можно создать функцию, чтобы кодировать уравнение. Функция должна иметь подпись [c,f,s] = transistorPDE(x,t,u,dudx,C)
:
x
- независимая пространственная переменная.
t
- независимая временная переменная.
u
- зависимая переменная, дифференцируемая по отношению к x
и t
.
dudx
- частная пространственная производная .
C
является дополнительным входом, содержащим физические константы.
Выходные выходы c
, f
, и s
соответствуют коэффициентам в стандартной форме уравнения УЧП, ожидаемым по pdepe
.
В результате уравнение в этом примере может быть представлено функцией:
function [c,f,s] = transistorPDE(x,t,u,dudx,C) D = C.D; eta = C.eta; L = C.L; c = 1; f = D*dudx; s = -(D*eta/L)*dudx; end
(Примечание. Все функции включены в качестве локальных функций в конце примера.)
Затем напишите функцию, которая возвращает начальное условие. Начальное условие применяется в первый раз и предоставляет значение для любого значения . Используйте сигнатуру функции u0 = transistorIC(x,C)
для записи функции.
Начальное условие является
Соответствующая функция является
function u0 = transistorIC(x,C) K = C.K; L = C.L; D = C.D; eta = C.eta; u0 = (K*L/D)*(1 - exp(-eta*(1 - x/L)))/eta; end
Теперь напишите функцию, которая оценивает граничные условия . Для задач, поставленных на интервале , граничные условия применяются для всех и либо или . Стандартная форма для граничных условий, ожидаемых решателем,
Написанные в этой форме, граничные условия для этой задачи
- Для , уравнение Коэффициенты:
- Аналогично для , уравнение Коэффициенты:
Граничная функция должна использовать сигнатуру функции [pl,ql,pr,qr] = transistorBC(xl,ul,xr,ur,t)
:
Входы x l
и u l
соответствуют и для левого контура.
Входы xr
и ur
соответствуют и для правого контура.
t
- независимая временная переменная.
Выходные выходы pl
и ql
соответствуют и для левого контура ( для этой задачи).
Выходные выходы pr
и qr
соответствуют и для правого контура ( для этой задачи).
Граничные условия в этом примере представлены функцией:
function [pl,ql,pr,qr] = transistorBC(xl,ul,xr,ur,t) pl = ul; ql = 0; pr = ur; qr = 0; end
Mesh решения определяет значения и где решение оценивается решателем. Поскольку решение этой задачи изменяется быстро, используйте относительно мелкий mesh из 50 пространственных точек в интервале и 50 временных точек в интервале .
x = linspace(0,C.L,50); t = linspace(0,1,50);
Наконец, решите уравнение, используя симметрию , уравнение УЧП, начальное условие, граничные условия и сетки для и . Начиная с pdepe
ожидает, что функция PDE использует четыре входов, а функция начальных условий - один вход, создайте указатели на функцию, которые проходят в структуре физических констант в качестве дополнительного входа.
m = 0; eqn = @(x,t,u,dudx) transistorPDE(x,t,u,dudx,C); ic = @(x) transistorIC(x,C); sol = pdepe(m,eqn,ic,@transistorBC,x,t);
pdepe
возвращает решение в трехмерный массив sol
, где sol(i,j,k)
аппроксимирует k
первый компонент решения оценивается в t(i)
и x(j)
. Для этой задачи u
имеет только один компонент, но в целом можно извлечь k
компонент решения с командой u = sol(:,:,k)
.
u = sol(:,:,1);
Создайте объемную поверхностную диаграмму решения нанесенный на график в выбранных точках mesh для и .
surf(x,t,u) title('Numerical Solution (50 mesh points)') xlabel('Distance x') ylabel('Time t') zlabel('Solution u(x,t)')
Теперь постройте график просто и для получения вида сбоку контуров на объемной поверхностной диаграмме.
plot(x,u) xlabel('Distance x') ylabel('Solution u(x,t)') title('Solution profiles at several times')
Использование последовательного решения для ток разрядки излучателя может быть выражен как бесконечный ряд [1]:
Напишите функцию, чтобы вычислить аналитическое решение для использование 40 терминов в серии. Единственная переменная - это время, но задайте второй вход в функцию для структуры констант.
function It = serex3(t,C) % Approximate I(t) by series expansion. Ip = C.Ip; eta = C.eta; D = C.D; L = C.L; It = 0; for n = 1:40 % Use 40 terms m = (n*pi)^2 + 0.25*eta^2; It = It + ((n*pi)^2 / m)* exp(-(D/L^2)*m*t); end It = 2*Ip*((1 - exp(-eta))/eta)*It; end
Использование числового решения для как вычислено pdepe
, можно также вычислить числовое приближение для в с
Вычислим аналитические и числовые решения для и постройте график результатов. Использование pdeval
для вычисления значения в .
nt = length(t); I = zeros(1,nt); seriesI = zeros(1,nt); iok = 2:nt; for j = iok % At time t(j), compute du/dx at x = 0. [~,I(j)] = pdeval(m,x,u(j,:),0); seriesI(j) = serex3(t(j),C); end % Numeric solution has form I(t) = (I_p*D/K)*du(0,t)/dx I = (C.Ip*C.D/C.K)*I; plot(t(iok),I(iok),'o',t(iok),seriesI(iok)) legend('From PDEPE + PDEVAL','From series') title('Emitter discharge current I(t)') xlabel('Time t')
Результаты соответствуют достаточно хорошо. Можно дополнительно улучшить численный результат от pdepe
при использовании более мелкого mesh решения.
Здесь перечислены локальные вспомогательные функции, которые решатель PDE pdepe
вызывается для вычисления решения. Также можно сохранить эти функции как собственные файлы в директории по пути MATLAB.
function [c,f,s] = transistorPDE(x,t,u,dudx,C) % Equation to solve D = C.D; eta = C.eta; L = C.L; c = 1; f = D*dudx; s = -(D*eta/L)*dudx; end % ---------------------------------------------------- function u0 = transistorIC(x,C) % Initial condition K = C.K; L = C.L; D = C.D; eta = C.eta; u0 = (K*L/D)*(1 - exp(-eta*(1 - x/L)))/eta; end % ---------------------------------------------------- function [pl,ql,pr,qr] = transistorBC(xl,ul,xr,ur,t) % Boundary conditions pl = ul; ql = 0; pr = ur; qr = 0; end % ---------------------------------------------------- function It = serex3(t,C) % Approximate I(t) by series expansion. Ip = C.Ip; eta = C.eta; D = C.D; L = C.L; It = 0; for n = 1:40 % Use 40 terms m = (n*pi)^2 + 0.25*eta^2; It = It + ((n*pi)^2 / m)* exp(-(D/L^2)*m*t); end It = 2*Ip*((1 - exp(-eta))/eta)*It; end % ----------------------------------------------------
[1] Zachmanoglou, E.C. and D.L. Thoe. Введение в дифференциальные уравнения с частными производными с применением. Дувр, Нью-Йорк, 1986.