Join a light rope to a heavy one and send a pulse. Part of it bounces back, part goes on. How much depends only on the two wave impedances.
Orange: energy in the left rope. Blue: energy in the right rope. Dashed lines: predicted final shares R² (reflected) and 1 - R² (transmitted). Their sum stays at 100 percent while the pulse is still on the ropes.
running...
The science
The wave equation. A stretched rope with tension T and mass per length μ obeys μ ∂²u/∂t² = T ∂²u/∂x² for small transverse displacement u(x,t). Any shape f(x - ct) + g(x + ct) is a solution (d'Alembert), with speed c = √(T/μ). Here T = m g from the hanging mass, ignoring pulley friction and the weight of the rope.
Impedance. The ratio of transverse force to transverse velocity in a travelling wave is Z = √(T μ) = μ c. At the junction the displacement and the slope-force are both continuous. That gives R = (Z1 - Z2)/(Z1 + Z2) for the reflected amplitude and Tamp = 2 Z1/(Z1 + Z2) for the transmitted one. Light to heavy: R is negative (the reflected pulse is upside down). Heavy to light: R is positive. Equal impedances: no reflection.
Energy. The energy per length is ½μ(∂u/∂t)² + ½T(∂u/∂x)². Reflected share is R²; transmitted share is (Z2/Z1)Tamp² = 1 - R², so energy is conserved even though amplitudes are not.
Numerical method. Second-order finite differences (leapfrog) on a 1 cm grid with a Courant number of 0.9 on the fast rope. The far end can be clamped, free, or a first-order absorbing boundary (Mur) that imitates an endless rope. The self-checks run separate copies of the solver and compare with the formulas above.
Honest simplifications. Small amplitudes only (linear wave equation, no sag, no nonlinear tension change); no damping, no stiffness or dispersion except small grid dispersion; the hanging weight is assumed to keep the tension constant (a real mass bobs slightly when the rope end moves); the pulley is ideal. Vertical displacement on screen can be magnified for visibility.
Models: Blender 5.2 (bench, wall plate, pulley, slotted masses, ruler; baked textures). Rendering: Three.js r160.