
 
 
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