(in-package :maxima)
#|
$plot2d に trace(C-c C-t) をかけておき、
plot2d(x^2, [x, -5, 5]); を実行すると
こんな引数で呼ばれるのが分かる。
  0: ($PLOT2D ((MEXPT SIMP) $X 2) ((MLIST SIMP) $X -5 5))
  0: $PLOT2D returned ""
|#
;; quit(); で Maxima からぬけて、
;; 2つの引数に ' を付けて実行すると、グラフが表示された。
($PLOT2D '((MEXPT SIMP) $X 2) '((MLIST SIMP) $X -5 5))
#|
http://cosmo.phys.hirosaki-u.ac.jp/wiki.cgi/maxima?page=Maxima+%A4%C7%A4%CE%A5%B0%A5%E9%A5%D5%C9%BD%BC%A8
を参考にして円をかく。
θ -> 0..2π
x -> cosθ
y -> sinθ
で円なのね。
(%i7) plot2d( [parametric, cos(t), sin(t), [t, 0, 2*%pi], [nticks, 50]],
              [gnuplot_preamble, "set size square"] )$
  0: ($PLOT2D
      ((MLIST SIMP) $PARAMETRIC ((%COS SIMP) $T) ((%SIN SIMP) $T)
       ((MLIST SIMP) $T 0 ((MTIMES SIMP) 2 $%PI)) ((MLIST SIMP) $NTICKS 50))
      ((MLIST SIMP) $GNUPLOT_PREAMBLE "set size square"))
|#
;; CL の repl から
($plot2d
 '((mlist simp) $parametric
   ((%cos simp) $t)
   ((%sin simp) $t)
   ((mlist simp) $t 0 ((mtimes simp) 2 $%pi))
   ((mlist simp) $nticks 50))
 '((mlist simp) $gnuplot_preamble "set size square"))
;;;; これを NLISP でやってみよう。
(require :nlisp)
(let* (($t (nlisp:.rseq 0 (* 2 pi) 50))
       ($x (nlisp:.cos $t))
       ($y (nlisp:.sin $t)))
  (nlisp:plot $x $y))
#|
できた。
↓のよりよくなった?
(let* ((x (.rseq -1 1 1000))
       (+y (.sqrt (.- 1 (.* x x))))
       (-y (.* -1 (.sqrt (.- 1 (.* x x))))))
  (plot (.concatenate +y -y)
        (.concatenate x x)))
|#
 
0 件のコメント:
コメントを投稿