MATLAB中使用ode45绘图时x轴无法延伸至1000的问题求助
解决MATLAB绘图x轴无法延伸到1000的问题
嘿,我明白你的困扰了!咱们先理清楚问题出在哪:你现在用ode45求解得到的N数组,其实是微分方程dN/dt=-0.5N+100的解N(t),当t增大时,N(t)会逐渐收敛到稳态值200(因为当N=200时,dN/dt=0,系统不再变化)。所以你的N数组里的数值最大也就接近200,自然用它来做x轴绘图时,没法延伸到1000。
而你真正想画的是微分方程右侧关于N的函数(也就是f(N) = -0.5N + 100),这个操作根本不需要用到ode45——直接生成覆盖0到1000的N取值范围,再计算对应的函数值就行。
修改后的代码:
% 生成从0到1000的N值序列,1000个点保证图像平滑 N_vals = linspace(0, 1000, 1000); % 计算对应的微分方程右侧函数值 f_vals = -0.5*N_vals + 100; % 绘制函数图像 plot(N_vals, f_vals) % 设置坐标轴范围 axis([0 1000 -500 500]) % 可选:添加标签让图像更清晰 xlabel('N') ylabel('dN/dt') title('Function: dN/dt = -0.5N + 100')
如果你同时想观察ode45求解的N(t)变化趋势,也可以把这部分内容补充到图里,比如用子图展示:
% 保留原有的ode45求解代码 eq = @(t,N)(-0.5*N+100); [t,N] = ode45(eq,[0 500],-5); % 新建绘图窗口,用子图同时展示两个内容 figure subplot(1,2,1) plot(t,N) xlabel('Time t') ylabel('N(t)') title('Solution of dN/dt = -0.5N + 100') subplot(1,2,2) N_vals = linspace(0, 1000, 1000); f_vals = -0.5*N_vals + 100; plot(N_vals, f_vals) axis([0 1000 -500 500]) xlabel('N') ylabel('dN/dt') title('Function: dN/dt = -0.5N + 100')
这样就能同时看到微分方程的解曲线和你想要的函数图像啦!
内容的提问来源于stack exchange,提问作者JordanSW
相关产品推荐
相关产品推荐

