Utilisation de cl-plplot avec sbcl.
Documentation
Ici la fonction f est définie par 3 fonctions fln1, fln2 et fln3 affines sur les intervalles [-5 -3], [-3 1] et [1 4]
respectivement,
donc l'intervalle de definition de f est l'intervalle [-5 4].
Avec do
Avec la boucle dotimes
(use-package :cl-plplot-system)
(defparameter flin1 #'(lambda (x) (* 2 (+ x 5))))
(defparameter flin2 #'(lambda (x) (- 1.75 (* 0.75 x))))
(defparameter flin3 #'(lambda (x) (* 1 x)))
;; (defparameter gdev "xwin")
;; (defparameter gdev "xfig")
(defparameter gdev "png")
(defun my-make-array (dims)
(make-array dims :initial-element 0.0 :element-type 'float))
(defun display-curve (a1 a2 func)
(let* ((n (round (* 10 (abs a1))))
(nab (round (* 10 (abs (- a2 a1)))))
(x (my-make-array nab))
(y (my-make-array nab)))
(dotimes (i nab)
(cond ((< a1 0)
(let ((tmp (* 0.1 (- i n))))
(setf (aref x i) tmp)
(setf (aref y i) (funcall func tmp))))
(t (let ((tmp (* 0.1 (+ i n))))
(setf (aref x i) tmp)
(setf (aref y i) (funcall func tmp))))))
(plcol0 3) ;;
couleur de la courbe
(plline x y)))
(defun affine-fn (a b) ;; la fonction est definie sur l'intervalle [a b].
(plsdev gdev)
;; (plsfnam "linear3.fig")
(plsfnam "aff3.png")
(plinit)
(plcol0 1)
(plwid 2)
(plenv a b 0 5 0 2)
(plbox "g" 1 0 "g" 1 0)
(plcol0 2)
(pllab "x" "y" "linear function by intervals")
(display-curve -5 -2.9 flin1)
(display-curve -3 1.1 flin2)
(display-curve 1 4.1 flin3)
;; (plcol0 3)
(plend))
(affine-fn -5 4)
;; (run-program "/usr/bin/xfig" '("-nosp" "linear3.fig"))
(run-program "/usr/bin/display" '("aff3.png"))
Avec dotimes
Avec la boucle do
(use-package :cl-plplot-system)
(defparameter flin1 #'(lambda (x) (* 2 (+ x 5))))
(defparameter flin2 #'(lambda (x) (- 1.75 (* 0.75 x))))
(defparameter flin3 #'(lambda (x) (* 1 x)))
;; (defparameter gdev "xwin")
;; (defparameter gdev "xfig")
(defparameter gdev "png")
(defun my-make-array (dims)
(make-array dims :initial-element 0.0 :element-type 'float))
(defun display-curve (a1 a2 func)
(let* ((nab (round (* 10 (abs (- a2 a1)))))
(x (my-make-array nab))
(y (my-make-array nab)))
(do ((i 0 (1+ i)) (xax a1 (+ 0.1 xax)))((> i (1- nab)))
(setf (aref x i) xax)
(setf (aref y i) (funcall func xax)))
(plcol0 3) ;; couleur de la courbe
(plline x y)))
(defun affine-fn (a b) ;; la fonction est definie sur l'intervalle [a b]
(plsdev gdev)
(plsfnam "aff44.png")
(plinit)
(plcol0 1)
(plwid 2)
(plenv a b 0 5 0 2)
(plbox "g" 1 0 "g" 1 0)
(plcol0 2)
(pllab "x" "y" "linear function by intervals")
(display-curve -5 -2.9 flin1)
(display-curve -3 1.1 flin2)
(display-curve 1 4.1 flin3)
(plend))
(affine-fn -5 4)
;; (cl-user::run-program "/usr/bin/xfig" '("-nosp" "linear.fig"))
(run-program "/usr/bin/display" '("aff44.png"))
Haut de page