Решите BVP с несколькими граничными условиями

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

Для x \in [0,λ], рассмотрите уравнения

v=C-1n,

C=vC-min(x,1)η.

Известные параметры проблемы n, κ, λ>1, и η=λ2nκ2.

Термин min(x,1) в уравнении для C(x) не является гладким в x=1, таким образом, задача не может быть решена непосредственно. Вместо этого можно повредить проблему в два: один набор в интервале [0,1], и другой набор в интервале [1,λ]. Связь между этими двумя областями состоит в том, что решения должны быть непрерывными в x=1. Решение должно также удовлетворить граничным условиям

v(0)=0,

C(λ)=1.

Уравнения для каждой области

Область 1: 0x1

v=C-1n,

C=vC-xη.

Область 2: 1xλ

v=C-1n,

C=vC-1η.

Интерфейсная точка x=1 включен в обе области. На данном этапе решатель производит оба левых и правых решения, которые должны быть равными, чтобы гарантировать непрерывность решения.

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

Уравнения кода

Уравнения для v(x) и C(x) зависьте от решаемой области. Для многоточечных краевых задач производная функция должна принять третий входной параметр region, который используется, чтобы идентифицировать область, где производная оценивается. Решатель нумерует области слева направо, начиная с 1.

Создайте функцию, чтобы закодировать уравнения с подписью dydx = f(x,y,region,p), где:

  • x независимая переменная.

  • y зависимая переменная.

  • dydx(1) дает уравнение для v(x), и dydx(2) уравнение для C(x).

  • region количество области, где производная вычисляется (в этой проблеме 2D области, region 1 или 2).

  • p вектор, содержащий значения постоянных параметров [n,κ,λ,η].

Используйте оператор switch, чтобы возвратить различные уравнения в зависимости от решаемой области. Функция

function dydx = f(x,y,region,p) % equations being solved
n = p(1);
eta = p(4);

dydx = zeros(2,1);
dydx(1) = (y(2) - 1)/n;

switch region
    case 1    % x in [0 1]
        dydx(2) = (y(1)*y(2) - x)/eta;
    case 2    % x in [1 lambda]
        dydx(2) = (y(1)*y(2) - 1)/eta;
end
end

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

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

Решение двух дифференциальных уравнений первого порядка в двух областях требует четырех граничных условий. Два из этих условий прибывают из исходной проблемы:

v(0)=0,

C(λ)-1=0.

Другие два условия осуществляют непрерывность левых и правых решений в интерфейсной точке x=1:

vL(1)-vR(1)=0,

CL(1)-CR(1)=0.

Для многоточечных BVP аргументы граничных условий функционируют YL и YR станьте матрицами. В частности, kстолбец th YL(:,k) решение на левом контуре kобласть th. Точно так же YR(:,k) решение на правильном контуре kобласть th.

В этой проблеме, y(0) аппроксимирован YL(:,1)в то время как y(λ) аппроксимирован YR(:,end). Непрерывность решения в x=1 требует того YR(:,1) = YL(:,2).

Функция, которая кодирует остаточное значение этих четырех граничных условий,

function res = bc(YL,YR)
res = [YL(1,1)               % v(0) = 0
       YR(1,1) - YL(1,2)     % Continuity of v(x) at x=1
       YR(2,1) - YL(2,2)     % Continuity of C(x) at x=1
       YR(2,end) - 1];       % C(lambda) = 1
end

Сформируйте исходное предположение

Для многоточечных BVP граничные условия автоматически применяются вначале и конец интервала интегрирования. Однако необходимо задать двойные записи в xmesh для других интерфейсных точек. Простое предположение, которое удовлетворяет граничным условиям, является постоянным предположением y = [1; 1].

xc = 1;
xmesh = [0 0.25 0.5 0.75 xc xc 1.25 1.5 1.75 2];
yinit = [1; 1];
sol = bvpinit(xmesh,yinit);

Решите уравнение

Задайте значения постоянных параметров и поместите их в векторный p. Предоставьте функцию bvp5c с синтаксисом @(x,y,r) f(x,y,r,p) обеспечить вектор из параметров.

Вычислите решение для нескольких значений κ, использование каждого решения как исходное предположение для следующего. Для каждого значения κ, вычислите значение osmolarity Os=1v(λ). Для каждой итерации цикла сравните вычисленное значение с аппроксимированным аналитическим решением.

lambda = 2;
n = 5e-2;
for kappa = 2:5
   eta = lambda^2/(n*kappa^2);
   p = [n kappa lambda eta];
   sol = bvp5c(@(x,y,r) f(x,y,r,p), @bc, sol);
   K2 = lambda*sinh(kappa/lambda)/(kappa*cosh(kappa));
   approx = 1/(1 - K2);
   computed = 1/sol.y(1,end);
   fprintf('  %2i    %10.3f     %10.3f \n',kappa,computed,approx);
end
   2         1.462          1.454 
   3         1.172          1.164 
   4         1.078          1.071 
   5         1.039          1.034 

Постройте решение

Постройте компоненты решения для v(x) и C(x) и вертикальная линия в интерфейсной точке x=1. Отображенное решение для κ=5 результаты итоговой итерации цикла.

plot(sol.x,sol.y(1,:),'--o',sol.x,sol.y(2,:),'--o')
line([1 1], [0 2], 'Color', 'k')
legend('v(x)','C(x)')
title('A Three-Point BVP Solved with bvp5c')
xlabel({'x', '\lambda = 2, \kappa = 5'})
ylabel('v(x) and C(x)')

Figure contains an axes. The axes with title A Three-Point BVP Solved with bvp5c contains 3 objects of type line. These objects represent v(x), C(x).

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

Перечисленный здесь локальные функции помощника что решатель BVP bvp5c вызовы, чтобы вычислить решение. В качестве альтернативы можно сохранить эти функции как их собственные файлы в директории на пути MATLAB.

function dydx = f(x,y,region,p) % equations being solved
n = p(1);
eta = p(4);

dydx = zeros(2,1);
dydx(1) = (y(2) - 1)/n;

switch region
    case 1    % x in [0 1]
        dydx(2) = (y(1)*y(2) - x)/eta;
    case 2    % x in [1 lambda]
        dydx(2) = (y(1)*y(2) - 1)/eta;
end
end
%-------------------------------------------
function res = bc(YL,YR) % boundary conditions
res = [YL(1,1)               % v(0) = 0
       YR(1,1) - YL(1,2)     % Continuity of v(x) at x=1
       YR(2,1) - YL(2,2)     % Continuity of C(x) at x=1
       YR(2,end) - 1];       % C(lambda) = 1
end
%-------------------------------------------

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

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте