http://mathling.com/type/polynomial/quotient library module
http://mathling.com/type/polynomial/quotient
One polynomial divided by another. The polynomial may be use real-values or
complex-valued coefficients. We attempt to simplify down where possible.
Copyright© Mary Holstege 2023
CC-BY (https://creativecommons.org/licenses/by/4.0/)
Status: Bleeding edge
Imports
http://mathling.com/core/utilitiesimport module namespace util="http://mathling.com/core/utilities" at "../core/utilities.xqy"http://mathling.com/type/polynomial
import module namespace poly="http://mathling.com/type/polynomial" at "../types/polynomial.xqy"http://mathling.com/type/polynomial/complex
import module namespace zpoly="http://mathling.com/type/polynomial/complex" at "../types/cpolynomial.xqy"http://mathling.com/core/errors
import module namespace errors="http://mathling.com/core/errors" at "../core/errors.xqy"
Functions
Function: quotient
declare function quotient($u as map(xs:string,item()*),
$v as map(xs:string,item()*)) as map(xs:string,item()*)
declare function quotient($u as map(xs:string,item()*), $v as map(xs:string,item()*)) as map(xs:string,item()*)
Params
- u as map(xs:string,item()*)
- v as map(xs:string,item()*)
Returns
- map(xs:string,item()*)
declare function this:quotient( $u as map(xs:string,item()*), $v as map(xs:string,item()*) ) as map(xs:string,item()*) { if (util:kind($v)="polynomial" and poly:is-constant($v)) then ( (: u / constant :) $u=>poly:times(1 div poly:as-real($v)) ) else if (util:kind($v)="complex-polynomial" and zpoly:is-real($v)) then ( this:quotient($u, zpoly:as-real-polynomial($v)) ) else if (util:kind($u)="complex-polynomial" and zpoly:is-real($u)) then ( this:quotient(zpoly:as-real-polynomial($u), $v) ) else ( map { "kind": "polynomial-quotient", "u": $u, "v": $v } ) }
Function: u
declare function u($poly as map(xs:string,item()*)) as map(xs:string,item()*)
declare function u($poly as map(xs:string,item()*)) as map(xs:string,item()*)
Params
- poly as map(xs:string,item()*)
Returns
- map(xs:string,item()*)
declare function this:u($poly as map(xs:string,item()*)) as map(xs:string,item()*) { $poly("u") }
Function: v
declare function v($poly as map(xs:string,item()*)) as map(xs:string,item()*)
declare function v($poly as map(xs:string,item()*)) as map(xs:string,item()*)
Params
- poly as map(xs:string,item()*)
Returns
- map(xs:string,item()*)
declare function this:v($poly as map(xs:string,item()*)) as map(xs:string,item()*) { $poly("v") }
Original Source Code
xquery version "3.1"; (:~ : One polynomial divided by another. The polynomial may be use real-values or : complex-valued coefficients. We attempt to simplify down where possible. : : Copyright© Mary Holstege 2023 : CC-BY (https://creativecommons.org/licenses/by/4.0/) : @since May 2022 : @custom:Status Bleeding edge :) module namespace this="http://mathling.com/type/polynomial/quotient"; import module namespace errors="http://mathling.com/core/errors" at "../core/errors.xqy"; import module namespace util="http://mathling.com/core/utilities" at "../core/utilities.xqy"; import module namespace poly="http://mathling.com/type/polynomial" at "../types/polynomial.xqy"; import module namespace zpoly="http://mathling.com/type/polynomial/complex" at "../types/cpolynomial.xqy"; declare namespace map="http://www.w3.org/2005/xpath-functions/map"; declare namespace math="http://www.w3.org/2005/xpath-functions/math"; (: : quotient() : One polynomial divided by another: e.g. (2x³-x²+3)/(4x²-5x+1) : The polynomials may have either real or complex values. : : $u: one polynomial : $v: another polynomial :) declare function this:quotient( $u as map(xs:string,item()*), $v as map(xs:string,item()*) ) as map(xs:string,item()*) { if (util:kind($v)="polynomial" and poly:is-constant($v)) then ( (: u / constant :) $u=>poly:times(1 div poly:as-real($v)) ) else if (util:kind($v)="complex-polynomial" and zpoly:is-real($v)) then ( this:quotient($u, zpoly:as-real-polynomial($v)) ) else if (util:kind($u)="complex-polynomial" and zpoly:is-real($u)) then ( this:quotient(zpoly:as-real-polynomial($u), $v) ) else ( map { "kind": "polynomial-quotient", "u": $u, "v": $v } ) }; declare function this:u($poly as map(xs:string,item()*)) as map(xs:string,item()*) { $poly("u") }; declare function this:v($poly as map(xs:string,item()*)) as map(xs:string,item()*) { $poly("v") };