exponenta event banner

Решение BVP с неизвестным параметром

В этом примере показано, как использовать bvp4c для решения задачи граничного значения с неизвестным параметром.

Уравнение Матье определяется на интервале [0, δ] на

y + (λ-2q cos (2x)) y = 0.

Когда параметр q = 5, граничными условиями являются

y (0) = 0,

y (δ) = 0.

Однако это определяет только y (x) до постоянной кратности, поэтому для определения конкретного решения требуется третье условие.

y (0) = 1.

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

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

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

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

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

  • lambda - неизвестный параметр, представляющий собственное значение.

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

y1  = y2,

y2′= - (λ-2q cos (2x)) y1.

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

function dydx = mat4ode(x,y,lambda) % equation being solved
dydx = [y(2)
      -(lambda - 2*q*cos(2*x))*y(1)];
end

Примечание.В конце примера все функции включаются как локальные.

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

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

  • ya - значение граничного условия в начале интервала [a, b].

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

  • lambda - неизвестный параметр, представляющий собственное значение.

Эта задача имеет три граничных условия в интервале [0, δ]. Для вычисления остаточных значений необходимо поместить граничные условия в форму g (x, y) = 0. В этой форме граничными условиями являются

y (0) = 0,

y (δ) = 0,

y (0) -1 = 0.

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

function res = mat4bc(ya,yb,lambda) % boundary conditions
res = [ya(2)
       yb(2)
       ya(1)-1];
end

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

Наконец, создайте первоначальное предположение о решении. Необходимо предоставить начальное предположение для обоих компонентов решения y1 = y (x) и y2 = y ′ (x), а также неизвестный параметр λ. Можно вычислить только собственные значения и собственные функции, близкие к начальным предположениям. Чтобы увеличить вероятность того, что вычисленная собственная функция соответствует четвертому собственному значению, следует выбрать начальное предположение, которое имеет правильное качественное поведение.

Для этой задачи функция косинуса делает хорошую начальную догадку, поскольку она удовлетворяет трем граничным условиям. Закодируйте начальное предположение для y с помощью функции, которая возвращает предположение для y1 и y2.

function yinit = mat4init(x) % initial guess function
yinit = [cos(4*x)
        -4*sin(4*x)];
end

Звонить bvpinit используя сетку из 10 точек в интервале [0, δ], функцию начального приближения и предположение 15 для значения λ.

lambda = 15;
solinit = bvpinit(linspace(0,pi,10),@mat4init,lambda);

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

Звонить bvp4c с функцией ОДУ, функцией граничного условия и начальным предположением.

sol = bvp4c(@mat4ode, @mat4bc, solinit);

Значение параметра

Печать значения неизвестного параметра λ, найденного bvp4c. Это значение является четвертым собственным значением (q = 5) уравнения Матье.

fprintf('Fourth eigenvalue is approximately %7.3f.\n',...
            sol.parameters)
Fourth eigenvalue is approximately  17.097.

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

Использовать deval для оценки решения, вычисленного bvp4c в 100 точках в интервале [0, δ].

xint = linspace(0,pi);
Sxint = deval(sol,xint);

Постройте график обоих компонентов решения. На графике показана собственная функция (и её производная), связанная с четвёртым собственным значением λ 4 = 17,097.

plot(xint,Sxint)
axis([0 pi -4 4])
title('Eigenfunction of Mathieu''s Equation.') 
xlabel('x')
ylabel('y')
legend('y','y''')

Figure contains an axes. The axes with title Eigenfunction of Mathieu's Equation. contains 2 objects of type line. These objects represent y, y'.

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

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

function dydx = mat4ode(x,y,lambda) % equation being solved
q = 5;
dydx = [y(2)
      -(lambda - 2*q*cos(2*x))*y(1)];
end
%-------------------------------------------
function res = mat4bc(ya,yb,lambda) % boundary conditions
res = [ya(2)
       yb(2)
       ya(1)-1];
end
%-------------------------------------------
function yinit = mat4init(x) % initial guess function
yinit = [cos(4*x)
        -4*sin(4*x)];
end
%-------------------------------------------

См. также

| |

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