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