MATLAB 仅使用 if/else 语句来比较数组

问题描述

对于 matlab 作业,我正在考虑三辆手推车之间的弹性碰撞,我知道只有 4 次总碰撞(基于总动量和能量的对话),第 2 次和第 3 次手推车之间的第一次碰撞.对于每次碰撞,我只能使用 if/else 语句来比较这些速度,而不能使用任何函数或循环。

我有一个大致的理解,即如果 2 号车的速度大于 3 号车的速度,那么就会发生另一次碰撞 [本质上,如果 (v1>v2) | (v2>v3)]。我无法理解布尔运算以及如何在每次碰撞后建立的数组内对这些更新的速度进行比较。目前,实现的 if/else 语句正在查找相应数组的值并将其与前一个数组的值进行比较以寻找最大值,我知道这是不正确的。此外,简单的大于比较在表示 4 次碰撞时不成立。任何和所有帮助表示赞赏。谢谢。

% ----- Given information -----

m = [240 120 360];              % array of mass of carts,respectively,in g
v0 = [30 15 -45];               % initial veLocities of carts,in cm/s

m12 = m(1)+m(2);                % mass of cart 1 and 2,in g
m23 = m(2)+m(3);                % mass of cart 2 and 3,in g 

% ----- Calculations -----

p0 = sum(m .* v0);              % total initial momentum (p),in Bole
ke0 = sum(0.5 * m .* v0.^2);    % total initial kinetic energy (KE),in Erg

% ----- Collision A,between carts 2 and 3 -----
% initialize veLocity for each cart following 1st collision

vA = [0 0 0];
vA(1) = v0(1);                  % v of cart 1 remains the same,no collision yet
vA(2) = (2*m(3)*v0(3) + (m(2)-m(3))*v0(2)) / m23; % v of cart 2,in cm/s
vA(3) = (2*m(2)*v0(2) + (m(3)-m(2))*v0(3)) / m23  % v of cart 3,in cm/s

pAcheck = p0 - sum(m .* vA)                % should be 0
KEcheckA = ke0 - sum(0.5 * m .* vA.^2)     % should be 0


if v0(v0>vA)

    disp("There is another collision")

else

    disp("There are no more collisions")

end

% ----- Collision B,between carts 1 and 2 -----
% initialize veLocity for each cart following 2nd collision

vB = [0 0 0];
vB(1) = (2*m(2)*vA(2) + (m(1)-m(2))*vA(1)) / m12; % speed of cart 1,still using initial v,in cm/s
vB(2) = (2*m(1)*vA(1) + (m(2)-m(1))*vA(2)) / m12; % v of cart 2,in cm/s
vB(3) = vA(3)                                     % v of cart 3,in cm/s 

pBcheck = p0 - sum(m .* vB)                       % should be 0
KEcheckB = ke0 - sum(0.5 * m .* vB.^2)            % should be 0

if vB(vB>vA | v0>vA)
    
    disp("There is another collision")
    
else
    
    disp("There are no more collisions")
    
end

% ----- Collision C,between carts 2 and 3 -----
% initialize veLocity for each cart following 3rd collision

vC = [0 0 0];
vC(1) = vB(1);                                    % v of cart 1,in cm/s
vC(2) = (2*m(3)*vB(3) + (m(2)-m(3))*vB(2)) / m23; % v of cart 2,in cm/s
vC(3) = (2*m(2)*vB(2) + (m(3)-m(2))*vB(3)) / m23  % v of cart 3,in cm/s

pCcheck = p0 - sum(m .* vC)                       % should be 0
KEcheckC = ke0 - sum(0.5 * m .* vC.^2)            % should be 0 

if vC(vC>vB | vB>vA)
    
    disp("There is another collision")
    
else
    
    disp("There are no more collisions")
    
end

% ----- Collision D,between carts 1 and 2 -----
% initialize veLocity for each cart following 4th collision

vD = [0 0 0];
vD(1) = (2*m(2)*vC(2) + (m(1)-m(2))*vC(1)) / m12; % v of cart 1,in cm/s
vD(2) = (2*m(1)*vC(1) + (m(2)-m(1))*vC(2)) / m12; % v of cart 2,in cm/s
vD(3) = vC(3)                                     % v of cart 3,in cm/s

pDcheck = p0 - sum(m .* vD)                       % should be 0
KEcheckD = ke0 - sum(0.5 * m .* vD.^2)            % should be 0


if vD(vD>vC | vC>vB)
    
    disp("There is another collision")
    
else
    
    disp("There are no more collisions")
    
end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)