Saturday, July 12, 2025

RPN: HP 32S/DM32: Simple Harmonic Motion

RPN: HP 32S/DM32: Simple Harmonic Motion


Introduction


The simple harmonic motion (SHM) of a spring can be described by Hooke’s Law:


F = -K * x(t)


x(t) = position of the spring

F = force of the spring


Note that: F = mass * acceleration = M * x’’(t)

Then:


M * x’’(t) = - K * x(t)

M * x’’(t) + K * x(t) = 0

x’’(t) + (K / M) * x(t) = 0


Without going into much details, two general solutions can have the form:


Case I:

x(t) = A * sin(W * t + B) with W = √(K / M) (A, B are constants)


and


Case II:

x(t) = A * cos(W*T + D) with W = √(K / M) (A, D are constants)


Believe it or not, both solutions work.


Case I:

x(t) = A * sin(W * t + B)

x’(t) = A * W * cos(W * t + B)

x’’(t) = -A * W^2 * sin(W * t + B)


Observe:

x’’(t) = -A * W^2 * sin(W * t + B)

x’’(t) = -W^2 * (A * sin(W * t + B))

x’’(t) = -W^2 * x(t)


W = √(K / M), W^2 = K / M


x’’(t) = -(K / M) * x(t)

M * x’’(t) = -K * x(t)

We are back to Hooke’s Law.


Case II:

x(t) = A * cos(W * t + D)

x’(t) = -A * W * sin(W * t + D)

x’’(t) = -A * W^2 * cos(W * t + D)


Then:

x’’(t) = -W^2 * (A * cos(W * t + D))

x’’(t) = -W^2 * x(t)

x’’(t) = -(K / M) * x(t)

M * x’’(t) = -K * x(t)

We once again arrive at Hooke’s Law. Another valid solution.


These two solutions are chosen for simplicity. A general solution would take the form of:

x(t) = A2 * cos(W * t + D) + A2 * sin(W * t + B)



Determining the Constants


Let:

x0 = initial position, at t = 0

v0 = initial velocity, at t = 0


Let’s use the simplified solutions.


Case I: Sine Approach


x(t) = A * sin(W * t + B)

x’(t) = A * W * cos(W * t + B)


x0 = A * sin(B)

v0 = A * W * cos(B)


x0 = A * sin(B)

v0 / W = A * cos(B)


Square each equation and add:

x0^2 + (v0 / W)^2 = A^2 * ((sin B)^2 + (cos B)^2)

x0^2 + (v0 / W)^2 = A^2 * 1

( x0^2 + (v0 / W)^2 ) = A

A = √( x0^2 + (v0 / W)^2 )


Divide the top equation by the bottom equation:

x0 / (v0 / W) = tan(B) (assume A ≠ 0)

B = arctan( x0 / (v0 / W) )

atan2( x0, (v0 / W)) = arg( (v0 / W) + x0*i ) where i = √-1


Case II: Cosine Approach


x(t) = A * cos(W * t + D)

x’(t) = -A * W * sin(W * t + D)


x0 = A * cos(D)

v0 = -A * W * sin(D)


x0 = A * cos(D)

v0 / W = -A * sin(D)


Square each equation and add:

x0^2 + (v0 / W)^2 = (A * cos(D))^2 + (-A * sin(D))^2

x0^2 + (v0 / W)^2 = A^2 * cos(D)^2 + (-A) *(-A) * sin(D)^2

x0^2 + (v0 / W)^2 = A^2 * cos(D)^2 + A^2 * sin(D)^2

x0^2 + (v0 / W)^2 = A^2 * 1

( x0^2 + (v0 / W)^2 ) = A

A = √( x0^2 + (v0 / W)^2 )


Divide the top equation by the bottom equation:

x0 / (v0 / W) = -cot(D) (assume A ≠ 0)

(v0 / W) / x0 = -tan(D)

-(v0 / W) / x0 = tan(D)

D = arctan(-(v0 / W) / x0)

atan2( -(v0 / W), x0) = arg( x0 - (v0 / W)*i)


The atan2, arg, and similarly, the rectangular to polar conversion functions are used to allow for all angles, including angles in the form of π/2 + n*π.


The following code demonstrates the two basic approaches, using the classic HP 32 (and which can be used on HP 32SII, DM32, HP 33S).



HP 32S Code


The variables:


