举报
wiojoihgh
嗯,客气了。我觉得你可能不知道怎么把第一个方程得到的解作为函数代入第二第三个方程,这个我在后面会补充说一下。先说将这个直接当作方程组处理吧。先编写方程组函数,例如: function dy = myfun(t,y) dy = zeros(3,1); % a column vector dy(1) = 2*t+2*y(1);% 这里的a1,b1参数我是随意取的,下面的也是 y(2) = 3+1*(t-y(1)); dy(3) = 2*y(2)*(y(3)-t)/y(1); 将它保存为myfun.m; 然后运行[T,Y] = ode23(@myfun,[0 10],[0 0 0]); 调用函数并得到解。Y矩阵的每一行分别对应要求的Y(1)、Y(2)、Y(3); 至于要得到图形,比如y(1)-t,运行plot(T,Y(:,1)-T(:,1))即可。 =================================== 至于先求解了第一个方程后,解接下来的方程,这是另一种做法。 第二个方程其实不用解,就是个矩阵运算;第三个方程实际上相当于求解y'(t) + f(t)y(t) = g(t)类型的常微分方程,这里的f(t),g(t)由上方解已知,将它们代入第三个方程处理的方法是编写函数 function dydt = myfunn(t,y,T,f,T,g) f = interp1(T,f,t); % 对已知的f矩阵根据新的求解过程进行插值 g = interp1(T,g,t); % dydt = -f.*y + g 调用的话可以用[T Y] = ode45(@(t,y) myode(t,y,T,f,T,g),Tspan,IC),Tspan和IC是自己定义的时间跨度和初始条件。 具体需要你自己调试了。 显然第一种方法更简单;虽然第二种方法有时候运算更有效率。