highcant 2022-04-04 13:46 采纳率: 50%
浏览 73
已结题

如何用matlab画这样一个分段的微分方程图像呢?

如图,怎么利用matlab画出这个分段微分方程的关于x和x点(x导)的坐标系图?

img

  • 写回答

3条回答 默认 最新

  • CSDN专家-Matlab_Fans 2022-04-04 20:26
    关注

    这个问题的关键在于,如何处理碰撞时速度状态量的突变问题,两种解决思路:

    1. 一是使用ode45等系统自带的微分方程数值解法,需要设置事件event来处理碰撞问题;
    2. 二是自己编程用欧拉法等数值解法来求解这个微分方程,在程序中直接处理碰撞问题。

    注意碰撞时应该是 dx = -0.99*dx ,即碰撞后速度方向会发生变化。

    第2种方法的代码如下:

    clear
    clc
    
    x0 = [0;0];
    ts = 0.01;
    T = 0:ts:10;
    x = x0;
    
    for ii = 1:length(T)
        t = T(ii);
        dx(1,1) = x(2);
        w = 1;
        dx(2,1) = 0.1*sin(w*t) + 0.1*x(2) - 0.25*x(1)^3 + 0.5*x(1);
    
        x = x + dx*ts;   % 欧拉法解微分方程
        
        %% 碰撞处理
        
        if x(1) <= -0.6
    
            x(1) = -0.6;
            x(2) = -0.99*x(2);
            
        elseif x(1) >= 0.5
            
            x(1) = 0.5;
            x(2) = -0.99*x(2); 
            
        end
        
        X(:,ii) = x;
        
    end
    
    %% 相图
    figure
    plot(X(1,:),X(2,:))
    xlim([-0.8 0.8])
    xlabel('x')
    ylabel('dx')    
    

    相图为:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 4月4日

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