Aaron Fenyes
42bdfabd91
Rust trial: port interface to Sycamore
...
Now we have a reactive web app written entirely in Rust. The Trunk build
tool compiles it to WebAssembly and generates a little JavaScript glue.
2024-07-29 05:30:16 -07:00
Aaron Fenyes
12abef4076
Trial a Rust engine powering a Civet interface
...
Write a basic web app with a Rust engine, compiled to WebAssembly,
powering a Civet interface. Do linear algebra in the engine using
the `nalgebra` crate.
2024-07-28 21:10:04 -07:00
Aaron Fenyes
d7dbee4c05
Stow algebraic engine prototype
...
We're using the Gram matrix engine for the next stage of development,
so the algebraic engine shouldn't be at the top level anymore.
2024-07-28 20:50:04 -07:00
Aaron Fenyes
9d69a900e2
Irisawa hexlet: use Abe's terminology in comments
...
Abe uses the names "sun" and "moon" for what Wikipedia calls the nucleus
spheres.
2024-07-18 03:39:41 -07:00
Aaron Fenyes
8a77cd7484
Irisawa hexlet: drop unviable approach
...
The approach in the deleted file can't work, because the "sun" and
"moon" spheres can't be placed arbitrarily.
2024-07-18 03:21:46 -07:00
Aaron Fenyes
a26f1e3927
Add Irisawa hexlet example
...
Hat tip Romy, who sent me the article on sangaku that led me to this
problem.
2024-07-18 03:16:57 -07:00
Aaron Fenyes
19a4d49497
Clean up example formatting
2024-07-18 01:48:05 -07:00
Aaron Fenyes
71c10adbdd
Overlapping pyramids: drop outdated comment
2024-07-18 01:12:49 -07:00
Aaron Fenyes
33c09917d0
Correct scope of guess constants
2024-07-18 01:05:13 -07:00
Aaron Fenyes
b24dcc9af8
Report success correctly when step limit is reached
2024-07-18 01:04:40 -07:00
Aaron Fenyes
b040bbb7fe
Drop old code from examples
2024-07-18 00:50:48 -07:00
Aaron Fenyes
9007c8bc7c
Circles in triangle: jiggle the guess
2024-07-18 00:49:09 -07:00
Aaron Fenyes
a7f9545a37
Circles in triangle: correct frozen variables
...
Since the self-product of the point at infinity is left unspecified, the
first three components can vary without violating any constraints. To
keep the point at infinity where it's supposed to be, we freeze all of
its components.
2024-07-18 00:43:00 -07:00
Aaron Fenyes
3764fde2f6
Clean up formatting of notes
2024-07-18 00:27:10 -07:00
Aaron Fenyes
24dae6807b
Clarify notes on tangency
2024-07-18 00:16:23 -07:00
Aaron Fenyes
74c7f64b0c
Correct sign of normal in plane utility
...
Clarify the relevant notes too.
2024-07-18 00:03:12 -07:00
Aaron Fenyes
d0340c0b65
Correct point utility again
...
The balance between the light cone basis vectors was wrong, throwing the
point's coordinates off by a factor of two.
2024-07-17 23:37:28 -07:00
Aaron Fenyes
69a704d414
Use notes' sign convention for light cone basis
2024-07-17 23:07:34 -07:00
Aaron Fenyes
01f44324c1
Tetrahedron radius ratio: find radius ratio
2024-07-17 22:45:17 -07:00
Aaron Fenyes
96ffc59642
Tetrahedron radius ratio: tweak guess
...
Jiggle the vertex guesses. Put the circumscribed sphere guess on-shell.
2024-07-17 19:01:34 -07:00
Aaron Fenyes
a02b76544a
Tetrahedron radius ratio: add circumscribed sphere
2024-07-17 18:55:36 -07:00
Aaron Fenyes
6e719f9943
Tetrahedron radius ratio: correct vertex guesses
2024-07-17 18:27:58 -07:00
Aaron Fenyes
d51d43f481
Correct point utility
2024-07-17 18:27:22 -07:00
Aaron Fenyes
6d233b5ee9
Tetrahedron radius ratio: correct signs
2024-07-17 18:08:36 -07:00
Aaron Fenyes
5abd4ca6e1
Revert "Give spheres positive radii in examples"
...
This reverts commit 4728959ae0
, which
actually gave the spheres negative radii! I got confused by the sign
convention differences between the notes and the engine.
2024-07-17 17:49:43 -07:00
Aaron Fenyes
ea640f4861
Start tetrahedron radius ratio example
...
Add the vertices of the tetrahedron to the `sphere-in-tetrahedron`
example.
2024-07-17 17:33:32 -07:00
Aaron Fenyes
4728959ae0
Give spheres positive radii in examples
...
This changes the meaning of `indep_val` in the overlapping pyramids
example, so we adjust `indep_val` to get a nice-looking construction.
2024-07-17 17:22:33 -07:00
Aaron Fenyes
2038103d80
Write examples directly in light cone basis
2024-07-17 15:37:14 -07:00
Aaron Fenyes
bde42ebac0
Switch engine to light cone basis
2024-07-17 14:30:43 -07:00
Aaron Fenyes
e6cf08a9b3
Make tetrahedron faces planar
2024-07-15 23:54:59 -07:00
Aaron Fenyes
7c77481f5e
Don't constrain self-product of frozen vector
2024-07-15 23:39:05 -07:00
Aaron Fenyes
1ce609836b
Implement frozen variables
2024-07-15 22:11:54 -07:00
Aaron Fenyes
b185fd4b83
Switch to backtracking Newton's method in Optim
...
This performs much better than the trust region Newton's method for the
actual `circles-in-triangle` problem. (The trust region method performs
better for the simplified problem produced by the conversion bug.)
2024-07-15 15:52:38 -07:00
Aaron Fenyes
94e0d321d5
Switch back to BigFloat precision in examples
2024-07-15 14:31:30 -07:00
Aaron Fenyes
53d8c38047
Preserve explicit zeros in Gram matrix conversion
...
In previous commits, the `circles-in-triangle` example converged much
more slowly in BigFloat precision than in Float64 precision. This
turned out to be a sign of a bug in the Float64 computation: converting
the Gram matrix using `Float64.()` dropped the explicit zeros, removing
many constraints and making the problem much easier to solve. This
commit corrects the Gram matrix conversion. The Float64 search now
solves the same problem as the BigFloat search, with comparable
performance.
2024-07-15 14:08:57 -07:00
Aaron Fenyes
7b3efbc385
Clean up backtracking gradient descent code
...
Drop experimental singularity handling strategies. Reduce the default
tolerance to within 64-bit floating point precision. Report success.
2024-07-15 13:15:15 -07:00
Aaron Fenyes
25b09ebf92
Sketch backtracking Newton's method
...
This code is a mess, but I'm committing it to record a working state
before I start trying to clean up.
2024-07-15 11:32:04 -07:00
Aaron Fenyes
3910b9f740
Use Newton's method for polishing
2024-07-11 13:43:52 -07:00
Aaron Fenyes
d538cbf716
Correct improvement threshold by using unit step
...
Our formula for the improvement theshold works when the step size is
an absolute distance. However, in commit `4d5ea06`, the step size was
measured relative to the current gradient instead. This commit scales
the base step to unit length, so now the step size really is an absolute
distance.
2024-07-10 23:31:44 -07:00
Aaron Fenyes
4d5ea062a3
Record gradient and last line search in history
2024-07-09 15:00:13 -07:00
Aaron Fenyes
5652719642
Require triangle sides to be planar
2024-07-09 14:10:23 -07:00
Aaron Fenyes
f84d475580
Visualize neighborhoods of global minima
2024-07-09 14:01:30 -07:00
Aaron Fenyes
77bc124170
Change loss function to match gradient
2024-07-09 14:00:24 -07:00
Aaron Fenyes
023759a267
Start "circles in triangle" from a very close guess
2024-07-08 14:21:10 -07:00
Aaron Fenyes
610fc451f0
Track slope in gradient descent history
2024-07-08 14:19:25 -07:00
Aaron Fenyes
93dd05c317
Add required package to "sphere in tetrahedron" example
2024-07-08 14:19:05 -07:00
Aaron Fenyes
9efa99e8be
Test gradient descent for circles in triangle
2024-07-08 12:56:28 -07:00
Aaron Fenyes
828498b3de
Add sphere and plane utilities to engine
2024-07-08 12:56:14 -07:00
Aaron Fenyes
736ac50b07
Test gradient descent for sphere in tetrahedron
2024-07-07 17:58:55 -07:00
Aaron Fenyes
ea354b6c2b
Randomize guess in gradient descent test
...
Randomly perturb the pre-solved part of the guess, and randomly choose
the unsolved part.
2024-07-07 17:56:12 -07:00