如何求解耦合非线性一阶微分方程?

时间:2018-04-02 20:19:01

标签: matlab ode differential-equations

我遇到了2个方程式和已知初始条件的问题。方程是:

dx / dt =(-a1 * sin(y)+ a2 + a3 * sin(y-x))/((dy / dt)* a4 * cos(y-x))

dy / dt =(a1 * sin(x)-a5 + a6 * x + a7 * sin(y-x))/((dx / dt)* a8 * cos(y-x))

其中a1到a8是变量。

我试图在MATLAB上绘制x vs t和y vs t,但我不确定如何在数值上或分析上解决这个问题。任何帮助,将不胜感激!!

1 个答案:

答案 0 :(得分:1)

您的问题的ODE不能写为 d y / dt = f(t, y M(吨,的ý)d的ý / DT = F(T,的ý。这意味着它是一个微分代数方程,必须以数字形式求解:

  

f(t, y ,d y / dt)= 0

在matlab中,这可以使用命令ode15i完成。

因此,第一步是以正确的方式编写函数,在这种情况下,一个选项是:

function f = cp_ode(t,y,yp,a)
    f1 = (-a(1)*sin(y(2))+a(2)+a(3)*sin(y(2)-y(1)))/yp(2)*a(4)*cos(y(2)-y(1)) - yp(1);
    f2 = (a(1)*sin(y(1))-a(5)+a(6)*y(1)+a(7)*sin(y(2)-y(1)))/yp(1)*a(8)*cos(y(2)-y(1)) - yp(2);
    f = [f1 ; f2] ; 
end

然后,可以设置初始条件和积分时间跨度,以便调用ode15i

tspan = [0 10];
y0 = [1; 1] ; 
yp0 = fsolve(@(yp)cp_ode(0,y0,yp,a),<yp0_guess>);
a = ones(1,8) ;
[t,y] = ode15i(@(t,y,yp)cp_ode(t,y,yp,a), tspan, y0, yp0);

必须注意的是,初始条件 t, y yp 应满足等式 f(t,< strong> y yp )= 0 。这里使用fsolve来满足这个条件。

使用annonymus函数是使用参数作为输入来定义函数,然后执行已在主代码中定义参数的ODE求解器。