saileee123 2024-03-31 22:50 采纳率: 100%
浏览 20
已结题

关于#matlab#求解微分方程的两个问题

1.试求出下面隐式微分方程的数值解,并绘制出解曲线和相轨线,已知

img

2.在区间[0,1]上,求解如下迟滞微分方程

img

具有历史条件: 当t0时, y1(t)=exp(t+1), y2(t)=exp(t+0.5), y3(t)=sin(t+1), y4(t)=y1(t), y5(t)=y1(t),请务必建立一个函数文件exer1h.m来计算历史,并提供句柄,作为dde23的历史输入。注意ddefun和历史函数都必须返回列向量。

  • 写回答

17条回答 默认 最新

  • 社区专家-Monster-XH 2024-04-01 09:07
    关注

    1.

    img

    y0 = [1; 1; 2; 2];
    
    time = [0 10];
    
    [t, y] = ode45(@diff_eqn, time, y0);
    
    figure(1);
    plot(t, y(:,1), 'r', t, y(:,3), 'b');
    legend('x_1(t)', 'x_2(t)');
    title('解曲线');
    
    figure(2);
    plot(y(:,1), y(:,2), 'r', y(:,3), y(:,4), 'b');
    legend('相轨线 x_1 和 x_1''', '相轨线 x_2 和 x_2''');
    title('相轨线');
    function dydt = diff_eqn(t, y)
        dydt = zeros(4,1);
        dydt(1) = y(2); 
        dydt(2) = exp(-y(3)^2) - y(2)*y(4)*sin(y(1)*y(3)) - 5*y(2)*y(4)*cos(y(1)^2) - t^2*y(1)*y(3); 
        dydt(3) = y(4); 
        dydt(4) = sin(t) - y(2)*y(4) - y(4)*y(2)*sin(y(1)^2) - cos(y(4)*y(4)); 
    end
    
    

    2.

    img

    defun函数

    
    function dydt = ddefun(t, y, Ylag)
        dydt = zeros(5,1); % 初始化输出为5x1的列向量
        dydt(1) = Ylag(5,1) + Ylag(3,1); % y'1(t)=y5(t-1)+y3(t-1)
        dydt(2) = Ylag(1,1) + Ylag(2,2); % y'2(t)=y1(t-1)+y2(t-0.5)
        dydt(3) = Ylag(3,1) + Ylag(1,2); % y'3(t)=y3(t-1)+y1(t-0.5)
        dydt(4) = Ylag(5,1) * Ylag(4,1); % y'4(t)=y5(t-1)*y4(t-1)
        dydt(5) = Ylag(1,1); % y'5(t)=y1(t-1)
    end
    

    历史函数history

    function y = history(t)
       y = zeros(5,1); % 初始化输出为5x1的列向量
        y(1) = exp(t + 1);
        y(2) = exp(t + 0.5);
        y(3) = sin(t + 1);
        y(4) = exp(t + 1); % 根据题目,y4(t) = y1(t)
        y(5) = exp(t + 1); % 根据题目,y5(t) = y1(t)
    end
    
    

    脚本

    % 设置迟滞时间
    lags = [1, 0.5];
    
    % 求解迟滞微分方程
    sol = dde23(@ddefun, lags, @history, [0, 1]);
    
    % 在特定的时间点评估解
    t = 0:0.01:1;
    y = deval(sol, t);
    
    % 绘制解的图形
    figure;
    plot(t, y);
    legend('y1(t)', 'y2(t)', 'y3(t)', 'y4(t)', 'y5(t)');
    xlabel('时间 t'); 
    ylabel('解 y(t)');
    title('迟滞微分方程的解'); 
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(16条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 修改了问题 4月1日
  • 赞助了问题酬金15元 3月31日
  • 展开全部