Skip to content

Improved matrix exponential for real matrices#746

Open
BaronNashville wants to merge 1 commit intoJuliaIntervals:masterfrom
BaronNashville:master
Open

Improved matrix exponential for real matrices#746
BaronNashville wants to merge 1 commit intoJuliaIntervals:masterfrom
BaronNashville:master

Conversation

@BaronNashville
Copy link

The exponential of some real interval matrices outputted complex intervals. Added a check to rule that case out.

@github-actions
Copy link
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master 5fe89c0... master / 5fe89c0...
BigFloat MPFI/basics/* 25.3 ± 4 μs 24.8 ± 4 μs 1.02 ± 0.23
BigFloat MPFI/basics/+ 13.1 ± 4.1 μs 12.6 ± 4.1 μs 1.04 ± 0.47
BigFloat MPFI/basics/- 17 ± 3.9 μs 17.5 ± 4 μs 0.972 ± 0.31
BigFloat MPFI/basics// 19.3 ± 4 μs 19 ± 4.1 μs 1.02 ± 0.31
BigFloat MPFI/basics/abs 10.3 ± 3.8 μs 11.1 ± 4 μs 0.934 ± 0.48
BigFloat MPFI/basics/acos 0.67 ± 0.0089 ms 0.671 ± 0.0084 ms 0.998 ± 0.018
BigFloat MPFI/basics/asin 0.66 ± 0.0094 ms 0.659 ± 0.012 ms 1 ± 0.023
BigFloat MPFI/basics/atan 2.07 ± 0.01 ms 2.07 ± 0.0076 ms 1 ± 0.0061
BigFloat MPFI/basics/cos 0.355 ± 0.0094 ms 0.356 ± 0.0093 ms 0.997 ± 0.037
BigFloat MPFI/basics/cosh 0.426 ± 0.012 ms 0.426 ± 0.012 ms 1 ± 0.038
BigFloat MPFI/basics/exp 0.499 ± 0.01 ms 0.498 ± 0.011 ms 1 ± 0.03
BigFloat MPFI/basics/inv 18.7 ± 3.9 μs 19.3 ± 4 μs 0.97 ± 0.28
BigFloat MPFI/basics/log 0.468 ± 0.011 ms 0.468 ± 0.0089 ms 1 ± 0.03
BigFloat MPFI/basics/sin 0.458 ± 0.01 ms 0.458 ± 0.01 ms 1 ± 0.031
BigFloat MPFI/basics/sinh 0.576 ± 0.0099 ms 0.576 ± 0.0098 ms 1 ± 0.024
BigFloat MPFI/basics/sqrt 28.8 ± 7.9 μs 29.1 ± 7.9 μs 0.99 ± 0.38
BigFloat MPFI/basics/tan 0.38 ± 0.0098 ms 0.381 ± 0.01 ms 0.997 ± 0.037
BigFloat MPFI/basics/tanh 0.58 ± 0.01 ms 0.579 ± 0.01 ms 1 ± 0.025
BigFloat bareinterval/basics/* 0.0446 ± 0.0026 ms 0.043 ± 0.0025 ms 1.04 ± 0.086
BigFloat bareinterval/basics/+ 23.8 ± 3.7 μs 24.4 ± 3.7 μs 0.973 ± 0.21
BigFloat bareinterval/basics/- 23.6 ± 3.7 μs 24 ± 3.8 μs 0.981 ± 0.22
BigFloat bareinterval/basics// 20.7 ± 5.8 μs 20.9 ± 5.7 μs 0.99 ± 0.39
BigFloat bareinterval/basics/abs 16.8 ± 3.5 μs 16.7 ± 3.6 μs 1.01 ± 0.3
BigFloat bareinterval/basics/acos 0.708 ± 0.02 ms 0.709 ± 0.028 ms 0.999 ± 0.049
BigFloat bareinterval/basics/asin 0.689 ± 0.023 ms 0.695 ± 0.026 ms 0.991 ± 0.049
BigFloat bareinterval/basics/atan 2.09 ± 0.0091 ms 2.1 ± 0.0072 ms 0.992 ± 0.0055
BigFloat bareinterval/basics/cos 0.337 ± 0.098 ms 0.339 ± 0.099 ms 0.993 ± 0.41
BigFloat bareinterval/basics/cosh 0.468 ± 0.028 ms 0.468 ± 0.028 ms 1 ± 0.085
BigFloat bareinterval/basics/exp 0.508 ± 0.011 ms 0.507 ± 0.01 ms 1 ± 0.029
BigFloat bareinterval/basics/inv 26.5 ± 3.6 μs 27.1 ± 3.7 μs 0.978 ± 0.19
BigFloat bareinterval/basics/log 0.514 ± 0.034 ms 0.518 ± 0.034 ms 0.993 ± 0.092
BigFloat bareinterval/basics/sin 0.471 ± 0.1 ms 0.471 ± 0.1 ms 0.999 ± 0.3
BigFloat bareinterval/basics/sinh 0.584 ± 0.012 ms 0.583 ± 0.011 ms 1 ± 0.028
BigFloat bareinterval/basics/sqrt 0.0381 ± 0.003 ms 0.038 ± 0.0029 ms 1 ± 0.11
BigFloat bareinterval/basics/tan 0.332 ± 0.065 ms 0.332 ± 0.065 ms 0.999 ± 0.28
BigFloat bareinterval/basics/tanh 0.591 ± 0.012 ms 0.591 ± 0.011 ms 1 ± 0.027
BigFloat interval/basics/* 0.0484 ± 0.0023 ms 0.0464 ± 0.0021 ms 1.04 ± 0.069
BigFloat interval/basics/+ 26.7 ± 9.4 μs 27 ± 9.7 μs 0.988 ± 0.5
BigFloat interval/basics/- 27 ± 9.6 μs 26.7 ± 9.6 μs 1.01 ± 0.51
BigFloat interval/basics// 25.7 ± 5.6 μs 25.8 ± 5.6 μs 0.995 ± 0.3
BigFloat interval/basics/abs 16.1 ± 9.1 μs 16.1 ± 9.1 μs 0.996 ± 0.8
BigFloat interval/basics/acos 0.699 ± 0.051 ms 0.704 ± 0.052 ms 0.993 ± 0.1
BigFloat interval/basics/asin 0.681 ± 0.042 ms 0.683 ± 0.042 ms 0.997 ± 0.087
BigFloat interval/basics/atan 2.09 ± 0.008 ms 2.11 ± 0.006 ms 0.99 ± 0.0047
BigFloat interval/basics/cos 0.333 ± 0.015 ms 0.335 ± 0.013 ms 0.994 ± 0.059
BigFloat interval/basics/cosh 0.459 ± 0.027 ms 0.46 ± 0.026 ms 0.999 ± 0.082
BigFloat interval/basics/exp 0.514 ± 0.011 ms 0.514 ± 0.01 ms 1 ± 0.029
BigFloat interval/basics/inv 30.9 ± 8.2 μs 31.4 ± 8.6 μs 0.982 ± 0.37
BigFloat interval/basics/log 0.505 ± 0.051 ms 0.508 ± 0.05 ms 0.994 ± 0.14
BigFloat interval/basics/sin 0.479 ± 0.023 ms 0.478 ± 0.016 ms 1 ± 0.06
BigFloat interval/basics/sinh 0.59 ± 0.011 ms 0.59 ± 0.01 ms 1 ± 0.025
BigFloat interval/basics/sqrt 0.0432 ± 0.036 ms 0.0423 ± 0.036 ms 1.02 ± 1.2
BigFloat interval/basics/tan 0.278 ± 0.015 ms 0.279 ± 0.014 ms 0.997 ± 0.075
BigFloat interval/basics/tanh 0.598 ± 0.012 ms 0.598 ± 0.011 ms 1 ± 0.027
bareinterval/basics/* 1.95 ± 0.04 μs 1.99 ± 0.041 μs 0.98 ± 0.028
bareinterval/basics/+ 0.531 ± 0.01 μs 0.531 ± 0.02 μs 1 ± 0.042
bareinterval/basics/- 0.551 ± 0.01 μs 0.551 ± 0.011 μs 1 ± 0.027
bareinterval/basics// 1.22 ± 0.04 μs 1.23 ± 0.02 μs 0.992 ± 0.036
bareinterval/basics/abs 0.231 ± 0.01 μs 0.211 ± 0.02 μs 1.09 ± 0.11
bareinterval/basics/acos 2.93 ± 0.039 μs 2.89 ± 0.03 μs 1.01 ± 0.017
bareinterval/basics/asin 3.18 ± 0.03 μs 3.16 ± 0.021 μs 1.01 ± 0.012
bareinterval/basics/atan 13 ± 0.21 μs 13 ± 0.2 μs 0.999 ± 0.022
bareinterval/basics/cos 0.0492 ± 0.01 ms 0.0493 ± 0.011 ms 0.999 ± 0.3
bareinterval/basics/cosh 7.28 ± 0.07 μs 7.26 ± 0.031 μs 1 ± 0.011
bareinterval/basics/exp 4.33 ± 0.059 μs 4.31 ± 0.05 μs 1 ± 0.018
bareinterval/basics/inv 1.1 ± 0.04 μs 1.07 ± 0.02 μs 1.03 ± 0.042
bareinterval/basics/log 6.48 ± 0.03 μs 2.11 ± 0.01 μs 3.07 ± 0.02
bareinterval/basics/sin 0.0484 ± 0.021 ms 0.0485 ± 0.021 ms 0.998 ± 0.61
bareinterval/basics/sinh 9.99 ± 0.059 μs 9.99 ± 0.069 μs 1 ± 0.0091
bareinterval/basics/sqrt 1.2 ± 0.03 μs 1.18 ± 0.021 μs 1.02 ± 0.031
bareinterval/basics/tan 28.5 ± 0.29 μs 28.4 ± 0.25 μs 1 ± 0.014
bareinterval/basics/tanh 0.292 ± 0.0086 ms 0.288 ± 0.0084 ms 1.02 ± 0.042
interval/basics/* 3.24 ± 0.071 μs 3.22 ± 0.07 μs 1.01 ± 0.031
interval/basics/+ 1.52 ± 0.09 μs 1.49 ± 0.061 μs 1.02 ± 0.073
interval/basics/- 1.53 ± 0.1 μs 1.53 ± 0.061 μs 1 ± 0.076
interval/basics// 2.48 ± 0.08 μs 2.46 ± 0.061 μs 1.01 ± 0.041
interval/basics/abs 0.971 ± 0.13 μs 0.941 ± 0.12 μs 1.03 ± 0.19
interval/basics/acos 5.02 ± 0.06 μs 4.99 ± 0.06 μs 1.01 ± 0.017
interval/basics/asin 5.16 ± 0.06 μs 5.16 ± 0.051 μs 1 ± 0.015
interval/basics/atan 14.8 ± 0.21 μs 14.9 ± 0.2 μs 0.989 ± 0.019
interval/basics/cos 0.07 ± 0.022 ms 0.0696 ± 0.022 ms 1.01 ± 0.45
interval/basics/cosh 10.3 ± 0.08 μs 10.3 ± 0.08 μs 1 ± 0.011
interval/basics/exp 6.68 ± 0.1 μs 6.65 ± 0.1 μs 1 ± 0.021
interval/basics/inv 2.05 ± 0.09 μs 2.05 ± 0.06 μs 1 ± 0.053
interval/basics/log 4.96 ± 0.069 μs 4.93 ± 0.05 μs 1.01 ± 0.017
interval/basics/sin 0.0691 ± 0.023 ms 0.0694 ± 0.023 ms 0.995 ± 0.46
interval/basics/sinh 13.2 ± 0.071 μs 13.2 ± 0.079 μs 0.999 ± 0.0081
interval/basics/sqrt 2.12 ± 0.06 μs 2.12 ± 0.051 μs 1 ± 0.037
interval/basics/tan 0.0398 ± 0.0021 ms 0.0398 ± 0.0021 ms 1 ± 0.074
interval/basics/tanh 0.305 ± 0.0081 ms 0.302 ± 0.0086 ms 1.01 ± 0.039
time_to_load 0.105 ± 0.0023 s 0.106 ± 0.00043 s 0.995 ± 0.022
Memory benchmarks
master 5fe89c0... master / 5fe89c0...
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.33 k allocs: 0.0741 MB 1.33 k allocs: 0.0741 MB 1
BigFloat bareinterval/basics/asin 1.23 k allocs: 0.0647 MB 1.23 k allocs: 0.0647 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.804 k allocs: 0.0694 MB 0.804 k allocs: 0.0694 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.304 k allocs: 29.9 kB 0.304 k allocs: 29.9 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.77 k allocs: 0.115 MB 1.77 k allocs: 0.115 MB 1
BigFloat interval/basics/asin 1.53 k allocs: 0.0933 MB 1.53 k allocs: 0.0929 MB 1
BigFloat interval/basics/atan 2.04 k allocs: 0.0812 MB 2.04 k allocs: 0.0811 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.068 MB 1
BigFloat interval/basics/exp 0.803 k allocs: 0.0408 MB 0.803 k allocs: 0.0408 MB 1
BigFloat interval/basics/inv 0.199 k allocs: 20.8 kB 0.199 k allocs: 20.8 kB 1
BigFloat interval/basics/log 1.1 k allocs: 0.0977 MB 1.1 k allocs: 0.0977 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.0417 MB 0.816 k allocs: 0.0418 MB 0.999
BigFloat interval/basics/sqrt 0.758 k allocs: 0.0715 MB 0.758 k allocs: 0.0715 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.0409 MB 0.809 k allocs: 0.0409 MB 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// 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.145 k allocs: 11 kB 0.145 k allocs: 11 kB 1

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.

1 participant