Решите краевые задачи для обыкновенных дифференциальных уравнений
sol = bvp4c (odefun, bcfun, solinit)
sol = bvp4c (odefun, bcfun, solinit, опции)
solinit = bvpinit (x, yinit, параметрические усилители)
| Указатель на функцию, который оценивает дифференциальные уравнения f (x, y). Это может иметь форму dydx = odefun(x,y) dydx = odefun(x,y,parameters) Для скалярного | |
| Указатель на функцию, который вычисляет невязку в граничных условиях. Для условий граничного значения двух-точки формы до н.э (y (a), y (b)), res = bcfun(ya,yb) res = bcfun(ya,yb,parameters) где См. Многоточечные Краевые задачи для описания | |
| Структура, содержащая исходное предположение для решения. Вы создаете | |
| Заказанные узлы начальной mesh. Граничные условия наложены в = | |
| Исходное предположение для решения, таким образом, что | |
| Дополнительный. Вектор, который обеспечивает исходное предположение для неизвестных параметров. | |
Структура может иметь любое имя, но поля нужно назвать | ||
| Дополнительный аргумент интегрирования. Структура вы создаете использование функции |
sol = bvp4c(odefun,bcfun,solinit)
интегрирует систему обыкновенных дифференциальных уравнений формы
y ′ = f (x, y)
на интервале [a, b] подвергают, чтобы двух-указать условия граничного значения до н.э (y (a), y (b)) = 0.
odefun
и bcfun
являются указателями на функцию. См. Создание указателя на функцию для получения дополнительной информации.
Параметризация Функций объясняет, как предоставить дополнительные параметры функциональному odefun
, а также функцию граничного условия bcfun
, при необходимости.
bvp4c
может также решить многоточечные краевые задачи. См. Многоточечные Краевые задачи. Можно использовать функциональный bvpinit
, чтобы задать граничные точки, которые сохранены во входном параметре solinit
. Смотрите страницу с описанием для bvpinit
для получения дополнительной информации.
Решатель bvp4c
может также найти неизвестные параметры p для проблем формы
y ′ = f (x, y, p)
0 = до н.э (y (a), y (b), p)
где p соответствует parameters
. Вы предоставляете bvp4c
исходное предположение для любых неизвестных параметров в solinit.parameters
параметры. Решатель bvp4c
возвращает окончательные значения этих неизвестных параметров в sol.parameters
параметры.
bvp4c
производит решение, которое непрерывно на [a,b]
и имеет непрерывную первую производную там. Используйте функциональный deval
и вывод sol
bvp4c
, чтобы оценить решение в отдельных моментах xint
в интервале [a,b]
.
sxint = deval(sol,xint)
Структура sol
, возвращенный bvp4c
, имеет следующие поля:
| Mesh выбрана |
| Приближение к y (x) в точках mesh |
| Приближение к y ′ (x) в точках mesh |
| Значения |
|
|
| Вычислительная статистика стоимости (также отображенный, когда опция stats установлена с bvpset ). |
Структура sol
может иметь любое имя и bvp4c
, создает поля x
, y
, yp
, parameters
и solver
.
sol = bvp4c(odefun,bcfun,solinit,options)
решает как выше со свойствами интегрирования по умолчанию, замененными значениями в options
, структура, созданная с функцией bvpset
. Смотрите bvpset
для деталей.
solinit = bvpinit(x, yinit, params)
формирует исходное предположение solinit
с векторным params
предположений для неизвестных параметров.
bvp4c
решает класс сингулярных краевых задач, включая проблемы с неизвестными параметрами p
, формы
y ′ = S · y/x + F (x, y, p)
0 = до н.э (y (0), y (b), p)
Интервал требуется, чтобы быть [0, b] с b> 0. Часто такие проблемы возникают при вычислении сглаженного решения ОДУ, которые следуют из дифференциальных уравнений с частными производными (УЧП) из-за цилиндрической или сферической симметрии. Для сингулярных проблем вы задаете (постоянный) матричный S
как значение опции 'SingularTerm'
bvpset
, и odefun
оценивает только f (x, y, p). Граничные условия должны быть сопоставимы с необходимым условием S · y (0) = 0 и исходное предположение должен удовлетворить это условие.
bvp4c
может решить многоточечные краевые задачи, где = a0 < a1 < a2 < ... < = b являются граничными точками в интервале [a, b]. Точки a1, a2..., an−1 представляют интерфейсы, которые делятся [a, b] в области. bvp4c
перечисляет области слева направо (от до b) с индексами, запускающимися от 1. В области k, [ak−1, ak], bvp4c
оценивает производную как
yp = odefun(x,y,k)
В функции граничных условий
bcfun(yleft,yright)
yleft(:,k)
является решением на левом контуре [ak−1, ak]. Точно так же yright(:,k)
является решением на правильном контуре области k. В частности,
yleft(:,1) = y(a)
и
yright(:,end) = y(b)
Когда вы создаете исходное предположение с
solinit = bvpinit(xinit,yinit),
используйте двойные записи в xinit
для каждой интерфейсной точки. Смотрите страницу с описанием для bvpinit
для получения дополнительной информации.
Если yinit
является функцией, bvpinit
вызывает y = yinit(x,k)
, чтобы получить исходное предположение для решения в x
в области k
. В структуре решения sol
, возвращенный bpv4c
, sol.x
имеет двойные записи для каждой интерфейсной точки. Соответствующие столбцы sol.y
содержат левое и правое решение в интерфейсе, соответственно.
Чтобы видеть пример, который решает краевую задачу с тремя точками, введите threebvp
в командной строке MATLAB®.
Функция bvp5c
используется точно как bvp4c
, за исключением значения ошибочных допусков между этими двумя решателями. Если S (x) аппроксимирует решение y (x), bvp4c
управляет невязкой |S ′ (x) – f (x, S (x)) |. Это управляет косвенно истинной погрешностью |y (x) – S (x) |. bvp5c
управляет истинной погрешностью непосредственно.
Краевые задачи могут иметь несколько решений. Одна цель исходного предположения состоит в том, чтобы указать, какое решение, среди нескольких, которые вы хотите.
Дифференциальное уравнение второго порядка
имеет точно два решения, которые удовлетворяют граничные условия
Перед использованием bvp4c
, чтобы решить проблему, необходимо переписать дифференциальное уравнение как систему двух ОДУ первого порядка,
где и. Эта система имеет необходимую форму
Функция, f, и граничные условия, до н.э, закодирована в MATLAB как функции twoode
и twobc
.
function dydx = twoode(x,y)
dydx = [ y(2); -abs(y(1)) ];
function res = twobc(ya,yb)
res = [ ya(1); yb(1) + 2 ];
Сформируйте структуру предположения, состоящую из начальной сетки пяти равномерно распределенных точек в [0,4] и предположение постоянных значений
solinit = bvpinit(linspace(0,4,5),[1 0]);
Решите проблему с помощью bvp4c
.
sol = bvp4c(@twoode,@twobc,solinit);
Оцените числовое решение в 100 равномерно распределенных точках и постройте график y (x).
x = linspace(0,4); y = deval(sol,x); plot(x,y(1,:))
Чтобы получить другое решение этой проблемы, используйте исходное предположение
solinit = bvpinit(linspace(0,4,5),[-1 0]); sol = bvp4c(@twoode,@twobc,solinit); x = linspace(0,4); y = deval(sol,x); plot(x,y(1,:))
Эта краевая задача включает неизвестный параметр. Задача состоит в том, чтобы вычислить четвертое (q = 5) собственное значение λ уравнения Мэтью
y” + (λ – 2q cos2x) y = 0.
Поскольку неизвестный параметр λ присутствует, это дифференциальное уравнение второго порядка подчиняется трем граничным условиям:
y ′ (0) = 0
y ′ (π) = 0
y (0) = 1
Удобно использовать локальные функции, чтобы поместить все функции, требуемые bvp4c
в единственном файле.
function mat4bvp lambda = 15; solinit = bvpinit(linspace(0,pi,10),@mat4init,lambda); sol = bvp4c(@mat4ode,@mat4bc,solinit); fprintf('The fourth eigenvalue is approximately %7.3f.\n',... sol.parameters) xint = linspace(0,pi); Sxint = deval(sol,xint); plot(xint,Sxint(1,:)) axis([0 pi -1 1.1]) title('Eigenfunction of Mathieu''s equation.') xlabel('x') ylabel('solution y') % ------------------------------------------------------------ function dydx = mat4ode(x,y,lambda) q = 5; dydx = [ y(2) -(lambda - 2*q*cos(2*x))*y(1) ]; % ------------------------------------------------------------ function res = mat4bc(ya,yb,lambda) res = [ ya(2) yb(2) ya(1)-1 ]; % ------------------------------------------------------------ function yinit = mat4init(x) yinit = [ cos(4*x) -4*sin(4*x) ];
Дифференциальное уравнение (преобразованный в систему первого порядка) и граничные условия закодировано как локальные функции mat4ode
и mat4bc
, соответственно. Поскольку неизвестные параметры присутствуют, эти функции должны принять три входных параметра, даже при том, что некоторые аргументы не используются.
Структура предположения solinit
формируется с bvpinit
. Исходное предположение для решения предоставляется в форме функционального mat4init
. Мы выбрали y =, потому что 4x, потому что он удовлетворяет граничные условия и имеет правильное качественное поведение (правильное количество изменений знака). В вызове bvpinit
третий аргумент (lambda = 15
) обеспечивает исходное предположение для неизвестного параметра λ.
После того, как проблема решена с bvp4c
, поле sol.parameters
возвращает значение λ = 17.097, и график показывает собственную функцию, сопоставленную с этим собственным значением.
bvp4c
является кодом конечной разности, который реализует трехэтапную формулу Lobatto IIIa. Это - формула словосочетания, и многочлен словосочетания предоставляет решение C1-continuous, которое является четвертым порядком, точным однородно в [a,b]
. Поймайте в сети выбор, и контроль ошибок основаны на невязке непрерывного решения.
[1] Шемпин, L.F., M.W. Reichelt, и Дж. Кирженка, “Решая Краевые задачи для Обыкновенных дифференциальных уравнений в MATLAB с bvp4c”