|
1 | 1 | #:include "common.fypp"
|
2 |
| -#:set RCI_KINDS_TYPES = REAL_KINDS_TYPES + CMPLX_KINDS_TYPES + INT_KINDS_TYPES |
| 2 | +#:set RC_KINDS_TYPES = REAL_KINDS_TYPES + CMPLX_KINDS_TYPES |
| 3 | +#:set RCI_KINDS_TYPES = RC_KINDS_TYPES + INT_KINDS_TYPES |
3 | 4 | module stdlib_linalg
|
4 | 5 | !!Provides a support for various linear algebra procedures
|
5 | 6 | !! ([Specification](../page/specs/stdlib_linalg.html))
|
6 |
| - use stdlib_kinds, only: sp, dp, xdp, qp, & |
| 7 | + use stdlib_kinds, only: sp, dp, xdp, qp, lk, & |
7 | 8 | int8, int16, int32, int64
|
8 | 9 | use stdlib_error, only: error_stop
|
9 | 10 | use stdlib_optval, only: optval
|
10 | 11 | use stdlib_linalg_state, only: linalg_state_type, linalg_error_handling
|
11 |
| - use stdlib_linalg_determinant, only: det |
12 | 12 | implicit none
|
13 | 13 | private
|
14 | 14 |
|
15 | 15 | public :: det
|
| 16 | + public :: operator(.det.) |
16 | 17 | public :: diag
|
17 | 18 | public :: eye
|
18 | 19 | public :: trace
|
@@ -220,6 +221,92 @@ module stdlib_linalg
|
220 | 221 | #:endfor
|
221 | 222 | end interface is_hessenberg
|
222 | 223 |
|
| 224 | + |
| 225 | + interface det |
| 226 | + !!### Summary |
| 227 | + !! Interface for computing matrix determinant. |
| 228 | + !! |
| 229 | + !!### Description |
| 230 | + !! |
| 231 | + !! This interface provides methods for computing the determinant of a matrix. |
| 232 | + !! Supported data types include real and complex. |
| 233 | + !! |
| 234 | + !!@note The provided functions are intended for square matrices. |
| 235 | + !! |
| 236 | + !!### Example |
| 237 | + !! |
| 238 | + !!```fortran |
| 239 | + !! |
| 240 | + !! real(sp) :: a(3,3), d |
| 241 | + !! type(linalg_state_type) :: state |
| 242 | + !! a = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3]) |
| 243 | + !! |
| 244 | + !! d = det(a,err=state) |
| 245 | + !! if (state%ok()) then |
| 246 | + !! print *, 'Success! det=',d |
| 247 | + !! else |
| 248 | + !! print *, state%print() |
| 249 | + !! endif |
| 250 | + !! |
| 251 | + !!``` |
| 252 | + !! |
| 253 | + #:for rk,rt in RC_KINDS_TYPES |
| 254 | + #:if rk!="xdp" |
| 255 | + module function stdlib_linalg_${rt[0]}$${rk}$determinant(a,overwrite_a,err) result(det) |
| 256 | + !> Input matrix a[m,n] |
| 257 | + ${rt}$, intent(inout), target :: a(:,:) |
| 258 | + !> [optional] Can A data be overwritten and destroyed? |
| 259 | + logical(lk), optional, intent(in) :: overwrite_a |
| 260 | + !> State return flag. |
| 261 | + type(linalg_state_type), intent(out) :: err |
| 262 | + !> Matrix determinant |
| 263 | + ${rt}$ :: det |
| 264 | + end function stdlib_linalg_${rt[0]}$${rk}$determinant |
| 265 | + module function stdlib_linalg_pure_${rt[0]}$${rk}$determinant(a) result(det) |
| 266 | + !> Input matrix a[m,n] |
| 267 | + ${rt}$, intent(in) :: a(:,:) |
| 268 | + !> Matrix determinant |
| 269 | + ${rt}$ :: det |
| 270 | + end function stdlib_linalg_pure_${rt[0]}$${rk}$determinant |
| 271 | + |
| 272 | + #:endif |
| 273 | + #:endfor |
| 274 | + end interface det |
| 275 | + |
| 276 | + interface operator(.det.) |
| 277 | + !!### Summary |
| 278 | + !! Pure operator interface for computing matrix determinant. |
| 279 | + !! |
| 280 | + !!### Description |
| 281 | + !! |
| 282 | + !! This pure operator interface provides a convenient way to compute the determinant of a matrix. |
| 283 | + !! Supported data types include real and complex. |
| 284 | + !! |
| 285 | + !!@note The provided functions are intended for square matrices. |
| 286 | + !! |
| 287 | + !!### Example |
| 288 | + !! |
| 289 | + !!```fortran |
| 290 | + !! |
| 291 | + !! real(sp) :: matrix(3,3), d |
| 292 | + !! matrix = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3]) |
| 293 | + !! d = .det.matrix |
| 294 | + !! |
| 295 | + !!``` |
| 296 | + ! |
| 297 | + #:for rk,rt in RC_KINDS_TYPES |
| 298 | + #:if rk!="xdp" |
| 299 | + module function stdlib_linalg_pure_${rt[0]}$${rk}$determinant(a) result(det) |
| 300 | + !> Input matrix a[m,n] |
| 301 | + ${rt}$, intent(in) :: a(:,:) |
| 302 | + !> Matrix determinant |
| 303 | + ${rt}$ :: det |
| 304 | + end function stdlib_linalg_pure_${rt[0]}$${rk}$determinant |
| 305 | + #:endif |
| 306 | + #:endfor |
| 307 | + end interface operator(.det.) |
| 308 | + |
| 309 | + |
223 | 310 | contains
|
224 | 311 |
|
225 | 312 |
|
|
0 commit comments