| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Implementation of partial fractions. Useful e.g. for fractions of integers and fractions of polynomials. For the considered ring the prime factorization must be unique.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Synopsis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Documentation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
data T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fromFractionSum :: C a => a -> [(a, [a])] -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Unchecked construction. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
toFractionSum :: C a => T a -> (a, [(a, [a])]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
appPrec :: Int | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
toFraction :: C a => T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
toFactoredFraction :: C a => T a -> ([a], a) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C is not really necessary here and only due to invokation of toFraction. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
multiToFraction :: C a => a -> [a] -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C is not really necessary here and only due to invokation of %. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hornerRev :: C a => a -> [a] -> a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fromFactoredFraction :: (C a, C a) => [a] -> a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fromFactoredFraction x y computes the partial fraction representation of y % product x, where the elements of x must be irreducible. There are more direct methods for special cases like polynomials over rational numbers where the denominators are linear factors. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fromFactoredFractionAlt :: (C a, C a) => [a] -> a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
multiFromFraction :: C a => [a] -> a -> (a, [a]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The list of denominators must contain equal elements. Sorry for this hack. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fromValue :: a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reduceHeads :: C a => T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A normalization step which separates the integer part from the leading fraction of each sub-list. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
carryRipple :: C a => a -> [a] -> (a, [a]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cf. Number.Positional | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
normalizeModulo :: C a => T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A normalization step which reduces all elements in sub-lists modulo their denominators. Zeros might be the result, that must be remove with removeZeros. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
removeZeros :: (C a, C a) => T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Remove trailing zeros in sub-lists because if lists are converted to fractions by multiToFraction we must be sure that the denominator of the (cancelled) fraction is indeed the stored power of the irreducible denominator. Otherwise mulFrac leads to wrong results. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
zipWith :: C a => (a -> a -> a) -> ([a] -> [a] -> [a]) -> T a -> T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mulFrac :: C a => T a -> T a -> (a, a) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Transforms a product of two partial fractions into a sum of two fractions. The denominators must be at least relatively prime. Since T requires irreducible denominators, these are also relatively prime. Example: mulFrac (1%6) (1%4) fails because of the common divisor 2. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mulFrac' :: C a => T a -> T a -> (T a, T a) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mulFracStupid :: C a => T a -> T a -> ((T a, T a), T a) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Works always but simply puts the product into the last fraction. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mulFracOverlap :: C a => T a -> T a -> ((T a, T a), T a) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Also works if the operands share a non-trivial divisor. However the results are quite arbitrary. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scaleFrac :: (C a, C a) => T a -> T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Expects an irreducible denominator as associate in standard form. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scaleInt :: (C a, C a) => a -> T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mul :: (C a, C a) => T a -> T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mulFast :: (C a, C a) => T a -> T a -> T a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Helper functions for work with Maps with Indexable keys | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
indexMapMapWithKey :: (a -> b -> c) -> Map (ToOrd a) b -> Map (ToOrd a) c | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
indexMapToList :: Map (ToOrd a) b -> [(a, b)] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
indexMapFromList :: C a => [(a, b)] -> Map (ToOrd a) b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mapApplySplit :: Ord a => a -> (c -> c -> c) -> (b -> c) -> (Map a b -> Map a c) -> Map a b -> Map a c | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Apply a function on a specific element if it exists, and another function to the rest of the map. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Produced by Haddock version 0.7 |