Feature: Polynomials and rational functions #469
@ -6,7 +6,8 @@
|
||||
package space.kscience.kmath.functions
|
||||
|
||||
import space.kscience.kmath.expressions.Symbol
|
||||
import space.kscience.kmath.operations.*
|
||||
import space.kscience.kmath.operations.Ring
|
||||
import space.kscience.kmath.operations.ScaleOperations
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.experimental.ExperimentalTypeInference
|
||||
@ -269,6 +270,13 @@ public class LabeledPolynomialSpace<C, A : Ring<C>>(
|
||||
}
|
||||
)
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to polynomial.
|
||||
*/
|
||||
public override fun number(value: Int): LabeledPolynomial<C> =
|
||||
if (value == 0) zero
|
||||
else LabeledPolynomial(mapOf(emptyMap<Symbol, UInt>() to constantNumber(value)))
|
||||
|
||||
public operator fun C.plus(other: Symbol): LabeledPolynomial<C> =
|
||||
if (isZero()) LabeledPolynomial<C>(mapOf(
|
||||
mapOf(other to 1U) to constantOne,
|
||||
|
@ -5,7 +5,9 @@
|
||||
|
||||
package space.kscience.kmath.functions
|
||||
|
||||
import space.kscience.kmath.operations.*
|
||||
import space.kscience.kmath.operations.Ring
|
||||
import space.kscience.kmath.operations.ScaleOperations
|
||||
import space.kscience.kmath.operations.invoke
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.experimental.ExperimentalTypeInference
|
||||
@ -13,6 +15,7 @@ import kotlin.jvm.JvmName
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
|
||||
/**
|
||||
* Polynomial model without fixation on specific context they are applied to.
|
||||
*
|
||||
@ -193,6 +196,13 @@ public open class ListPolynomialSpace<C, A : Ring<C>>(
|
||||
}
|
||||
)
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to polynomial.
|
||||
*/
|
||||
public override fun number(value: Int): ListPolynomial<C> =
|
||||
if (value == 0) zero
|
||||
else ListPolynomial(constantNumber(value))
|
||||
|
||||
/**
|
||||
* Returns sum of the constant represented as polynomial and the polynomial.
|
||||
*/
|
||||
|
@ -5,7 +5,8 @@
|
||||
|
||||
package space.kscience.kmath.functions
|
||||
|
||||
import space.kscience.kmath.operations.*
|
||||
import space.kscience.kmath.operations.Ring
|
||||
import space.kscience.kmath.operations.ScaleOperations
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.experimental.ExperimentalTypeInference
|
||||
@ -221,6 +222,13 @@ public open class NumberedPolynomialSpace<C, A : Ring<C>>(
|
||||
}
|
||||
)
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to polynomial.
|
||||
*/
|
||||
public override fun number(value: Int): NumberedPolynomial<C> =
|
||||
if (value == 0) zero
|
||||
else NumberedPolynomial(mapOf(emptyList<UInt>() to constantNumber(value)))
|
||||
|
||||
/**
|
||||
* Returns sum of the constant represented as polynomial and the polynomial.
|
||||
*/
|
||||
|
@ -61,6 +61,11 @@ public interface PolynomialSpace<C, P: Polynomial<C>> : Ring<P> {
|
||||
*/
|
||||
public operator fun Int.times(other: C): C
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to constant.
|
||||
*/
|
||||
public fun constantNumber(value: Int): C = constantOne * value
|
||||
|
||||
/**
|
||||
* Returns sum of the polynomial and the integer represented as polynomial.
|
||||
*
|
||||
@ -99,6 +104,11 @@ public interface PolynomialSpace<C, P: Polynomial<C>> : Ring<P> {
|
||||
*/
|
||||
public operator fun Int.times(other: P): P = multiplyBySquaring(other, this)
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to polynomial.
|
||||
*/
|
||||
public fun number(value: Int): P = one * value
|
||||
|
||||
/**
|
||||
* Returns the same constant.
|
||||
*/
|
||||
|
@ -68,6 +68,11 @@ public interface RationalFunctionalSpace<C, P: Polynomial<C>, R: RationalFunctio
|
||||
*/
|
||||
public operator fun Int.times(other: C): C
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to constant.
|
||||
*/
|
||||
public fun constantNumber(value: Int): C = constantOne * value
|
||||
|
||||
/**
|
||||
* Returns sum of the constant and the integer represented as polynomial.
|
||||
*
|
||||
@ -106,6 +111,11 @@ public interface RationalFunctionalSpace<C, P: Polynomial<C>, R: RationalFunctio
|
||||
*/
|
||||
public operator fun Int.times(other: P): P
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to polynomial.
|
||||
*/
|
||||
public fun polynomialNumber(value: Int): P = polynomialOne * value
|
||||
|
||||
/**
|
||||
* Returns sum of the rational function and the integer represented as rational function.
|
||||
*
|
||||
@ -144,6 +154,11 @@ public interface RationalFunctionalSpace<C, P: Polynomial<C>, R: RationalFunctio
|
||||
*/
|
||||
public operator fun Int.times(other: R): R = multiplyBySquaring(other, this)
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to rational function.
|
||||
*/
|
||||
public fun number(value: Int): R = one * value
|
||||
|
||||
/**
|
||||
* Returns the same constant.
|
||||
*/
|
||||
@ -672,6 +687,11 @@ public interface RationalFunctionalSpaceOverPolynomialSpace<
|
||||
*/
|
||||
public override operator fun Int.times(other: P): P = polynomialRing { this@times * other }
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to polynomial.
|
||||
*/
|
||||
public override fun polynomialNumber(value: Int): P = polynomialRing { number(value) }
|
||||
|
||||
/**
|
||||
* Returns the same constant.
|
||||
*/
|
||||
@ -880,7 +900,7 @@ public abstract class PolynomialSpaceOfFractions<
|
||||
P: Polynomial<C>,
|
||||
R: RationalFunction<C, P>,
|
||||
> : RationalFunctionalSpace<C, P, R> {
|
||||
protected abstract fun constructRationalFunction(numerator: P, denominator: P) : R
|
||||
protected abstract fun constructRationalFunction(numerator: P, denominator: P = polynomialOne) : R
|
||||
|
||||
/**
|
||||
* Returns sum of the rational function and the integer represented as rational function.
|
||||
@ -944,6 +964,11 @@ public abstract class PolynomialSpaceOfFractions<
|
||||
other.denominator
|
||||
)
|
||||
|
||||
/**
|
||||
* Converts the integer [value] to rational function.
|
||||
*/
|
||||
public override fun number(value: Int): R = constructRationalFunction(polynomialNumber(value))
|
||||
|
||||
/**
|
||||
* Returns sum of the constant represented as rational function and the rational function.
|
||||
*/
|
||||
@ -1076,10 +1101,10 @@ public abstract class PolynomialSpaceOfFractions<
|
||||
/**
|
||||
* Instance of zero rational function (zero of the rational functions ring).
|
||||
*/
|
||||
public override val zero: R get() = constructRationalFunction(polynomialZero, polynomialOne)
|
||||
public override val zero: R get() = constructRationalFunction(polynomialZero)
|
||||
|
||||
/**
|
||||
* Instance of unit polynomial (unit of the rational functions ring).
|
||||
*/
|
||||
public override val one: R get() = constructRationalFunction(polynomialOne, polynomialOne)
|
||||
public override val one: R get() = constructRationalFunction(polynomialOne)
|
||||
}
|
Loading…
Reference in New Issue
Block a user