Source code for svise.quadrature._quadrature

from typing import Callable, List, Union, Tuple
import torch
import numpy as np
from torch import Tensor
from torch.fft import fft
import math
from ..extern import fastgl


[docs]def gauss_legendre_vecs( N: int, a: float = -1.0, b: float = 1.0, dtype: torch.dtype = None, ) -> Tuple[Tensor, Tensor]: """ Returns the gauss-legendre quadrature weights and nodes provided by fastgl (see svise/extern for LICENSE and details) Args: N (int): Number of integration nodes dtype (torch.dtype, optional): Return data type. Defaults to torch.float32. Returns: (dtype, dtype): integration weights, integration nodes """ if dtype == None: dtype = torch.get_default_dtype() x = [] w = [] for j in range(1, N + 1): _, wt, xt = fastgl.glpair(N, j) w.append(wt) x.append(xt) wq = torch.tensor(w, dtype=dtype) * (b - a) / 2 xq = torch.tensor(x, dtype=dtype) * (b - a) / 2 + (a + b) / 2 return (wq, xq)
[docs]def trapezoidal_vecs( N: int, a: float = -1.0, b: float = 1.0, dtype: torch.dtype = None, ) -> Tuple[Tensor, Tensor]: """ Returns the trapezoidal qudrature weights and nodes Args: N (int): Number of integration nodes a (float, optional): Start of interval. Defaults to -1.0. b (float, optional): End of interval. Defaults to 1.0. dtype (torch.dtype, optional): Return data type. Defaults to torch.float32. Returns: (dtype, dtype): integration weights, integration nodes """ if dtype == None: dtype = torch.get_default_dtype() x = torch.linspace(a, b, N, dtype=dtype) w = torch.ones(N, dtype=dtype) w[0] = w[0] * 0.5 w[-1] = w[-1] * 0.5 w = (b - a) / (N - 1) * w return (w, x)