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