В этом примере показано, как использовать bvp4c для решения задачи граничного значения с неизвестным параметром.
Уравнение Матье определяется на интервале ] на
)) y = 0.
Когда параметр 5, граничными условиями являются
= 0,
= 0.
Однако это определяет только ) до постоянной кратности, поэтому для определения конкретного решения требуется третье условие.
= 1.
Чтобы решить эту систему уравнений в MATLAB, необходимо кодировать уравнения, граничные условия и начальное предположение, прежде чем вызывать решатель задач граничных значений bvp4c. Требуемые функции можно либо включить в качестве локальных функций в конце файла (как здесь сделано), либо сохранить их как отдельные именованные файлы в каталоге по пути MATLAB.
Создайте функцию для кодирования уравнений. Эта функция должна иметь подпись dydx = mat4ode(x,y,lambda), где:
x является независимой переменной.
y является зависимой переменной.
lambda - неизвестный параметр, представляющий собственное значение.
Можно записать уравнение Матье как систему первого порядка, используя замены y = y ′,
,
) 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 - значение граничного условия в начале интервала ].
yb - значение граничного условия в конце интервала ].
lambda - неизвестный параметр, представляющий собственное значение.
Эта задача имеет три граничных условия в интервале ]. Для вычисления остаточных значений необходимо поместить граничные условия в форму ) = 0. В этой форме граничными условиями являются
= 0,
= 0,
= 0.
Затем выполняется соответствующая функция.
function res = mat4bc(ya,yb,lambda) % boundary conditions res = [ya(2) yb(2) ya(1)-1]; end
Наконец, создайте первоначальное предположение о решении. Необходимо предоставить начальное предположение для обоих компонентов решения (x) y ′ (x), а также неизвестный параметр λ. Можно вычислить только собственные значения и собственные функции, близкие к начальным предположениям. Чтобы увеличить вероятность того, что вычисленная собственная функция соответствует четвертому собственному значению, следует выбрать начальное предположение, которое имеет правильное качественное поведение.
Для этой задачи функция косинуса делает хорошую начальную догадку, поскольку она удовлетворяет трем граничным условиям. Закодируйте начальное предположение для с помощью функции, которая возвращает предположение для и .
function yinit = mat4init(x) % initial guess function yinit = [cos(4*x) -4*sin(4*x)]; end
Звонить bvpinit используя сетку из 10 точек в интервале ], функцию начального приближения и предположение 15 для значения λ.
lambda = 15; solinit = bvpinit(linspace(0,pi,10),@mat4init,lambda);
Звонить bvp4c с функцией ОДУ, функцией граничного условия и начальным предположением.
sol = bvp4c(@mat4ode, @mat4bc, solinit);
Печать значения неизвестного параметра , найденного bvp4c. Это значение является четвертым собственным значением (5) уравнения Матье.
fprintf('Fourth eigenvalue is approximately %7.3f.\n',... sol.parameters)
Fourth eigenvalue is approximately 17.097.
Использовать deval для оценки решения, вычисленного bvp4c в 100 точках в интервале ].
xint = linspace(0,pi); Sxint = deval(sol,xint);
Постройте график обоих компонентов решения. На графике показана собственная функция (и её производная), связанная с четвёртым собственным значением 17,097.
plot(xint,Sxint) axis([0 pi -4 4]) title('Eigenfunction of Mathieu''s Equation.') xlabel('x') ylabel('y') legend('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 %-------------------------------------------