Polynomial: CEDAR DEFINITIONS = BEGIN Ref: TYPE = REF PolynomialRec; PolynomialRec: TYPE = RECORD [Coeff: SEQUENCE maxDegreePlusOne:NAT OF REAL]; RealRootRec: TYPE = RECORD [nRoots: NAT, realRoot: SEQUENCE n:NAT OF REAL]; ShortRealRootRec: TYPE = RECORD [nRoots: NAT, realRoot: ARRAY [0..5) OF REAL]; DivideResult: TYPE = RECORD [quotient, remainder: Ref]; Create: PROC [maxDegree: NAT] RETURNS [Ref]; -- returns a zero polynomial Degree: PROC [poly: Ref] RETURNS [NAT]; -- for finding what the degree really is Eval: PROC [f: Ref, x: REAL] RETURNS [REAL]; Copy: PROC [dest, source: Ref]; -- MaxDegree[dest] <= Degree[source] Constant: PROC[ARRAY [0..0] OF REAL] RETURNS [Ref]; Linear: PROC[ARRAY [0..1] OF REAL] RETURNS [Ref]; Quadratic: PROC[ARRAY [0..2] OF REAL] RETURNS [Ref]; Cubic: PROC[ARRAY [0..3] OF REAL] RETURNS [Ref]; Quartic: PROC[ARRAY [0..4] OF REAL] RETURNS [Ref]; Quintic: PROC[ARRAY [0..5] OF REAL] RETURNS [Ref]; Add: PROC [dest, source: Ref]; Sum: PROC [a, b: Ref] RETURNS [Ref]; Subtract: PROC [dest, source: Ref]; Difference: PROC [a, b: Ref] RETURNS [Ref]; Product: PROC [a, b: Ref] RETURNS [Ref]; Divide: PROC [a, b: Ref] RETURNS [DivideResult]; DivideByLinear: PROC [f: Ref, c: REAL] RETURNS [value: REAL]; Gcd: PROC [a, b: REF] RETURNS [Ref]; Differentiate: PROC [poly: Ref]; Derivative: PROC [poly: Ref] RETURNS [Ref]; EvalDeriv: PROC [f: Ref, x: REAL] RETURNS [REAL]; Integrate: PROC [poly: Ref]; -- watch out for growing degrees Integral: PROC [poly: Ref] RETURNS [Ref]; EvalIntegral: PROC [f: Ref, x: REAL] RETURNS [REAL]; -- Definite integral from 0 to t RealRoots: PROC [poly: Ref] RETURNS [REF RealRootRec]; CheapRealRoots: PROC [poly: Ref] RETURNS [ShortRealRootRec]; END. t Polynomial.Mesa Copyright Σ 1985, 1992 by Xerox Corporation. All rights reserved. Operations for dealing with univariate polynomials with real coefficients. Michael Plass, August 18, 1983 3:20 pm Tim Diebert May 21, 1985 5:52:03 pm PDT The following are useful for creating polynomials of low degree. replaces f by f DIV (x-c) For when the degree is five or less. Κ€•NewlineDelimiter –(cedarcode) style™šœ™Icodešœ Οeœ6™BJšœJ™JJšœ&™&K™'—K˜KšΟn œΟkœŸ˜%˜KšœŸœŸœ˜K˜šœŸœŸ˜Kš œŸœŸœŸœŸœ˜/—Kšœ ŸœŸœ Ÿœ ŸœŸœŸœŸœ˜KKš œŸœŸœ Ÿœ ŸœŸœŸœ˜NK˜KšœŸœŸœ˜7K˜Kš žœŸœ ŸœŸœΟc˜IK˜Kš žœŸœ ŸœŸœ (˜PK˜Kš žœŸœ ŸœŸœŸœ˜,K˜KšžœŸœ $˜DK˜Jšœ@™@Kš žœŸœŸœŸœŸœŸœ˜3K˜Kš žœŸœŸœŸœŸœŸœ˜1K˜Kš ž œŸœŸœŸœŸœŸœ˜4K˜Kš žœŸœŸœŸœŸœŸœ˜0K˜Kš žœŸœŸœŸœŸœŸœ˜2K˜Kš žœŸœŸœŸœŸœŸœ˜2K˜KšžœŸœ˜K˜KšžœŸœ Ÿœ˜$K˜KšžœŸœ˜#K˜Kšž œŸœ Ÿœ˜+K˜KšžœŸœ Ÿœ˜(K˜KšžœŸœ Ÿœ˜0K˜š žœŸœ ŸœŸœ Ÿœ˜=Jšœ™K˜—KšžœŸœŸœŸœ˜$K˜Kšž œŸœ ˜ K˜Kšž œŸœ Ÿœ˜+K˜Kš ž œŸœ ŸœŸœŸœ˜1K˜Kšž œŸœ  ˜=K˜KšžœŸœ Ÿœ˜)K˜Kš ž œŸœ ŸœŸœŸœ  ˜UK˜Kšž œŸœ ŸœŸœ˜6K˜šžœŸœ Ÿœ˜