Center of Mass - Matrix Representation

+- HP Forums (http://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: Center of Mass - Matrix Representation (/thread-3553.html)



Center of Mass - Matrix Representation - Eddie W. Shore - 04-04-2015 11:05 PM

The HP Prime program CENTERMTX calculates the center of mass of the matrix M, where M represents the body. The entries of M represents an array of molecules, each with assigned weights. It is possible that the center of mass is located outside of the body.

Note: If gravity affects the particles equally, then the center of mass & center of gravity are identical.

Formulas:

Xc = ∑(x * m)/∑m
Yc = ∑(y * m)/∑m


HP Prime: CENTERMTX

Code:
EXPORT CENTERMTX(m)
BEGIN
// Center of Mass: matrix
// Matrix of mass
LOCAL s,tm,rt,ct,r,c;
// in MAKEMAT I=row,J=col
s:=SIZE(m);
r:=s(1);
c:=s(2);
// Total Mass
tm:=TRN(m*MAKEMAT(1,c,1))*
MAKEMAT(1,r,1);
tm:=tm(1,1);
// Row Total
rt:=TRN(m*MAKEMAT(I,c,1))*
MAKEMAT(1,r,1);
rt:=rt(1,1);
// Column Total
ct:=TRN(TRN(m)*MAKEMAT(I,r,1))*
MAKEMAT(1,c,1);
ct:=ct(1,1);
// center
RETURN [[rt/tm,ct/tm]];
END;

Example: Locate the center of mass of the following body.

M = [[1 , 2, 1], [1, 1, 2],[1, 2, 1]]

The center of mass: [[ 2.08333333333, 2 ]]

http://edspi31415.blogspot.com/2015/04/hp-prime-center-of-mass-matrix.html


RE: Center of Mass - Matrix Representation - Thomas Ritschel - 04-08-2015 02:35 PM

The following program computes the center of mass for arbitrary arrangements of mass points in 3D cartesian space. For a system consisting of n particles the input is a n-by-4 matrix, e.g. the x, y, z coordinates in the the first three columns and the masses in the forth column.

Code:
EXPORT CG(xyzm)
BEGIN
  LOCAL s,r,c,t,x,y,z,m;
  LOCAL mt,cx,cy,cz;
  s:=SIZE(xyzm);
  r:=s(1);
  c:=s(1);
  t:=TRN(xyzm);
  x:=t(1);
  y:=t(2);
  z:=t(3);
  m:=t(4);
  mt:=ΣLIST(m);
  cx:=DOT(x,m)/mt;
  cy:=DOT(y,m)/mt;
  cz:=DOT(z,m)/mt;
  RETURN [[cx,cy,cz]];
END;

Using akmon's example:
Code:
CG([[0 0 0 1][5 0 0 1][5 5 0 1]]) = [3.333333333 1.666666667 0] = [10/3 5/3 0]