exponenta event banner

Решение BVP с помощью единственного термина

Этот пример показывает, как решить уравнение Эмдена, которое является граничной задачей с сингулярным членом, возникающим при моделировании сферического тела газа.

После уменьшения PDE модели с использованием симметрии уравнение становится ОДУ второго порядка, определенным на интервале [0,1],

У +2xy′+y5=0.

При x = 0 член (2/x) является сингулярным, но симметрия подразумевает граничное условие y (0) = 0. При этом граничном условии термин (2/x) y ′ хорошо определяется как x→0. Для граничного условия y (1) = 3/2 BVP имеет аналитическое решение, которое можно сравнить с числовым решением, вычисленным в MATLAB ®,

y (x) = [1 + x23] -1.

Решатель BVP bvp4c может решать сингулярные BVP, имеющие форму

y′=Syx+f (x, y).

Матрица S должна быть постоянной, а граничные условия при x = 0 должны соответствовать необходимому условию S⋅y (0) = 0. Используйте'SingularTerm' вариант bvpset для передачи S матрица для решателя.

Уравнение Эмдена можно переписать как систему уравнений первого порядка, используя y1 = y и y2 = y ′ как

y1  = y2,

y2′=-2xy2-y15.

Граничные условия становятся

y2 (0) =0,

y1 (1) =3/2.

В требуемой матричной форме система

[y1 y2 ] = 1x [000-2] [y1y2] + [y2-y15].

В матричной форме ясно, что S = [000-2] и f (x, y) = [y2-y15].

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

Кодовое уравнение

Создайте функцию для кодирования уравнений для f (x, y). Эта функция должна иметь подписьdydx = emdenode(x,y), где:

  • x является независимой переменной.

  • y является зависимой переменной.

  • dydx(1) дает уравнение для y1 ′, иdydx(2) уравнение для y2 ′.

Эти входные данные автоматически передаются функции решателем, но имена переменных определяют способ кодирования уравнений. В этом случае:

function dydx = emdenode(x,y)
dydx = [y(2) 
       -y(1)^5];
end

Термин, который содержит S передается решателю с помощью опций, поэтому этот член не включается в функцию.

Граничные условия кода

Теперь запишите функцию, которая возвращает остаточное значение граничных условий в граничных точках. Эта функция должна иметь подпись res = emdenbc(ya,yb), где:

  • ya - значение граничного условия в начале интервала.

  • yb - значение граничного условия в конце интервала.

Для этой задачи одно из граничных условий - для y1, а другое - для y2. Для вычисления остаточных значений необходимо поместить граничные условия в форму g (x, y) = 0.

В этой форме граничными условиями являются

y2 (0) =0,

y1 (1)-3/2=0.

Затем выполняется соответствующая функция.

function res = emdenbc(ya,yb)
res = [ya(2)
       yb(1) - sqrt(3)/2];
end

Создать начальное предположение

Наконец, создайте первоначальное предположение о решении. Для этой задачи используйте постоянное начальное предположение, удовлетворяющее граничным условиям, и простую сетку из пяти точек между 0 и 1. Использование многих точек сетки не требуется, поскольку решатель BVP адаптирует эти точки в процессе решения.

y1=3/2,

y2=0.

guess = [sqrt(3)/2; 0];
xmesh = linspace(0,1,5);
solinit = bvpinit(xmesh, guess);

Уравнение решения

Создание матрицы для S и передать его в bvpset как значение 'SingularTerm' вариант. Наконец, позвоните bvp4c с функцией ОДУ, функцией граничного условия, начальным предположением и структурой опций.

S = [0 0; 0 -2];
options = bvpset('SingularTerm',S);
sol = bvp4c(@emdenode, @emdenbc, solinit, options);

Решение для построения графика

Вычислите значение аналитического решения в [0,1].

x = linspace(0,1);
truy = 1 ./ sqrt(1 + (x.^2)/3);

Постройте график аналитического решения и решения, рассчитанного по bvp4c для сравнения.

plot(x,truy,sol.x,sol.y(1,:),'ro');
title('Emden Problem -- BVP with Singular Term.')
legend('Analytical','Computed');
xlabel('x');
ylabel('solution y');

Figure contains an axes. The axes with title Emden Problem -- BVP with Singular Term. contains 2 objects of type line. These objects represent Analytical, Computed.

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

Здесь перечислены локальные вспомогательные функции, которые решатель BVP bvp4c вызывает для вычисления решения. Кроме того, эти функции можно сохранить в виде собственных файлов в каталоге по пути MATLAB.

function dydx = emdenode(x,y) % equation being solved 
dydx = [y(2) 
       -y(1)^5];
end
%-------------------------------------------
function res = emdenbc(ya,yb) % boundary conditions
res = [ya(2)
       yb(1) - sqrt(3)/2];
end
%-------------------------------------------

См. также

| | |

Связанные темы