| 31 | | :return (dd) |
| 32 | | :export nil |
| 33 | | :index divided-difference) |
| 34 | | |
| 35 | | (export '(divided-difference)) |
| 36 | | (defun divided-difference (xa ya) |
| 37 | | ;; FDL |
| 38 | | "Compute a divided-difference representation of the |
| 39 | | interpolating polynomial for the points (xa, ya) stored in |
| 40 | | the arrays xa and ya. The output is the |
| 41 | | divided-differences of (xa,ya) stored in an gsl-vector |
| 42 | | of the same length as xa and ya." |
| 43 | | (letm ((xad (vector-double-float xa)) |
| 44 | | (yad (vector-double-float ya))) |
| 45 | | (divided-difference-int |
| 46 | | (make-data 'vector-double-float nil (length xa)) |
| 47 | | xad yad))) |
| | 31 | :return (dd)) |
| 180 | | (letm ((vec (vector-double-float #(1.0d0 2.0d0 3.0d0)))) |
| 181 | | (polynomial-eval vec -1.0d0)) |
| 182 | | (solve-quadratic 1.0d0 0.0d0 1.0d0) |
| 183 | | (solve-quadratic 1.0d0 -2.0d0 1.0d0) |
| 184 | | (solve-quadratic-complex 1.0d0 -2.0d0 1.0d0) |
| 185 | | (solve-cubic -6.0d0 -13.0d0 42.0d0) |
| 186 | | (solve-cubic-complex -1.0d0 1.0d0 -1.0d0) |
| 187 | | ;; Example from GSL manual |
| 188 | | (polynomial-solve #(-1.0d0 0.0d0 0.0d0 0.0d0 0.0d0 1.0d0))) |
| | 164 | (letm ((xa (vector-double-float #(0.0d0 1.0d0 2.0d0 3.0d0))) |
| | 165 | (ya (vector-double-float #(2.5d0 7.2d0 32.7d0 91.0d0))) |
| | 166 | (dd (vector-double-float 4))) |
| | 167 | (divided-difference dd xa ya) |
| | 168 | (list |
| | 169 | (polynomial-eval-divided-difference dd xa 0.0d0) |
| | 170 | (polynomial-eval-divided-difference dd xa 1.0d0) |
| | 171 | (polynomial-eval-divided-difference dd xa 2.0d0) |
| | 172 | (polynomial-eval-divided-difference dd xa 3.0d0))) |
| | 173 | (letm ((vec (vector-double-float #(1.0d0 2.0d0 3.0d0)))) |
| | 174 | (polynomial-eval vec -1.0d0)) |
| | 175 | (solve-quadratic 1.0d0 0.0d0 1.0d0) |
| | 176 | (solve-quadratic 1.0d0 -2.0d0 1.0d0) |
| | 177 | (solve-quadratic-complex 1.0d0 -2.0d0 1.0d0) |
| | 178 | (solve-cubic -6.0d0 -13.0d0 42.0d0) |
| | 179 | (solve-cubic-complex -1.0d0 1.0d0 -1.0d0) |
| | 180 | ;; Example from GSL manual |
| | 181 | (polynomial-solve #(-1.0d0 0.0d0 0.0d0 0.0d0 0.0d0 1.0d0))) |
| | 185 | (LISP-UNIT::ASSERT-NUMERICAL-EQUAL |
| | 186 | (LIST (LIST 2.5d0 7.2d0 32.7d0 91.0d0)) |
| | 187 | (MULTIPLE-VALUE-LIST |
| | 188 | (LETM |
| | 189 | ((XA (VECTOR-DOUBLE-FLOAT #(0.0d0 1.0d0 2.0d0 3.0d0))) |
| | 190 | (YA (VECTOR-DOUBLE-FLOAT #(2.5d0 7.2d0 32.7d0 91.0d0))) |
| | 191 | (DD (VECTOR-DOUBLE-FLOAT 4))) |
| | 192 | (DIVIDED-DIFFERENCE DD XA YA) |
| | 193 | (LIST |
| | 194 | (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 0.0d0) |
| | 195 | (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 1.0d0) |
| | 196 | (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 2.0d0) |
| | 197 | (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 3.0d0))))) |