Skip to content

Eigenbox - #764

Open
blegat wants to merge 10 commits into
JuliaIntervals:masterfrom
blegat:eigenbox
Open

Eigenbox#764
blegat wants to merge 10 commits into
JuliaIntervals:masterfrom
blegat:eigenbox

Conversation

@blegat

@blegat blegat commented Jun 21, 2026

Copy link
Copy Markdown

As discussed during the meeting, the current implementation in the LinearAlgebra extension is incorrect for large intervals while the implementation in IntervalLinearAlgebra works for large interval but is its computation of eigvals for the matrix of centers and radius is just using floating point computation. By combining both, we have a fully rigorous eigen function for matrices of intervals.

This was done by Claude Code but I have done a pass too, it looks good.

  • Add tests
  • Allow the user to choose it with alg

Closes #753

@github-actions

github-actions Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master aa6d724... master / aa6d724...
BigFloat MPFI/basics/* 25.1 ± 3.5 μs 25.6 ± 3.6 μs 0.981 ± 0.2
BigFloat MPFI/basics/+ 12.6 ± 3.5 μs 13.1 ± 3.7 μs 0.96 ± 0.38
BigFloat MPFI/basics/- 17.4 ± 3.6 μs 18.5 ± 4.4 μs 0.938 ± 0.3
BigFloat MPFI/basics// 20.1 ± 3.5 μs 19.9 ± 3.9 μs 1.01 ± 0.26
BigFloat MPFI/basics/abs 10.8 ± 3.3 μs 11 ± 3.5 μs 0.977 ± 0.43
BigFloat MPFI/basics/acos 0.689 ± 0.0079 ms 0.678 ± 0.0093 ms 1.02 ± 0.018
BigFloat MPFI/basics/asin 0.683 ± 0.0098 ms 0.663 ± 0.014 ms 1.03 ± 0.027
BigFloat MPFI/basics/atan 2.09 ± 0.0077 ms 2.1 ± 0.013 ms 0.996 ± 0.0072
BigFloat MPFI/basics/cos 0.366 ± 0.01 ms 0.361 ± 0.01 ms 1.01 ± 0.04
BigFloat MPFI/basics/cosh 0.432 ± 0.012 ms 0.434 ± 0.012 ms 0.995 ± 0.039
BigFloat MPFI/basics/exp 0.502 ± 0.01 ms 0.503 ± 0.011 ms 0.999 ± 0.03
BigFloat MPFI/basics/inv 19.4 ± 3.4 μs 19.3 ± 3.5 μs 1.01 ± 0.26
BigFloat MPFI/basics/log 0.469 ± 0.01 ms 0.47 ± 0.011 ms 0.999 ± 0.031
BigFloat MPFI/basics/sin 0.474 ± 0.012 ms 0.466 ± 0.012 ms 1.02 ± 0.037
BigFloat MPFI/basics/sinh 0.571 ± 0.01 ms 0.572 ± 0.011 ms 0.999 ± 0.026
BigFloat MPFI/basics/sqrt 27.1 ± 6.7 μs 27.9 ± 6.7 μs 0.973 ± 0.34
BigFloat MPFI/basics/tan 0.391 ± 0.01 ms 0.386 ± 0.01 ms 1.01 ± 0.039
BigFloat MPFI/basics/tanh 0.583 ± 0.01 ms 0.583 ± 0.011 ms 1 ± 0.025
BigFloat bareinterval/basics/* 0.0407 ± 0.0028 ms 0.0415 ± 0.0028 ms 0.982 ± 0.093
BigFloat bareinterval/basics/+ 22.2 ± 3.4 μs 21.7 ± 3.3 μs 1.02 ± 0.22
BigFloat bareinterval/basics/- 22.7 ± 3.4 μs 22 ± 3.4 μs 1.03 ± 0.22
BigFloat bareinterval/basics// 19.3 ± 5 μs 19.4 ± 4.9 μs 0.996 ± 0.36
BigFloat bareinterval/basics/abs 15.2 ± 3.2 μs 15.2 ± 3.1 μs 0.999 ± 0.29
BigFloat bareinterval/basics/acos 0.709 ± 0.024 ms 0.71 ± 0.023 ms 0.998 ± 0.046
BigFloat bareinterval/basics/asin 0.699 ± 0.023 ms 0.689 ± 0.022 ms 1.01 ± 0.046
BigFloat bareinterval/basics/atan 2.11 ± 0.007 ms 2.11 ± 0.0064 ms 1 ± 0.0045
BigFloat bareinterval/basics/cos 0.343 ± 0.086 ms 0.345 ± 0.086 ms 0.993 ± 0.35
BigFloat bareinterval/basics/cosh 0.477 ± 0.023 ms 0.476 ± 0.023 ms 1 ± 0.068
BigFloat bareinterval/basics/exp 0.512 ± 0.01 ms 0.514 ± 0.01 ms 0.997 ± 0.028
BigFloat bareinterval/basics/inv 27.1 ± 3.5 μs 26.8 ± 3.4 μs 1.01 ± 0.18
BigFloat bareinterval/basics/log 0.502 ± 0.012 ms 0.503 ± 0.013 ms 0.999 ± 0.035
BigFloat bareinterval/basics/sin 0.482 ± 0.094 ms 0.553 ± 0.093 ms 0.873 ± 0.23
BigFloat bareinterval/basics/sinh 0.585 ± 0.011 ms 0.582 ± 0.012 ms 1 ± 0.028
BigFloat bareinterval/basics/sqrt 31.5 ± 2.4 μs 0.0319 ± 0.0025 ms 0.986 ± 0.11
BigFloat bareinterval/basics/tan 0.314 ± 0.056 ms 0.323 ± 0.054 ms 0.969 ± 0.24
BigFloat bareinterval/basics/tanh 0.594 ± 0.011 ms 0.594 ± 0.011 ms 1 ± 0.026
BigFloat interval/basics/* 0.0435 ± 0.0018 ms 0.0432 ± 0.0025 ms 1.01 ± 0.072
BigFloat interval/basics/+ 24.1 ± 8.3 μs 24.1 ± 8.4 μs 1 ± 0.49
BigFloat interval/basics/- 24.4 ± 8 μs 24 ± 8.1 μs 1.02 ± 0.48
BigFloat interval/basics// 24 ± 4.7 μs 24.2 ± 4.8 μs 0.99 ± 0.28
BigFloat interval/basics/abs 14.2 ± 7.5 μs 14.1 ± 7.6 μs 1 ± 0.76
BigFloat interval/basics/acos 0.708 ± 0.043 ms 0.705 ± 0.044 ms 1 ± 0.087
BigFloat interval/basics/asin 0.693 ± 0.036 ms 0.689 ± 0.034 ms 1.01 ± 0.071
BigFloat interval/basics/atan 2.12 ± 0.0079 ms 2.12 ± 0.0065 ms 1 ± 0.0049
BigFloat interval/basics/cos 0.338 ± 0.017 ms 0.337 ± 0.013 ms 1 ± 0.063
BigFloat interval/basics/cosh 0.472 ± 0.023 ms 0.467 ± 0.019 ms 1.01 ± 0.064
BigFloat interval/basics/exp 0.521 ± 0.01 ms 0.524 ± 0.01 ms 0.993 ± 0.028
BigFloat interval/basics/inv 30.9 ± 7.3 μs 30.6 ± 7.6 μs 1.01 ± 0.35
BigFloat interval/basics/log 0.504 ± 0.037 ms 0.504 ± 0.035 ms 0.999 ± 0.1
BigFloat interval/basics/sin 0.489 ± 0.021 ms 0.489 ± 0.018 ms 1 ± 0.056
BigFloat interval/basics/sinh 0.591 ± 0.01 ms 0.59 ± 0.01 ms 1 ± 0.025
BigFloat interval/basics/sqrt 0.04 ± 0.029 ms 0.0398 ± 0.029 ms 1 ± 1
BigFloat interval/basics/tan 0.281 ± 0.016 ms 0.282 ± 0.013 ms 0.998 ± 0.074
BigFloat interval/basics/tanh 0.601 ± 0.012 ms 0.604 ± 0.011 ms 0.996 ± 0.027
bareinterval/basics/* 1.73 ± 0.05 μs 1.74 ± 0.041 μs 0.994 ± 0.037
bareinterval/basics/+ 0.521 ± 0.02 μs 0.492 ± 0.03 μs 1.06 ± 0.076
bareinterval/basics/- 0.541 ± 0.011 μs 0.55 ± 0.01 μs 0.984 ± 0.027
bareinterval/basics// 1.21 ± 0.03 μs 1.23 ± 0.05 μs 0.984 ± 0.047
bareinterval/basics/abs 0.201 ± 0.03 μs 0.191 ± 0.011 μs 1.05 ± 0.17
bareinterval/basics/acos 2.69 ± 0.03 μs 2.73 ± 0.02 μs 0.989 ± 0.013
bareinterval/basics/asin 3.02 ± 0.03 μs 3.04 ± 0.04 μs 0.994 ± 0.016
bareinterval/basics/atan 13.2 ± 0.18 μs 13 ± 0.18 μs 1.02 ± 0.02
bareinterval/basics/cos 0.0506 ± 0.0034 ms 0.0498 ± 0.0006 ms 1.01 ± 0.07
bareinterval/basics/cosh 7.18 ± 0.04 μs 7.24 ± 0.03 μs 0.992 ± 0.0069
bareinterval/basics/exp 4.25 ± 0.05 μs 4.28 ± 0.05 μs 0.993 ± 0.016
bareinterval/basics/inv 1 ± 0.021 μs 1.03 ± 0.02 μs 0.971 ± 0.028
bareinterval/basics/log 6.13 ± 4.2 μs 2.2 ± 0.06 μs 2.78 ± 1.9
bareinterval/basics/sin 0.0497 ± 0.018 ms 0.0489 ± 0.018 ms 1.02 ± 0.52
bareinterval/basics/sinh 10 ± 0.081 μs 10.1 ± 0.05 μs 0.995 ± 0.0094
bareinterval/basics/sqrt 1.13 ± 0.011 μs 1.15 ± 0.021 μs 0.983 ± 0.02
bareinterval/basics/tan 29 ± 0.37 μs 28.6 ± 0.31 μs 1.01 ± 0.017
bareinterval/basics/tanh 0.296 ± 0.0096 ms 0.296 ± 0.0093 ms 1 ± 0.045
interval/basics/* 2.87 ± 0.089 μs 3.06 ± 0.08 μs 0.935 ± 0.038
interval/basics/+ 1.34 ± 0.039 μs 1.53 ± 0.04 μs 0.876 ± 0.034
interval/basics/- 1.38 ± 0.04 μs 1.55 ± 0.04 μs 0.891 ± 0.034
interval/basics// 1.89 ± 0.049 μs 2 ± 0.049 μs 0.945 ± 0.034
interval/basics/abs 0.36 ± 0.07 μs 0.401 ± 0.031 μs 0.898 ± 0.19
interval/basics/acos 3.29 ± 0.051 μs 3.29 ± 0.06 μs 1 ± 0.024
interval/basics/asin 3.54 ± 0.04 μs 3.54 ± 0.03 μs 1 ± 0.014
interval/basics/atan 13.6 ± 0.25 μs 13.6 ± 0.27 μs 0.999 ± 0.027
interval/basics/cos 0.0684 ± 0.0034 ms 0.0677 ± 0.0033 ms 1.01 ± 0.071
interval/basics/cosh 8.99 ± 0.07 μs 9.03 ± 0.07 μs 0.995 ± 0.011
interval/basics/exp 4.92 ± 0.06 μs 4.92 ± 0.059 μs 1 ± 0.017
interval/basics/inv 1.52 ± 0.069 μs 1.51 ± 0.05 μs 1.01 ± 0.056
interval/basics/log 2.65 ± 0.08 μs 2.66 ± 0.05 μs 0.996 ± 0.035
interval/basics/sin 0.0675 ± 0.0035 ms 0.0669 ± 0.0034 ms 1.01 ± 0.074
interval/basics/sinh 10.7 ± 0.08 μs 10.6 ± 0.07 μs 1 ± 0.01
interval/basics/sqrt 1.57 ± 0.04 μs 1.59 ± 0.03 μs 0.987 ± 0.031
interval/basics/tan 0.0389 ± 0.0018 ms 0.0387 ± 0.0017 ms 1.01 ± 0.065
interval/basics/tanh 0.309 ± 0.0079 ms 0.308 ± 0.0074 ms 1 ± 0.035
time_to_load 0.117 ± 0.004 s 0.124 ± 0.0009 s 0.948 ± 0.033
Memory benchmarks
master aa6d724... master / aa6d724...
BigFloat MPFI/basics/* 0.424 k allocs: 21.3 kB 0.424 k allocs: 21.3 kB 1
BigFloat MPFI/basics/+ 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/- 0.402 k allocs: 20.4 kB 0.402 k allocs: 20.4 kB 1
BigFloat MPFI/basics// 0.345 k allocs: 18.2 kB 0.345 k allocs: 18.2 kB 1
BigFloat MPFI/basics/abs 0.324 k allocs: 17.4 kB 0.324 k allocs: 17.4 kB 1
BigFloat MPFI/basics/acos 1.24 k allocs: 0.0445 MB 1.24 k allocs: 0.0445 MB 1
BigFloat MPFI/basics/asin 1.08 k allocs: 0.0355 MB 1.08 k allocs: 0.0355 MB 1
BigFloat MPFI/basics/atan 2.14 k allocs: 0.0543 MB 2.14 k allocs: 0.0543 MB 1
BigFloat MPFI/basics/cos 2.9 k allocs: 0.0975 MB 2.9 k allocs: 0.0975 MB 1
BigFloat MPFI/basics/cosh 0.781 k allocs: 0.0322 MB 0.781 k allocs: 0.0322 MB 1
BigFloat MPFI/basics/exp 0.902 k allocs: 0.036 MB 0.902 k allocs: 0.036 MB 1
BigFloat MPFI/basics/inv 0.351 k allocs: 18.4 kB 0.351 k allocs: 18.4 kB 1
BigFloat MPFI/basics/log 0.407 k allocs: 20.6 kB 0.407 k allocs: 20.6 kB 1
BigFloat MPFI/basics/sin 3.18 k allocs: 0.106 MB 3.18 k allocs: 0.106 MB 1
BigFloat MPFI/basics/sinh 0.915 k allocs: 0.0369 MB 0.915 k allocs: 0.0369 MB 1
BigFloat MPFI/basics/sqrt 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/tan 2.8 k allocs: 0.098 MB 2.8 k allocs: 0.098 MB 1
BigFloat MPFI/basics/tanh 0.908 k allocs: 0.0362 MB 0.908 k allocs: 0.0362 MB 1
BigFloat bareinterval/basics/* 0.262 k allocs: 26 kB 0.262 k allocs: 26 kB 1
BigFloat bareinterval/basics/+ 0.202 k allocs: 20.4 kB 0.202 k allocs: 20.4 kB 1
BigFloat bareinterval/basics/- 0.202 k allocs: 20.4 kB 0.202 k allocs: 20.4 kB 1
BigFloat bareinterval/basics// 0.1 k allocs: 10.8 kB 0.1 k allocs: 10.8 kB 1
BigFloat bareinterval/basics/abs 0.199 k allocs: 20.1 kB 0.199 k allocs: 20.1 kB 1
BigFloat bareinterval/basics/acos 1.27 k allocs: 0.0692 MB 1.27 k allocs: 0.0692 MB 1
BigFloat bareinterval/basics/asin 1.17 k allocs: 0.0597 MB 1.17 k allocs: 0.0597 MB 1
BigFloat bareinterval/basics/atan 2.04 k allocs: 0.08 MB 2.04 k allocs: 0.08 MB 1
BigFloat bareinterval/basics/cos 2.45 k allocs: 0.185 MB 2.45 k allocs: 0.185 MB 1
BigFloat bareinterval/basics/cosh 1.01 k allocs: 0.0671 MB 1.01 k allocs: 0.0671 MB 1
BigFloat bareinterval/basics/exp 0.802 k allocs: 0.0397 MB 0.802 k allocs: 0.0397 MB 1
BigFloat bareinterval/basics/inv 0.198 k allocs: 20 kB 0.198 k allocs: 20 kB 1
BigFloat bareinterval/basics/log 0.616 k allocs: 0.0522 MB 0.616 k allocs: 0.0522 MB 1
BigFloat bareinterval/basics/sin 2.9 k allocs: 0.197 MB 2.9 k allocs: 0.197 MB 1
BigFloat bareinterval/basics/sinh 0.815 k allocs: 0.0407 MB 0.815 k allocs: 0.0407 MB 1
BigFloat bareinterval/basics/sqrt 0.26 k allocs: 25.8 kB 0.26 k allocs: 25.8 kB 1
BigFloat bareinterval/basics/tan 1.67 k allocs: 0.124 MB 1.67 k allocs: 0.124 MB 1
BigFloat bareinterval/basics/tanh 0.808 k allocs: 0.0399 MB 0.808 k allocs: 0.0399 MB 1
BigFloat interval/basics/* 0.263 k allocs: 26.8 kB 0.263 k allocs: 26.8 kB 1
BigFloat interval/basics/+ 0.203 k allocs: 21.2 kB 0.203 k allocs: 21.2 kB 1
BigFloat interval/basics/- 0.203 k allocs: 21.2 kB 0.203 k allocs: 21.2 kB 1
BigFloat interval/basics// 0.101 k allocs: 11.6 kB 0.101 k allocs: 11.6 kB 1
BigFloat interval/basics/abs 0.2 k allocs: 20.9 kB 0.2 k allocs: 20.9 kB 1
BigFloat interval/basics/acos 1.71 k allocs: 0.11 MB 1.71 k allocs: 0.11 MB 1
BigFloat interval/basics/asin 1.47 k allocs: 0.0882 MB 1.47 k allocs: 0.088 MB 1
BigFloat interval/basics/atan 2.04 k allocs: 0.0813 MB 2.04 k allocs: 0.0812 MB 1
BigFloat interval/basics/cos 2.45 k allocs: 0.186 MB 2.45 k allocs: 0.186 MB 1
BigFloat interval/basics/cosh 1.01 k allocs: 0.0681 MB 1.01 k allocs: 0.0682 MB 0.999
BigFloat interval/basics/exp 0.803 k allocs: 0.0409 MB 0.803 k allocs: 0.041 MB 0.997
BigFloat interval/basics/inv 0.199 k allocs: 20.8 kB 0.199 k allocs: 20.8 kB 1
BigFloat interval/basics/log 0.917 k allocs: 0.0805 MB 0.917 k allocs: 0.0805 MB 1
BigFloat interval/basics/sin 2.9 k allocs: 0.198 MB 2.9 k allocs: 0.198 MB 1
BigFloat interval/basics/sinh 0.816 k allocs: 0.0418 MB 0.816 k allocs: 0.0419 MB 0.998
BigFloat interval/basics/sqrt 0.714 k allocs: 0.0675 MB 0.714 k allocs: 0.0675 MB 1
BigFloat interval/basics/tan 1.67 k allocs: 0.125 MB 1.67 k allocs: 0.125 MB 1
BigFloat interval/basics/tanh 0.809 k allocs: 0.041 MB 0.809 k allocs: 0.0411 MB 0.999
bareinterval/basics/* 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/+ 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/- 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics// 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/abs 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/acos 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/asin 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/atan 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/cos 0.56 k allocs: 0.0423 MB 0.56 k allocs: 0.0423 MB 1
bareinterval/basics/cosh 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/exp 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/inv 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/log 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/sin 0.56 k allocs: 0.0423 MB 0.56 k allocs: 0.0423 MB 1
bareinterval/basics/sinh 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/sqrt 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/tan 0.29 k allocs: 23 kB 0.29 k allocs: 23 kB 1
bareinterval/basics/tanh 1.03 k allocs: 0.0359 MB 1.03 k allocs: 0.0359 MB 1
interval/basics/* 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/+ 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/- 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics// 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/abs 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/acos 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/asin 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/atan 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/cos 0.561 k allocs: 0.0431 MB 0.561 k allocs: 0.0431 MB 1
interval/basics/cosh 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/exp 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/inv 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/log 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/sin 0.561 k allocs: 0.0431 MB 0.561 k allocs: 0.0431 MB 1
interval/basics/sinh 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/sqrt 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/tan 0.291 k allocs: 24.4 kB 0.291 k allocs: 24.4 kB 1
interval/basics/tanh 1.03 k allocs: 0.0367 MB 1.03 k allocs: 0.0367 MB 1
time_to_load 0.149 k allocs: 11.2 kB 0.149 k allocs: 11.2 kB 1

@OlivierHnt OlivierHnt self-assigned this Jun 21, 2026
@blegat

blegat commented Aug 21, 2026

Copy link
Copy Markdown
Author

@OlivierHnt kind reminder :)

@OlivierHnt

Copy link
Copy Markdown
Member

I have not forgotten but I do not know the math behind these algorithms so I need to find time to look into that.

Btw I put your fix to disambiguate mul! for Julia v1.10 in #775.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants