Как решить систему нелинейного Ода второго порядка с bvp4c? - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь решить систему из двух нелинейных одов второго порядка, и, поскольку это краевая задача, я полагаю, что мне нужно использовать функцию bvp4c.Система, о которой я говорю, выглядит следующим образом:

f '' (x) = F (f, f ', x);
s' '(x) = G (f, f', s, s ', x)

с условиями f (0) = pi, f (inf = 35) = s (inf = 35) = 0. Функции F и G известны, и я предположил,что 35 будет достойной заменой бесконечности.Это отделимо, и я уже решил для f, но я также не знаю, как решить для s.Код, который якобы решает для f, следующий:

options = bvpset('RelTol', 1e-5);

Xstart = 0.01;
Xend = 35;

solinit = bvpinit(linspace(Xstart, Xend, 1000), [0, 1]);

sol = bvp4c(@twoode, @twobc, solinit, options);

x = linspace(Xstart,Xend);
y = deval(sol,x);
figure(1)
plot(x,y(1,:))
figure(2)
plot(x,y(2,:))

function dydx = twoode(x,y)
dydx = [y(2); ((-1/(x^2 + 2+sin(y(1))^2))*(2*x*y(2) + sin(2*y(1))*y(2)^2 - 
2*sin(2*y(1)) - (sin(y(1)^2)*sin(2*y(1)))/x^2) )];
end

function res = twobc(ya,yb)
res = [ya(1) - pi
yb(2)];
end

Так что мой вопрос в том, как я могу использовать результаты, полученные для f, чтобы решить уравнение для s?Я попытался сделать то же самое, что и для f, но если я определяю функцию для s, которая использует y (1, :) и y (2, :), то выдается сообщение об ошибке, в котором говорится, что y не определено.

Поскольку я довольно новичок в решении дифференциальных уравнений с помощью Matlab и в целом в использовании Matlab, я, вероятно, совершаю какую-то тривиальную ошибку, но я искал ответы и не мог их найти.Я надеюсь, что кто-то с достаточным терпением может помочь мне.

Заранее благодарен за любой полезный совет.

...