Сформируйте исходное предположение для решателя для краевой задачи
solinit = bvpinit(x,yinit)
solinit = bvpinit(sol,[anew bnew])
solinit = bvpinit(___,parameters)
использует начальную meshsolinit
= bvpinit(x
,yinit
), x
и начальное решение предполагают yinit
, чтобы сформировать исходное предположение решения для краевой задачи. Затем можно использовать исходное предположение solinit
в качестве одних из входных параметров к bvp4c
или bvp5c
, чтобы решить краевую задачу.
формирует исходное предположение для решения на интервале solinit
= bvpinit(sol
,[anew bnew])[anew bnew]
, где sol
является структурой решения, полученной из bvp4c
или bvp5c
. Новый [anew bnew]
интервала должен быть больше, чем предыдущий интервал, на котором задан sol
. Предыдущее решение sol
экстраполируется к новому интервалу.
задает вектор исходных предположений для параметров с неизвестными значениями в краевой задаче. Можно использовать этот синтаксис с любой из предыдущих комбинаций входных аргументов.solinit
= bvpinit(___,parameters
)
Создайте исходное предположение решения BVP, решите BVP с bvp4c
, и затем расширьте решение новой области.
Формирование хорошего исходного предположения решения проблемы BVP является, возможно, самой трудной частью решения проблемы. Решения BVP не обязательно уникальны, таким образом, исходное предположение может быть решающим фактором, в котором из многих решений возвращается решатель. Исходное предположение должно удовлетворить граничные условия, и промежуток поведения должен отразить ваши общие ожидания о проблеме (колеблется ли решение, простая линейная функция, и так далее...).
Рассмотрите дифференциальное уравнение
.
Уравнение подчиняется граничным условиям
.
Функция, которая кодирует уравнение как систему первого порядка,
function dydx = bvpfun(x,y) dydx = [y(2) -y(1)]; end
Точно так же функция, которая кодирует граничные условия,
function res = bcfun(ya,yb) res = [ya(1) yb(1)]; end
Вы любой может включать необходимые функции как локальные функции в конце файла (как сделано здесь), или можно сохранить их как отдельные, именованные файлы в директории на пути MATLAB.
Исходное предположение с указателем на функцию
Обоснованно можно ожидать, что решение уравнения будет колебательным, таким образом синусоидальные и косинусные функции будут хорошим исходным предположением поведения решения и его производной между фиксированными граничными точками.
function y = guess(x) y = [sin(x) cos(x)]; end
Создайте структуру решения с помощью 10 равномерно распределенных точек mesh в области и функция исходного предположения.
xmesh = linspace(0,pi,10); solinit = bvpinit(xmesh,@guess);
Решите BVP
Вызовите bvp4c
с функцией оды, граничными условиями и предположением решения. Постройте результат.
sol = bvp4c(@bvpfun, @bcfun, solinit);
plot(sol.x,sol.y,'-o')
Localfunctions
Перечисленный здесь локальные функции помощника, которые решатель BVP bvp4c
вызывает, чтобы вычислить решение. Также можно сохранить эти функции как их собственные файлы в директории на пути MATLAB.
function dydx = bvpfun(x,y) % equation being solved dydx = [y(2) -y(1)]; end %------------------------------------------- function res = bcfun(ya,yb) % boundary conditions res = [ya(1) yb(1)]; end %------------------------------------------- function y = guess(x) % guess at solution behavior y = [sin(x) cos(x)]; end %-------------------------------------------
Решите BVP на начальном интервале, и затем итеративно расширьте интервал с помощью каждого решения в качестве исходного предположения для следующего интервала.
Рассмотрите уравнение
.
Как система первого порядка, уравнение становится системой двух уравнений
,
.
Уравнение первоначально определено на интервале и подчиняется граничным условиям
,
.
Функция, которая кодирует уравнение как систему первого порядка,
function dydx = bvpfun(x,y) dydx = [y(2) y(1)]; end
Точно так же функция, которая кодирует граничные условия,
function res = bcfun(ya,yb) res = [ya(1) yb(1)-1]; end
Вы любой может включать необходимые функции как локальные функции в конце файла (как сделано здесь), или можно сохранить их как отдельные, именованные файлы в директории на пути MATLAB.
Исходное предположение
Используйте показательную функцию в качестве исходного предположения для решения. Поскольку уравнение имеет два компонента решения, запишите функцию исходного предположения формы y = guess(x)
, который возвращает вектор.
function y = guess(x) y = [exp(x) exp(x)]; end
Сетка пяти точек достаточна, чтобы получить поведение функции предположения.
xmesh = linspace(0,3,5); solinit = bvpinit(xmesh,@guess);
Решите уравнение
Решите уравнение в начальном интервале и постройте результаты для .
sol = bvp4c(@bvpfun, @bcfun, solinit);
plot(sol.x(1,:),sol.y(1,:),'-o')
Расширьте интервал
Теперь, используйте bvpinit
, чтобы расширить интервал интегрирования в цикле, решая и строя каждую новую проблему. В каждой итерации сформируйте исходное предположение с помощью предыдущего решения sol
, экстраполируемый к новому интервалу [0 k]
. В каждой новой проблеме bvp4c
осуществляет граничные условия на новых контурах [0 k]
.
hold on for k = 4:8 solinit = bvpinit(sol,[0 k]); sol = bvp4c(@bvpfun, @bcfun, solinit); plot(sol.x(1,:),sol.y(1,:),'-o') end
Этот пример показывает упрощенную версию продолжения, полезный метод, чтобы решить BVPs путем разламывания проблемы на меньшие интервалы или более простые проблемы. Для большего количества примеров этого метода см.:
Localfunctions
Перечисленный здесь локальные функции помощника, которые решатель BVP bvp4c
вызывает, чтобы вычислить решение. Также можно сохранить эти функции как их собственные файлы в директории на пути MATLAB.
function dydx = bvpfun(x,y) % equation being solved dydx = [y(2) y(1)]; end %------------------------------------------- function res = bcfun(ya,yb) % boundary conditions res = [ya(1) yb(1)-1]; end %------------------------------------------- function y = guess(x) % guess at solution behavior y = [exp(x) exp(x)]; end %-------------------------------------------
x
Начальная meshНачальная mesh, заданная как вектор. Чтобы решить проблему на интервале [a, b], задают x(1)
как a и x(end)
как b. Записи x
должны быть в увеличивающемся порядке (если a <b) или уменьшающий порядок (если a> b). Решатель адаптирует эту mesh к решению (путем добавления, удаляя и перемещая точки mesh), таким образом, предположение как x = linspace(a,b,10)
часто достаточно. Чтобы решить трудные проблемы, поместите некоторые точки mesh, где решение изменяется быстро.
Для краевых задач 2D точки записи x
должны быть уникальными. Таким образом, если a <b, записи должны удовлетворить x(1)
<x(2)
<... <x(end)
. Если a> b, записи должны удовлетворить x(1)
> x(2)
>...> x(end)
.
Для многоточечных краевых задач можно задать точки в [a, b], в котором граничные условия применяются, кроме конечных точек a и b, путем повторения их записей в x
. Например, рассмотрите вектор
x = [0 0.5 1 1 1.5 2];
0
и 2
и повторная запись 1
. В целом повторные записи представляют граничные точки между областями в [a, b]. Повторная запись 1
делит интервал [0 2]
на две области: [0 1]
и [1 2]
.Пример: solinit = bvpinit(linspace(a,b,10),yinit)
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический
Поддержка комплексного числа: Да
yinit
— Исходное предположение решенияИсходное предположение решения, заданного как вектор или функция.
Вектор – Для каждого компонента решения, bvpinit
реплицирует соответствующий элемент вектора как постоянное предположение через все точки mesh. Таким образом, yinit(i)
является постоянным предположением для i
th yinit(i,:)
компонента решения во всех точках mesh в x
.
Функция – Для данной точки mesh, функция предположения должна возвратить вектор, элементы которого являются предположениями для соответствующих компонентов решения. Функция должна иметь форму
y = guess(x)
x
является точкой mesh, и y
является вектором, длина которого совпадает с количеством компонентов в решении. Например, если yinit
является функцией, то в каждой mesh указывают вызовы bvpinit
y(:,j) = guess(x(j))
Для многоточечных краевых задач функция предположения должна иметь форму
y = guess(x, k)
y
является исходным предположением для решения в x
в области k
. Функция должна принять входной параметр k
, который обеспечивается для гибкости в записи функции предположения. Однако функция не требуется, чтобы использовать k
.
Пример: solinit = bvpinit(x,)
Пример: solinit = bvpinit(x,@guess)
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| function_handle
Поддержка комплексного числа: Да
параметры
Исходное предположение для неизвестных значений параметровИсходное предположение для неизвестных значений параметров, заданных как скаляр или вектор.
Пример: solinit = bvpinit(x, yinit, [0 1 sqrt(2)])
задает вектор предположений для трех неизвестных параметров.
Пример: Введите edit mat4bvp
, чтобы видеть пример BVP с неизвестным параметром.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический
Поддержка комплексного числа: Да
sol
— Предыдущее решениеПредыдущее решение, заданное как структура решения, возвращенная bvp4c
или bvp5c
. Если sol
содержит параметры, они копируются в solinit
.
Типы данных: struct
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.