【问题标题】:In matlab trying to plot multiple trajectories in time simultaneously在matlab中试图同时绘制多个轨迹
【发布时间】:2020-01-19 20:47:33
【问题描述】:

我正在尝试绘制多个振荡器动画 wrt。时间,这样它们就会“同时”被激活,以便并排跟随它们。 我可以分别绘制每个点,但我希望每个振荡器在动画中的各个点之间连接一条线。

事实证明这很困难,我尝试使用“addpoints(h,x,y,z)”(它适用于单个轨迹),但每个连接在每个振荡器步骤后自然会脱节,我有点不知所措至于尝试什么。

循环本身看起来像这样,t 是时间,osc 是振荡器编号,sin(y) 是每个振荡器在给定时间的位置。

for t = 1:tlen
    for osc = 1:5
        plot3(t,osc,sin(y(osc,t)),'k.-')
        drawnow;
    end
end

这里的 'k' 使它变黑 '-' 应该是一条线但被忽略了和 '.'打点

“k-”同样被忽略。

【问题讨论】:

    标签: matlab animation plot 3d


    【解决方案1】:

    不确定我是否完全理解您的问题,但这会是一个解决方案吗?

    Num_Oscillators = 5;
    for t = 1:tlen
        figure(1);clf;
        for iOscillator = 1:Num_Oscillators
            plot3(1:t,iOscillator*ones(1,t),sin(y(iOscillator,1:t)),'k-.' );
            hold on;
        end
        drawnow;
    end
    

    这需要编写 y 以便它可以获取整个时间样本向量并返回振荡器位置向量(如果不能以这种方式编写,则需要缓存旧值)。

    如果这个版本让屏幕闪烁(在旧版本的 Matlab 上会这样),试试这个(也可能快一点):

    figure(1);clf;
    Num_Oscillators = 5;
    plot_handles = cell(1,Num_Oscillators);
    for iOscillator = 1:Num_Oscillators
        plot_handles{iOscillator} = plot3(inf,inf,inf,'k.-');hold on;
    end
    for t = 1:tlen
        for iOscillator = 1:Num_Oscillators
            set(plot_handles{iOscillator},'XData',1:t,'YData',iOscillator*ones(1,t),'ZData',sin(y(iOscillator,1:t)));
    
        end
        drawnow;
    end
    

    有了这个简单的模型示例数据

    tlen = 100;
    y = @(osc,t) 2*pi/tlen*osc*t;
    

    它会生成此输出(在它们运行时对其进行动画处理):

    【讨论】:

    • 感谢您花时间研究这个问题,这正是我想要的 :) 幸运的是,我有来自大学的更新版本的 matlab,第一个就足够了,但我印象深刻的是你还包括一个旧版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2017-01-18
    • 2013-05-10
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多