bvpinit

Сформируйте исходное предположение для решателя для краевой задачи

Описание

пример

solinit = bvpinit(x,yinit) использует начальную mesh 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 не обязательно уникальны, таким образом, исходное предположение может быть решающим фактором, в котором из многих решений возвращается решатель. Исходное предположение должно удовлетворить граничным условиям, и промежуток поведения должен отразить ваши общие ожидания о проблеме (колеблется ли решение, простая линейная функция, и так далее...).

Рассмотрите дифференциальное уравнение

y=-y.

Уравнение подчиняется граничным условиям

y(0)=y(π)=0.

Функция, которая кодирует уравнение как систему первого порядка,

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 в области [0,π] и функция исходного предположения.

xmesh = linspace(0,pi,10);
solinit = bvpinit(xmesh,@guess);

Решите BVP

Вызовите bvp4c с функцией оды, граничными условиями и предположением решения. Постройте результат.

sol = bvp4c(@bvpfun, @bcfun, solinit);
plot(sol.x,sol.y,'-o')

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

Перечисленный здесь локальные функции помощника что решатель 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 на начальном интервале, и затем итеративно расширьте интервал с помощью каждого решения в качестве исходного предположения для следующего интервала.

Рассмотрите уравнение

y=y.

Как система первого порядка, уравнение становится системой двух уравнений

y1=y2,

y2=y1.

Уравнение первоначально определено на интервале [0,3] и подчиняется граничным условиям

y(0)=0,

y(3)=1.

Функция, которая кодирует уравнение как систему первого порядка,

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);

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

Решите уравнение в начальном интервале [0,3] и постройте результаты для y1.

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 путем разламывания проблемы на меньшие интервалы или более простые проблемы. Для большего количества примеров этого метода см.:

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

Перечисленный здесь локальные функции помощника что решатель 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
%-------------------------------------------

Входные параметры

свернуть все

Начальная 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];
    Для этой mesh граничные условия применяются в трех точках: конечные точки 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 | logical
Поддержка комплексного числа: Да

Исходное предположение решения в виде вектора или функции.

  • Вектор – Для каждого компонента решения, 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 | logical
Поддержка комплексного числа: Да

Предыдущее решение в виде структуры решения, возвращенной bvp4c или bvp5c. Если sol содержит параметры, они копируются в solinit.

Типы данных: struct

Выходные аргументы

свернуть все

Исходное предположение решения, возвращенного как структура. Используйте эту структуру в качестве третьего входа к bvp4c или bvp5c решить краевую задачу.

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

| | | | |

Представлено до R2006a