X = (initial) position of the spring. When the spring is at it’s natural or neutral position, X = 0. (SI: unit m)

V = (initial) velocity of the spring. If V<0, the spring is getting shorter. If V>0, the spring is getting longer.

M = mass of the object attached to the end of the string (SI: unit kg)

K = spring’s force constant (N/m, kg/s^2)

A = amplitude of the spring (m)


Labels:

LBL I: Initialization, calculate W = √(K / M), and A = √(X^2 + V^2/W^2)

(HP 32S Memory: I: 34.5 bytes)


I01 LBL I

I02 INPUT K

I03 INPUT M

I04 INPUT X

I05 INPUT V

I06 RAD

I07 RCL K

I08 RCL÷ M

I09 SQRT

I10 STO W

I11 VIEW W

I12 RCL X

I13 x^2

I14 RCL V

I15 x^2

I16 RCL W

I17 x^2

I18 ÷

I19 +

I20 SQRT

I21 STO A

I22 VIEW A

I23 RTN


Sine Approach: x(t) = A * sin(W*T + B); W = √(K / M)

LBL S: Calculate B, then calculates X from time = 0 seconds to T seconds (per second)

(HP 32S Memory: S: 21.0 bytes, U: 16.5 bytes)


S01 LBL S

S02 RCL X

S03 RCL V

S04 RCL W

S05 ÷

S06 y,x→Θ,r

S07 x<>y

S08 STO B

S09 VIEW B

S10 INPUT T

S11 3

S12 10^x

S13 ÷

S14 STO T

U01 LBL U

U02 RCL T

U03 IP

U04 RCL× W

U05 RCL+ B

U06 SIN

U07 RCL× A

U08 STOP

U09 ISG T

U10 GTO U

U11 RTN



Cosine Approach: x(t) = A * cos(W*T + D); W = √(K / M)

LBL C: Calculate D

LBL D: Calculate X from time = 0 seconds to T seconds (per second)

(HP 32S Memory: C: 22.5 bytes, U: 16.5 bytes)


C01 LBL C

C02 RCL V

C03 RCL W

C04 ÷

C05 +/-

C06 RCL X

C07 y,x→Θ,r

C08 x<>y

C09 STO D

C10 VIEW D

C11 INPUT T

C12 3

C13 10^x

C14 ÷

C15 STO T

E01 LBL E

E02 RCL T

E03 IP

E04 RCL× W

E05 RCL+ D

E06 COS

E07 RCL× A

E08 STOP

E09 ISG T

E10 GTO E

E11 RTN


Examples


The calculator is set to FIX 5 mode.


Example 1:

K = 40, M = 1.33, V = 0, X = 0.3. Up to 5 seconds


Results:

W = 5.48408, A = 0.30000



Sine Approach (LBL S)

Cosine Approach (LBL C)

Time (seconds)

B = 1.57080 (π/2)

D = 0

0

0.30000

0.30000

1

0.20921

0.20921

2

-0.00822

-0.00822

3

-0.22067

-0.22067

4

-0.29955

-0.29955

5

-0.19711

-0.19711



Example 2:

K = 48, M = 3, V = 0, X = -0.5. Up to 5 seconds


Results:

W = 4.00000, A = 0.50000



Sine Approach (LBL S)

Cosine Approach (LBL C)

Time (seconds)

B = -1.57080 (-π/2)

D = 3.14159 (π)

0

-0.50000

-0.50000

1

0.32682

0.32682

2

0.07275

0.07275

3

-0.42193

-0.42193

4

0.47883

0.47883

5

-0.20404

-0.20404



Sources


“Simple Harmonic Motion” Hyperphysics. http://hyperphysics.phy-astr.gsu.edu/hbase/shm.html Retrieved February 7, 2025.


LibreTexts Physics. “15.2: Simple Harmonic Motion” https://phys.libretexts.org/Bookshelves/University_Physics/University_Physics_(OpenStax)/Book%3A_University_Physics_I_-_Mechanics_Sound_Oscillations_and_Waves_(OpenStax)/15%3A_Oscillations/15.02%3A_Simple_Harmonic_Motion Retrieved February 6, 2025.


Rodicek, Danny. Mathematics & Physics for Programmers Hingham, MA. 2005. ISBN 1-58450-330-0


Eddie


All original content copyright, © 2011-2025. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.  

The content on this blog is 100% generated by humans. The author does not use AI engines and never will.