0

对于 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
4

0 回答 0