Polynomial: 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]; 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]; END. ÊPolynomial.Mesa Operations for dealing with univariate polynomials with real coefficients. Michael Plass The following are useful for creating polynomials of low degree. replaces f by f DIV (x-c) Ê5˜Jšœ™JšœJ™JJšœ ™ J˜Jšœ Ïk œ˜Jš˜J˜Jšœœœ˜J˜šœœ˜Jš œœœœœ˜/J˜—Jšœ œœ œ œœœœ˜KJ˜Jšœœœ˜7J˜Jš Ïnœœ œœÏc˜IJ˜Jš žœœ œœŸ(˜PJ˜Jš žœœ œœœ˜,J˜JšžœœŸ$˜DJ˜Jšœ@™@Jš žœœœœœœ˜3J˜Jš žœœœœœœ˜1J˜Jš ž œœœœœœ˜4J˜Jš žœœœœœœ˜0J˜Jš žœœœœœœ˜2J˜Jš žœœœœœœ˜2J˜Jšžœœ˜J˜Jšžœœ œ˜$J˜Jšžœœ˜#J˜Jšž œœ œ˜+J˜Jšžœœ œ˜(J˜Jšžœœ œ˜0J˜š žœœ œœ œ˜=Jšœ™J˜—Jšžœœœœ˜$J˜Jšž œœ ˜ J˜Jšž œœ œ˜+J˜Jš ž œœ œœœ˜1J˜Jšž œœŸ ˜=J˜Jšžœœ œ˜)J˜Jš ž œœ œœœŸ ˜UJ˜Jšž œœ œœ˜6J˜Jšœ˜—…—: 9