Commit graph

236 commits

Author SHA1 Message Date
sheaf 300fbf92c0 fixes to brush widget UI 2024-05-25 17:04:08 +02:00
sheaf 77a36e1f0b add more info to cusps benchmark output 2024-05-25 12:41:10 +02:00
sheaf af66b3b5ac update bounds for GHC 9.10 2024-05-23 11:17:36 +02:00
sheaf 91ac61e3cd WIP: add Walter's LP approach to interval Newton 2024-05-23 11:04:17 +02:00
sheaf 1ec2af6dcc WIP: add brush widget UI 2024-05-21 19:40:22 +02:00
sheaf 2a21980ffc Fix issues in withTangent & strictlyParallel function 2024-04-29 19:35:53 +02:00
sheaf 63b9703faf UI tweaks 2024-04-25 21:53:53 +02:00
sheaf c89fba7fd2 Improve specialisation + add degree computation 2024-04-25 21:53:27 +02:00
sheaf 6450859e3c Bench with & without box(1)-consistency algorithm 2024-04-24 02:04:13 +02:00
sheaf 17df43c5d7 Commentary in tearDropBrushFn 2024-04-24 01:47:01 +02:00
sheaf 32ce7c38bb Add some commentary to Gauss-Seidel function 2024-04-24 01:30:24 +02:00
sheaf a59f1695fb Sprinkle in a bit of unicode 2024-04-24 01:03:46 +02:00
sheaf edba0416aa Add complete interval-union Gauss–Seidel step method 2024-04-24 00:13:06 +02:00
sheaf ac9deb968a Clean up benchmarking component 2024-04-22 22:11:07 +02:00
sheaf 0c54de8b1c Update Eigen to expose unsafeCoeff 2024-04-22 20:12:31 +02:00
sheaf d797abc5e4 Modularise root isolation algorithms
Different root isolation algorithms now live in separate modules,
and are all instances of the RootIsolationAlgorithm typeclass.

This separates the algorithmic code from the top-level driver code
in Math.Root.Isolation.
2024-04-22 20:06:03 +02:00
sheaf b1df0d04e6 Always run Gauss-Seidel at tiny sizes to rule out fake solutions 2024-04-22 01:52:29 +02:00
sheaf 0e59d85143 Use 'n choose k' to choose Gauss-Seidel dimensions 2024-04-21 21:15:07 +02:00
sheaf 0e6b9a822b Documentation in root isolation module 2024-04-21 20:35:35 +02:00
sheaf 8009983b37 Slight refactor of bisection dimension choosing logic 2024-04-21 20:10:37 +02:00
sheaf ced714987e Implement adaptive shaving algorithm 2024-04-21 18:09:21 +02:00
sheaf 01fdd9a126 Improve robustness of quadratic equation solver
Based on ideas from the paper
  "The Ins and Outs of Solving Quadratic Equations with Floating-Point Arithmetic"
    (Frédéric Goualard, 2023)

Could still be improved further, but I think this is acceptable for now.
2024-04-21 14:19:37 +02:00
sheaf 1338d7ddbe Improve intervallic rotation computations
This commit bakes in a certain kind of representation for brush strokes:

  c(t,s) = p(t) + R(theta(t)) b(t,s)

This representation allows us to cancel out some rotation terms when
computing the envelope equation, improving the efficiency of the
cusp-finding methods.
2024-04-20 18:28:41 +02:00
sheaf 2b167f594a Make it easier to switch between 2 and 3-dim
This commit makes it easier to switch between the 2-dim and 3-dim
formulations of the cusp-finding problem. This is still work in progress,
trying to improve the performance of the cusp-finding algorithms.
2024-04-18 21:33:55 +02:00
sheaf 0160081e80 Further modularisation of root isolation code
The code is now generic over the dimension. There is a slight performance
loss that I need to investigate; perhaps some things are not getting
specialised? Maybe it is better to be more explicit about staging and
splice in the functions with fixed dimensions.
2024-04-18 20:14:19 +02:00
sheaf 131753da82 Split off root-isolation algorithms into Math.Root.Isolation 2024-04-17 20:41:21 +02:00
sheaf bd468fcf82 start modularising cusp finding code 2024-04-05 17:48:53 +02:00
sheaf 55470d1f0e make cusp-finding algorithm choice more configurable 2024-04-03 18:46:08 +02:00
sheaf a183475985 Cusp finding: implement bound consistency improvement 2024-03-14 21:50:34 +01:00
sheaf 61671dc280 Implement box(1) consistency check for cusp finding 2024-03-13 18:00:37 +01:00
sheaf 60ebf7886f Split up succFP etc into separate module 2024-03-11 14:09:54 +01:00
sheaf 34c129d72a Add tests and fix MonomialBasis D3A3 instance 2024-03-08 15:35:39 +01:00
sheaf cebfeb0b7a Fix some more issues with interval recip 2024-03-06 16:07:21 +01:00
sheaf 2289468a84 Fixes and restructuring 2024-02-28 17:20:34 +01:00
sheaf 26cfdada8f Fix extendedRecip (negative infinity) 2024-02-24 19:37:34 +01:00
sheaf d1b3765335 Split out benchmark for cusp finding 2024-02-23 17:03:28 +01:00
sheaf b70f7ba133 Add mechanisms to log envelope equation data 2024-02-19 16:46:09 +01:00
sheaf 6b658acedd Restructure project & update bounds 2024-02-17 13:58:40 +01:00
sheaf 1368825103 improve outline computation using divMod' 2024-01-08 11:31:18 +01:00
sheaf f10fbd9810 remove traces & minor cleanups 2024-01-06 18:18:14 +01:00
sheaf 326487942e fix orientation computation 2023-08-30 17:40:47 +02:00
sheaf 92efc4127c add teardrop shaped brush 2023-07-15 16:40:59 +02:00
sheaf 7eb16b4782 tiny build fixes 2023-06-15 00:39:03 +02:00
sheaf 96aa38b3c3 improve rotations in interval arithmetic
Computing a rotation in interval arithmetic can lose tightness.
Instead of computing

   a cos phi + b sin phi

which doesn't account for the difference in phase in the two sinusoids,
it is better to use

  sqrt (a² + b²) * cos ( phi - atan2(a,b) )

which correctly estimates the maximum amplitude of the sum to be
sqrt(a²+b²) instead of abs(a) + abs(b).

This seems to worsen the performance of the interval Newton method
at the moment, possibly due to the complexity of the new formula,
which involves computing atan(b/a). Further investigation is needed.
2023-05-14 21:38:25 +02:00
sheaf 50d99e1e4b improve intervallic Bézier evaluation
Now we evaluate Bézier curves using an AABB computation. This results
in tighter intervals, which means that the cusp-finding algorithm
is better behaved.
2023-04-25 23:07:18 +02:00
sheaf 7db3cbef33 more work into observability 2023-03-13 22:09:15 +01:00
sheaf 52420a1169 experiment: FMA backend for interval arithmetic
also includes the start of a way to observe which equations
are being solved, which should help with improving the performance of
the interval Newton method
2023-03-12 19:15:58 +01:00
sheaf cd6b7368f8 Update cabal.project for GHC 9.6 2023-02-09 17:53:25 +01:00
sheaf 4cd11fa02f add export to SVG functionality 2023-02-03 14:16:57 +01:00
sheaf 8ac22b4738 some optimisations 2023-01-29 04:03:36 +01:00