Этот пример показывает, как решить уравнение Эмдена, которое является граничной задачей с сингулярным членом, возникающим при моделировании сферического тела газа.
После уменьшения PDE модели с использованием симметрии уравнение становится ОДУ второго порядка, определенным на интервале ],
+2xy′+y5=0.
При 0 член (2/x) является сингулярным, но симметрия подразумевает граничное 0) = 0. При этом граничном условии 2/x) y ′ хорошо определяется как x→0. Для граничного y (1) = 3/2 BVP имеет аналитическое решение, которое можно сравнить с числовым решением, вычисленным в MATLAB ®,
x23] -1.
Решатель BVP bvp4c может решать сингулярные BVP, имеющие форму
y).
Матрица должна быть постоянной, а граничные условия при 0 должны соответствовать необходимому ) = 0. Используйте'SingularTerm' вариант bvpset для передачи S матрица для решателя.
Уравнение Эмдена можно переписать как систему уравнений первого порядка, используя y = y ′ как
,
.
Граничные условия становятся
,
.
В требуемой матричной форме система
[y2-y15].
В матричной форме ясно, что 000-2] y2-y15].
Чтобы решить эту систему уравнений в MATLAB, необходимо кодировать уравнения, граничные условия и опции перед вызовом решателя задач граничных значений bvp4c. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные именованные файлы в каталоге по пути MATLAB.
Создайте функцию для кодирования уравнений для y). Эта функция должна иметь подписьdydx = emdenode(x,y), где:
x является независимой переменной.
y является зависимой переменной.
dydx(1) дает уравнение для ′, иdydx(2) уравнение для ′.
Эти входные данные автоматически передаются функции решателем, но имена переменных определяют способ кодирования уравнений. В этом случае:
function dydx = emdenode(x,y) dydx = [y(2) -y(1)^5]; end
Термин, который содержит S передается решателю с помощью опций, поэтому этот член не включается в функцию.
Теперь запишите функцию, которая возвращает остаточное значение граничных условий в граничных точках. Эта функция должна иметь подпись res = emdenbc(ya,yb), где:
ya - значение граничного условия в начале интервала.
yb - значение граничного условия в конце интервала.
Для этой задачи одно из граничных условий - для , а другое - для . Для вычисления остаточных значений необходимо поместить граничные условия в форму = 0.
В этой форме граничными условиями являются
,
.
Затем выполняется соответствующая функция.
function res = emdenbc(ya,yb) res = [ya(2) yb(1) - sqrt(3)/2]; end
Наконец, создайте первоначальное предположение о решении. Для этой задачи используйте постоянное начальное предположение, удовлетворяющее граничным условиям, и простую сетку из пяти точек между 0 и 1. Использование многих точек сетки не требуется, поскольку решатель BVP адаптирует эти точки в процессе решения.
,
.
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);Вычислите значение аналитического решения в ].
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');

Здесь перечислены локальные вспомогательные функции, которые решатель 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 %-------------------------------------------
bvp4c | bvp5c | bvpinit | bvpset