如何使用bvp4c解决二阶非线性ode系统?

时间:2019-03-18 15:18:48

标签: matlab ode

我正在尝试求解两个二阶非线性Odes的系统,由于这是一个边值问题,我想我需要使用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,所以我可能犯了一些小错误,但我一直在寻找答案,但找不到任何答案。我希望有足够的耐心的人可以帮助我。

在此先感谢您提供任何有用的建议。

0 个答案:

没有答案