本帖最后由 牛小贱 于 2014-2-27 11:28 编辑
正确的程序应该是这样的:
调用程序如下( m文件):- function dy = fun1(t,y,flag,u)
- u=[0.5,2.0];
- for j=1:2
- if y(1)>=1
- a=0.1*cos(u(j)*t)-y(1)+1;
- elseif y(1)<1&y(1)>-1
- a=0.1*cos(u(j)*t);
- elseif y(1)<=-1
- a=0.1*cos(u(j)*t)-y(1)-1;
- end
- end
- dy=zeros(2,1);
- dy=[y(2);a];
复制代码
主程序:- [t,y] = ode23(@fun1,[0 5] ,[2 0]);
- figure
- plot(y(:,1),y(:,2));
复制代码另外,补充一点:ode23和ode45在 MATLAB中的用法 ode23:使用二阶龙格-库塔法求微分方程,调用格式为:
[t,y]=ode23(‘fname’,tspan,y0)
ode45:使用四阶龙格-库塔法求微分方程,调用格式为:
[t,y]=ode45(‘fname’,tspan,y0) 其中fname为由M函数定义的线性或者非线性微分方程的句柄函数名。tspan形式为[t0,tf],表示求解区间。y0是初始状态列向量。t和y分别给出时间向量和相应的状态向量。 希望对你有所帮助!!!
|