Matlab --- может ли pdepe решить pde первого порядка, как это? - PullRequest
1 голос
/ 30 ноября 2011

Уравнение:

переменная: z, t

хочу: S = S (z, t), A = A (z, t)

параметр: a, b, c

i - это sqrt (-1)

d - оператор частной производной

dS / dt = -i* a * z * S - i * b * A

(д / дз + с * д / дт) A = -i * S

Граничное условие:

сигма - ширина импульса

тм - центр импульса

при z = 0,

A(1, t) = (0,398942 / сигма) * exp (- ((t-tm). ^ 2) / (2 * сигма ^ 2)) (импульс Гаусса)

при z = 1, границаусловие не ясно.Ожидается, что будет около 0. Если я использую Mathematica, то нет необходимости указывать это граничное условие.На самом деле эта граница является целью решения этого pde.

Исходное условие:

при t = 0,

S = 0

A = 0 (около 0. Это должен быть край указанного выше гауссова импульса)

Я пытался решить этот набор pde с помощью pdepe.Результат показывает:

???Ошибка при использовании ==> daeic12 на 77. Кажется, что этот DAE имеет индекс больше 1.

Мой вопрос: может ли pdepe решать такие команды?

× ×××××××××××××××××××××××××××××××××××××××××××××××××××Чххххххххххххххххххххххх

Детали: измените уравнение в виде:

[1;c]. * d / dt [S;A] = d / dz [0;-A] + [-i * a * z * Si * b * A;-i * S]

Тогда мой код для уравнения: (имя параметра изменено, не долго называются a, b и c)

function [ c,f,s ] = myPdeNoDecay( z,t,u,dudz)
LoverzetacT = 6.712414322355693e-05;
betaLT = 66.713366022882500;
omegayetaksbarLT = 4.183966095613130e+02;

c = [1;LoverzetacT];
f = [0;-u(2)];
s = -1i*[betaLT.*z.*u(1)+omegayetaksbarLT.*u(2);u(1)];
end

Граничное условие:

function [ pl,ql,pr,qr ] = myPdeNoDecayBC( xl,ul,xr,ur,t )
tm = 0.5; %ns, Normalized central time of the pulse
sigma = 0.1; %ns, Normalized width of the pulse, 10^-7s

pl = [ul(2)-iniShape(t,sigma,tm);0];
ql = [0;0];
pr = [0;0];
qr = [0;0];
end

function [G] = iniShape(t,sigma,tm)
G = (0.398942/sigma)*exp(-((t-tm).^2)/(2*sigma^2));
end

Исходное условие:

function [ u0 ] = myPdeNoDecayIC( x )
u0 = [0;0];
end

Основная функция:

clear
close all
tlist = 0:0.05:1;
zlist = 0:0.05:1;

LoverzetacT = 6.712414322355693e-05;
betaLT = 66.713366022882500;
omegayetaksbarLT = 4.183966095613130e+02;

tm = 0.5; %ns, Normalized central time of the pulse
sigma = 0.1; %ns, Normalized width of the pulse, 10^-7s

m = 0;
sol = pdepe(m,@myPdeNoDecay,@myPdeNoDecayIC,@myPdeNoDecayBC,zlist,tlist);
figure('numbertitle','off','name','my PDE with no decay or two-ph detuning')
subplot(211);
surf(zlist,tlist,sol(:,:,1));
title('The solution of S');
xlabel('z');
ylabel('t');
zlabel('S(z,t)');
title('The solution of a');
xlabel('z');
ylabel('t');
zlabel('a(z,t)');

Ошибка:

???Ошибка при использовании ==> daeic12 на 77

Этот DAE имеет индекс больше 1.

1 Ответ

1 голос
/ 01 декабря 2011

Нет, pdepe не может решить уравнения, где индекс DAE больше единицы.

...