Решите 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 использование сетки 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 object. The axes object 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
%-------------------------------------------

Смотрите также

| |

Похожие темы