w1470852 2023-10-31 16:57 采纳率: 62.5%
浏览 25
已结题

matlab错误使用 vertcat 要串联的数组的维度不一致

我在matlab中错误使用 vertcat 要串联的数组的维度不一致.主程序和函数程序如下图,本程序要实现功能是解一个三元二阶微分方程,图一主程序图二三是函数,恳请帮忙解答

img


img


img

  • 写回答

1条回答 默认 最新

  • 社区专家-Monster-XH 2023-10-31 16:58
    关注

    主程序:

    clear;
    clc;
    close all;
    
    aa = 0:0.01:2;
    [t, y] = ode23(@MEqtion, aa, [0, 0, 0, 0, 0, 0]);
    
    subplot(3, 1, 1);
    plot(t, y(:, 1));
    title('theta1 vs t');
    grid minor;
    
    subplot(3, 1, 2);
    plot(t, y(:, 2));
    title('theta2 vs t');
    grid minor;
    
    subplot(3, 1, 3);
    plot(t, y(:, 3));
    title('theta3 vs t');
    grid minor;
    
     
    

    函数:

    ffunction dy = MEqtion(t,y)
        % global parameters (if needed)
    
        dy = zeros(6,1);
    
        theta1 = y(1);
        dtheta1 = y(2);
        theta2 = y(3);
        dtheta2 = y(4);
        theta3 = y(5);
        dtheta3 = y(6);
    
        % Assuming parameters are given here
        r2 = 0.05644;
        r3 = 0.17355;
        I1 = 0.012431535;
        I2 = 0.015071; 
        I3 = 1.228469;
        km = 6.8e8;
        cm = 46.996;
        i1 = 4;
        b = 2.5e-4;
    
    
    % 其他未定义的变量我这里为了使函数可以运行,先假设为1
    T0 = 1;
    Tm = 1;
    TL = 1;
    
    
        % Calculation
        xx = r2 * theta2 - r3 * theta3;
        dxx = dtheta2 - dtheta3;
    
        if xx - b > 0
            fx = xx - b;
        elseif xx + b < 0
            fx = xx+b;
        else
            fx = 0;
        end
    
        F23 = km * fx + cm * dxx;
        T21 = T0 * sin(theta1 - i1 * theta2);  % You need to define T0 
    
        dy1 = (Tm - T21/i1) / I1;  % You need to define Tm
        dy2 = (T21 - r2 * F23) / I2;
        dy3 = (-TL + r3 * F23) / I3; % You need to define TL 
    
        dy = [dtheta1; dy1; dtheta2; dy2; dtheta3; dy3];
    end
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月31日