HP Forums

Full Version: Catenoid soap bubbles
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Here is a nice demonstration of the minimum surface area of a soap film between two hoops by Matt Parker:





(Something for Albert Chan to sink his teeth into, perhaps?)
Why Matt Parker doesn't use a pocket calculator with Python instead of his laptop; so much easier to handle when standing-up in front of a white board ?

As I remember,he was a fan of CASIO calculators. Is there no CASIO handled with a Python application inside ?
I don't understand the complexity.

Let R = D/2 = 1.068/2 = 0.534 m
Let H = L/2 = 0.5/2 = 0.25 m

First, with symmetry, b = 0.25 m (not need to solve at all)
Shift axis so that x=0 has radius of r (= Matt's a), x=H have radius of R

(y/r) = cosh(x/r)

At x=0, we have y = r
At x=H, we have y = R, (R/r) = cosh(H/r)

Casio FX-115MS, solve for r:

0.534 - X*cosh(0.25/X) [SOLVE] (guess r = R = 0.534)       → r = 0.465190824
Two things immediately came to mind when I watched the video.

1) Coding the best fit for y=a*cosh((x-b)/a) through two points is kind of cool, but GeoGebra has a built-in Fit function that does this very thing. Using the numbers from the video, GeoGebra returns the same values that he got, including where the function "breaks". (GeoGebra can even animate the changing function as shown in the video.)

In the HP Prime Statistics 2Var app, it has an option for a User Defined equation. When I first saw this, I excitedly assumed that it would work like GeoGebra with the ability to find the best-fit for any equation. Unfortunately, that is not the case. It simply graphs the User Defined function without any attempt at a best fit. That's too bad---I thought that would be a very nice numerical feature.

2) I guess I've never heard the British pronunciation of "catenary" before. I was suspecting it might be a catenary, but even so, my American ears did a double-take when he said it the first time. Big Grin
(11-07-2021 05:44 PM)Wes Loewer Wrote: [ -> ]2) I guess I've never heard the British pronunciation of "catenary" before. I was suspecting it might be a catenary, but even so, my American ears did a double-take when he said it the first time. Big Grin

He's actually Australian, but I think he pronounces it the same way as the Brits!
(11-07-2021 04:27 PM)Albert Chan Wrote: [ -> ]I don't understand the complexity.

Let R = D/2 = 1.068/2 = 0.534 m
Let H = L/2 = 0.5/2 = 0.25 m

First, with symmetry, b = 0.25 m (not need to solve at all)
Shift axis so that x=0 has radius of r (= Matt's a), x=H have radius of R

Yes, it looked a bit suspicious when he got a b value exactly half of the length (+/- epsilon). Obviously symmetrical.

For different top and bottom radii, you really would have to solve for both a and b. It looks like Matt's Python code could be easily modified to handle different diameters at each end.
(11-07-2021 08:08 PM)ijabbott Wrote: [ -> ]For different top and bottom radii, you really would have to solve for both a and b.
It looks like Matt's Python code could be easily modified to handle different diameters at each end.

mpmath can handle multiple nonlinear equations with multiple unknowns.
And, with different solver to suit the need Smile

>>> from mpmath import *
>>> R1, R2, L = 1.016/2, 1.12/2, 0.5
>>> def findab(x,y): return lambda a,b: a*cosh((x-b)/a) - y
...
>>> findroot([findab(0,R1), findab(L,R2)], [R1,L/2])
matrix(
[['0.462106619540686'],
['0.204282212315188']])

---

Solving system of non-linear equations is hard.
I don't think Cas (even XCas) has built-ins to solve them.

Luckily, we can easily turn above to 1 equation with 1 unknown.

R1 = a*cosh((0-b)/a)
R1/a = cosh(b/a)

R2 = a*cosh((L-b)/a)
R2/a = cosh(L/a) * cosh(b/a) - sinh(L/a) * sinh(b/a)
        = cosh(L/a) * (R1/a) - sinh(L/a) * sqrt((R1/a-1)*(R1/a+1))

Solving in Cas (but, to avoid sqrt of negative numbers, make sure guess a < R1)

Cas> finda := (cosh(l/a)*r1 - sinh(l/a)*sqrt((r1+a)*(r1-a))) - r2
Cas> fsolve(finda(l=0.5, r1=0.508, r2=0.560), a=0.5)

0.462106619541       // = a

Cas> id(acosh(r1/a)*a) (a=Ans, r1=0.508)

0.204282212315       // = b

---

Update: I was wrong, Cas/XCas can solve this (without guesses !)

Cas> fsolve([a*cosh(b/a), a*cosh((0.5-b)/a)] = [0.508, 0.56], [a,b])

[0.462106619541, 0.204282212315]
That's a very nice substitution, Albert!
At the end of video, Matt showed that bubble collapsed when H/R = 0.66274 ...
Let x = H/r, k = H/R

(R/r) = cosh(H/r)       → x/k = cosh(x)

In other words, if k above critical constant (0.66274 ...), equation failed to give a solution.

This is one way to solve for the constant, by geometry

Critical point (at x0) is when cosh(x) tangent line is y = x/k
Matching tangent line, we have:

y = sinh(x0)*(x-x0) + cosh(x0) = sinh(x0)*x + (cosh(x0)-x0*sinh(x0)) = x/k

constant term → x0*tanh(x0) = 1 → x0 ≈ 1.19967864026
linear term     → sinh(x0) = 1/k    → k ≈ 0.662743419349
A search on Google Images for "catenoid soap bubbles" apparently allows for misspellings. Big Grin

[Image: cat-annoyed-soap-bubbles.jpg]
(11-09-2021 02:57 AM)Joe Horn Wrote: [ -> ]A search on Google Images for "catenoid soap bubbles" apparently allows for misspellings. Big Grin

I wonder whether an android would keep a catenoid as a pet?

(ISTR Data had a real cat though!)
Reference URL's