Advertisement
Guest User

Untitled

a guest
Jul 24th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. (declaim (inline b-spline))
  2. (defun b-spline (i m u nodes)
  3. (declare
  4. (type fixnum i)
  5. (type fixnum m)
  6. (type double-float u)
  7. (type (simple-array double-float) nodes)
  8. (optimize (debug 0) (safety 0) (speed 3)))
  9. (if (= m 1)
  10. (/ 1.0d0 (- (aref nodes i) (aref nodes (- i 1))))
  11. (let ((b1 (if (and (>= u (aref nodes (- i m))) (< u (aref nodes (- i 1))))
  12. (* (- u (aref nodes (- i m))) (b-spline (- i 1) (- m 1) u nodes))
  13. 0.0d0))
  14. (b2 (if (and (>= u (aref nodes (- i m -1))) (< u (aref nodes i)))
  15. (* (- (aref nodes i) u) (b-spline i (- m 1) u nodes))
  16. 0.0d0)))
  17. (declare (type double-float b1 b2))
  18. (/ (+ b1 b2) (- (aref nodes i) (aref nodes (- i m)))))))
  19.  
  20. (defparameter number-of-nodes 11)
  21. (defparameter nodes (make-array number-of-nodes :element-type 'double-float :initial-element 0.0d0))
  22. (defparameter min-u 0.0d0)
  23. (defparameter max-u 1.0d0)
  24. (defparameter du (/ (- max-u min-u) (- number-of-nodes 1)))
  25.  
  26. (let ((u min-u))
  27. (loop for i from 0 below number-of-nodes
  28. do
  29. (format t "u = ~a~%" u)
  30. (setf (aref nodes i) u)
  31. (incf u du)))
  32.  
  33. (defparameter number-of-steps 10000000)
  34.  
  35. (time
  36. (let ((u min-u)
  37. (du (/ (- max-u min-u) (- number-of-steps 1))))
  38. (declare
  39. (type fixnum number-of-steps)
  40. (type double-float u du)
  41. (type (simple-array double-float) nodes))
  42. (loop for i fixnum from 0 below number-of-steps
  43. do
  44. (b-spline 4 4 u nodes)
  45. (incf u du))))
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement