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

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

Уравнение Матье задано на интервале [0,π] около

y+(λ-2qcos(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=-(λ-2qcos(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 использование mesh из 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
%-------------------------------------------

См. также

| |

Похожие темы