exponenta event banner

Проверка согласованности BVP с помощью продолжения

В этом примере показано, как использовать продолжение для постепенного расширения решения BVP до больших интервалов.

Краевые задачи Фалькнера-Скана [1] возникают из решений сходства вязкого, несжимаемого, ламинарного потока по плоской пластине. Пример уравнения:

f + f f + β (1-f ′ 2) = 0.

Задача ставится на бесконечном интервале [0,∞] при β = 0,5 при соблюдении граничных условий

f (0) = 0,

f (0) = 0,

f () = 1.

BVP не может быть решен на бесконечном интервале, и нецелесообразно решать BVP в очень большом конечном интервале. Вместо этого в этом примере решается последовательность проблем, возникающих на меньшем интервале [0, a], чтобы убедиться, что решение имеет согласованное поведение, как a→∞. Эта практика разбивания задачи на более простые задачи, с решением каждой задачи, подаваемой обратно в качестве первоначального предположения для следующей задачи, называется продолжением.

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

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

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

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

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

Можно переписать уравнение третьего порядка как систему уравнений первого порядка, используя замены f1 = f, f2 = f ′ и f3 = f ′ ′. Уравнения становятся

f1  = f2,

f2  = f3,

f3′=-f1f3-β (1-f22).

Соответствующая функция:

function dfdeta = fsode(x,f)
b = 0.5;
dfdeta = [ f(2)
           f(3)
          -f(1)*f(3) - b*(1 - f(2)^2) ];
end

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

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

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

  • f0 - значение граничного условия в начале интервала.

  • finf - значение граничного условия в конце интервала.

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

f (0) = 0,

f (0) = 0,

f () -1 = 0.

Соответствующая функция:

function res = fsbc(f0,finf)
res = [f0(1)
       f0(2)
       finf(2) - 1];
end

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

Наконец, необходимо указать начальное предположение для решения. Неочищенная сетка из пяти точек и постоянное предположение, которое удовлетворяет граничным условиям, достаточно хороши, чтобы получить сходимость на интервале [0,3]. Переменная infinity обозначает правый предел интервала интегрирования. В качестве значения infinity увеличивается при последующих итерациях с 3 до максимального значения 6, решение из каждой предыдущей итерации действует как начальное предположение для следующей итерации.

infinity = 3;
maxinfinity = 6;
solinit = bvpinit(linspace(0,infinity,5),[0 0 1]);

Решения для уравнений и графиков

Решите проблему в начальном интервале [0, 3]. Постройте график решения и сравните значение f (0) с аналитическим значением [1].

sol = bvp4c(@fsode,@fsbc,solinit);
x = sol.x;
f = sol.y;
plot(x,f(2,:),x(end),f(2,end),'o');
axis([0 maxinfinity 0 1.4]);
title('Falkner-Skan Equation, Positive Wall Shear, \beta = 0.5.')
xlabel('x')
ylabel('df/dx')
hold on

Figure contains an axes. The axes with title Falkner-Skan Equation, Positive Wall Shear, \beta = 0.5. contains 2 objects of type line.

fprintf('Cebeci & Keller report that f''''(0) = 0.92768.\n')
Cebeci & Keller report that f''(0) = 0.92768.
fprintf('Value computed using infinity = %g is %7.5f.\n', ...
         infinity,f(3,1))
Value computed using infinity = 3 is 0.92915.

Теперь решите проблему на постепенно увеличивающихся интервалах, увеличив значение infinity для каждой итерации. bvpinit функция экстраполирует каждое решение на новый интервал, чтобы действовать как начальное предположение для следующего значения infinity. Каждая итерация печатает вычисленное значение f (0) и накладывает график решения на предыдущие решения. Когдаinfinity = 6непротиворечивое поведение решения становится очевидным, и значение f (0) очень близко к прогнозируемому значению.

for Bnew = infinity+1:maxinfinity
  solinit = bvpinit(sol,[0 Bnew]); % Extend solution to new interval
  sol = bvp4c(@fsode,@fsbc,solinit);
  x = sol.x;
  f = sol.y;
  
  fprintf('Value computed using infinity = %g is %7.5f.\n', ...
           Bnew,f(3,1))
  plot(x,f(2,:),x(end),f(2,end),'o');
  drawnow
end
Value computed using infinity = 4 is 0.92774.
Value computed using infinity = 5 is 0.92770.
Value computed using infinity = 6 is 0.92770.
hold off

Figure contains an axes. The axes with title Falkner-Skan Equation, Positive Wall Shear, \beta = 0.5. contains 8 objects of type line.

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

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

function dfdeta = fsode(x,f) % equation being solved
dfdeta = [ f(2)
           f(3)
          -f(1)*f(3) - 0.5*(1 - f(2)^2) ];
end 
%-------------------------------------------
function res = fsbc(f0,finf) % boundary conditions
res = [f0(1)
       f0(2)
       finf(2) - 1];
end
%-------------------------------------------

Ссылки

[1] Cebeci, T. и Х. Б. Келлер. «Методы съемки и параллельной съемки для решения уравнения граничного слоя Фалькнера-Скана». J. Comp. Phys., том 7, 1971, стр. 289-300.

См. также

| |

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