MATLAB求解分段函数ODE后绘制phi(t)周期跳转折线图方法咨询
解决方法
问题核心是ode45求解得到的phi是无界累加的,仅设置ylim仅裁剪显示范围,没有做值的周期折叠,也没有处理跳转处的多余连线,按以下步骤修改即可:
- 对求解得到的phi序列做周期映射,将所有值折叠到
[-π, π)区间 - 在phi从π跳转到-π的位置插入
NaN断开绘图连线,避免出现跳转处的多余斜线
修改后的完整代码如下:
gamma = 1.01; [t,phi] = ode45(@(t,x)gamma-F(x,pi/6, 0.5), [0,100], -pi); % 将phi值折叠到[-pi, pi)区间 phi_wrapped = mod(phi + pi, 2*pi) - pi; % 识别跳变位置,插入NaN断开连线 jump_pos = find(abs(diff(phi_wrapped)) > pi); % 倒序插入避免索引错乱 for k = length(jump_pos):-1:1 idx = jump_pos(k); t = [t(1:idx); NaN; t(idx+1:end)]; phi_wrapped = [phi_wrapped(1:idx); NaN; phi_wrapped(idx+1:end)]; end figure(); plot(t, phi_wrapped); ylim([-pi, pi]); yticks(-pi:pi:pi); yticklabels((-1:1)+ "\pi"); grid on; grid minor
如果不需要严格消除跳转处的连线,仅保留周期折叠效果,可以省略插入NaN的步骤,直接绘制phi_wrapped即可。
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

