2019年7月29日月曜日

『ガールズ&パンツァー 最終章』第2話

観てきた。いいわー。劇場のスクリーンいいわー。きれいだわー。
二回戦の聖グロリアーナとアンツィオの戦いもやってくれんかなー。観たいわー。聖グロいちの俊足との戦い。

2019年7月27日土曜日

drawパッケージ

 どうやらmaximaにはplotパッケージのほかにdrawパッケージというのもあるらしい。
12.1 Introduction to Plotting」にこうある。

追加パッケージ drawはこの節で記述した関数にいくつかの機能を追加した関数を提供します。

 plotとdraw。
 なんとなく、名前のちがいから立ち位置のちがいがわかるような。
 たとえば、plotではあきらめてしまった二直線のあいだを塗り潰すなんてことができるみたいだ。

set_draw_defaults(terminal = 'qt)$

draw2d(user_preamble="set view equal xy",xrange = [0,10],yrange = [0,10],grid=[10,10],filled_func=x-1,explicit(x+1,x,0,10))$

2019年7月25日木曜日

平面図が正方形で、正面図が円で、右側面図も円(3)

 首尾よく「平面図が正方形で、正面図が円で、右側面図も円」が描けたので気をよくした。
 よし。次は「平面図が正方形で、正面図が円で、右側面図は正方形」を描いてみようじゃないか。
 うーん……っていうか、それってただの円柱じゃね……orz。

2019年7月24日水曜日

平面図が正方形で、正面図が円で、右側面図も円(2)

 「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」のgnuplotのプログラムをつらつら読むと、どうやら正方形をZ軸に沿って積み上げているらしい。
 ということはまず、正方形を描けないといけないな。
 けれど単純に描くと、discreteを使ってこんな感じになってしまう。

plot2d([discrete,[[-1,-1],[-1,1],[1,1],[1,-1],[-1,-1]]],[x,-2,2],[y,-2,2],same_xy)$

 立体にするから三角関数で描く形にした方がよいのだけど

plot2d([discrete,[[cos(0),sin(0)],[cos(0.5*%pi),sin(0.5*%pi)],[cos(%pi),sin(%pi)],[cos(1.5*%pi),sin(1.5*%pi)],[cos(0),sin(0)]]],same_xy)$

 これでは、軌跡を描いているわけではないからだめだ。
 parametric指定で三角関数で正方形を描くには……うーん、こうか?

plot2d([[parametric,1,sin(t),[t,0,2*%pi]],
        [parametric,-1,sin(t),[t,0,2*%pi]],
        [parametric,cos(t),1,[t,0,2*%pi]],
        [parametric,cos(t),-1,[t,0,2*%pi]]],
       [x,-2,2],[y,-2,2],same_xy)$

 1辺を二回ずつ、描いているところがちょっと嫌だけど、まぁ、いいや。
 これを円柱のときのように立体化。

plot3d([[1,sin(t),h],[t,0,2*%pi],[h,-1,1],
        [-1,sin(t),h],[t,0,2*%pi],[h,-1,1],
        [cos(t),1,h],[t,0,2*%pi],[h,-1,1],
        [cos(t),-1,h],[t,0,2*%pi],[h,-1,1]],
       [x,-2,2],[y,-2,2],[z,-2,2],same_xyz)$

 Z軸の位置によってかわる正方形の一辺の長さは三平方の定理からわかるから

半径 = 1
長さ = 2*sqrt(1-z^2)

 その分、X,Y座標を調整してやれば、たぶん……。

plot3d([[sqrt(1-h^2),sin(t)*sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1],
        [-sqrt(1-h^2),sin(t)*sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1],
        [cos(t)*sqrt(1-h^2),sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1],
        [cos(t)*sqrt(1-h^2),-sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1]],same_xyz)$

 おっ、できた。

 平面図

 正面図

 右側面図

 すばらしい。

 そして、45度からの側面

 実はこの角度から見たとき、楕円じゃないか、と思ってたしかめたかったのだ。
 きっとこれは長軸、正方形の対角線、短軸、正方形の一辺(=円の直径)の楕円だよね。ほー。

2019年7月23日火曜日

平面図が正方形で、正面図が円で、右側面図も円(1)

 竹内薫「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」の中の、平面図が正方形で、正面図が円で、右側面図も円の立体に関する問題。
 そこに「Maximaでは複数の3次元グラフを重ねられない」とある。
 ——ほんと?
 と思ったのも、本の中ではgnuplotで図を描いているのだけど、それって変じゃね? と思ったからだ。Maximaもgnuplotで描いているんだから描けそうな気がする。どうなんだろ?

 「平面図が正方形で、正面図が円で、右側面図も円」ということは横から見ると、正方形の円柱を寝転がして二個、90度ちがいで重ねれば、よいような……でもそもそも円柱ってどうやれば、いいんだろ?
 まずは円か。
 これはいちおう、描ける

plot2d([parametric,cos(t),sin(t),[t,0,2*%pi]],same_xy)$

 で、これに高さを与えれば、いいんだから……こうですかね?

plot3d([cos(t),sin(t),h],[t,0,2*%pi],[h,-1,1],same_xy)$

 で、これを転がす、と。

plot3d([h,cos(t),sin(t)],[t,0,2*%pi],[h,-1,1],same_xy)$

 さらにこれを90度、ずらして二個、描くと。

plot3d([[h,cos(t),sin(t)],[t,0,2*%pi],[h,-1,1],[cos(t),h,sin(t)],[t,0,2*%pi],[h,-1,1]],same_xy)$

 ——えっ?
 やっぱ、3次元グラフを重ねて描けるじゃないか。
 まぁ、10年前の本だから当時は描けなかったのかもしれないけれど。

 平面図

 正面図
 ——このはみ出ているところを削ることができれば、答えなんだけどなぁ。これはどうすれば、いいんだろう? まぁ、とりあえず、3次元グラフを重ねられるのなら「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」のgnuplotのプログラムもmaximaできっと書けるんじゃね?
 こうかな?

f(z,t):=t*sqrt(1.0-z^2);

plot3d([[f(-0.9,u),f(-0.9,v),-0.9],[u,-1,1],[v,-1,1],
        [f(-0.8,u),f(-0.8,v),-0.8],[u,-1,1],[v,-1,1],
        [f(-0.7,u),f(-0.7,v),-0.7],[u,-1,1],[v,-1,1],
        [f(-0.6,u),f(-0.6,v),-0.6],[u,-1,1],[v,-1,1],
        [f(-0.5,u),f(-0.5,v),-0.5],[u,-1,1],[v,-1,1],
        [f(-0.4,u),f(-0.4,v),-0.4],[u,-1,1],[v,-1,1],
        [f(-0.3,u),f(-0.3,v),-0.3],[u,-1,1],[v,-1,1],
        [f(-0.2,u),f(-0.2,v),-0.2],[u,-1,1],[v,-1,1],
        [f(-0.1,u),f(-0.1,v),-0.1],[u,-1,1],[v,-1,1],
        [f(-0.0,u),f(-0.0,v),-0.0],[u,-1,1],[v,-1,1],
        [f(0.9,u),f(0.9,v),0.9],[u,-1,1],[v,-1,1],
        [f(0.8,u),f(0.8,v),0.8],[u,-1,1],[v,-1,1],
        [f(0.7,u),f(0.7,v),0.7],[u,-1,1],[v,-1,1],
        [f(0.6,u),f(0.6,v),0.6],[u,-1,1],[v,-1,1],
        [f(0.5,u),f(0.5,v),0.5],[u,-1,1],[v,-1,1],
        [f(0.4,u),f(0.4,v),0.4],[u,-1,1],[v,-1,1],
        [f(0.3,u),f(0.3,v),0.3],[u,-1,1],[v,-1,1],
        [f(0.2,u),f(0.2,v),0.2],[u,-1,1],[v,-1,1],
        [f(0.1,u),f(0.1,v),0.1],[u,-1,1],[v,-1,1],
        [f(0.0,u),f(0.0,v),0.0],[u,-1,1],[v,-1,1],
        [f(u,1),f(u,1),u],[u,-1,1],[v,-1,1],
        [f(u,1),f(u,-1),u],[u,-1,1],[v,-1,1],
        [f(v,-1),f(v,1),v],[u,-1,1],[v,-1,1],
        [f(v,-1),f(v,-1),v],[u,-1,1],[v,-1,1]])$

 あかん、むっちゃ、重い。

2019年7月22日月曜日

 今だにGrapherではできた

1 > abs(x - y)

 のグラフは描けないけれど、そもそも円はどうやって描くのだろう。
 Grapherなら

 であっさり描けた。円。
 ところがgnuplot的にも簡単ではないのか、三角関数を使う方法しか、見当たらない。ちなみに

plot2d(sqrt(2^2-x^2),[x,-5,5],[y,-5,5],same_xy)$

 では半円になってしまった。

 いろいろ調べてみたらparametricを使えば、いいらしい。三角関数を使うやり方だけど。
 で、最終的にinfoに書かれていたのを発見して脱力する。それを元に描く。

plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]]],same_xy)$

 ここからおれが得るべき教訓は、まずinfoを見ろ、だな。

 三角関数を使わないのなら……半円にはなるわけだから……。
 solve()してみる。

(%i56) solve(1=sqrt(x2+y2),y);

 ということは

plot2d([sqrt(2^2-x^2),-sqrt(2^2-x^2)],[x,-5,5],[y,-5,5],same_xy)$

 で、どうよ。

 まぁ、こんなもんか。

 と思っていたのだけど、implicit_plotというパッケージを使えば、いちおう描けるみたいだ。

(%i102) load(implicit_plot)$

(%i103) implicit_plot(sqrt(x^2 + y^2) = 2, [x, -5, 5], [y, -5, 5],same_xy)$

(%i104) 

2019年7月20日土曜日

Maximaに裏から入る

 MaximaからLispのREPLへ移ることはできるけれど

(%i68) to_lisp();

Type (to-maxima) to restart, ($quit) to quit Maxima.

MAXIMA> 

 これだと、モードは「Inferior Maxima mode」のままなのでかなり不自由。
 やはりLispならslimeからだよね。
 というわけでMaximaでswankを動かす。

:lisp (load "パス名/swank-loader.lisp" :verbose t)
:lisp (swank-loader:init)
:lisp (swank::create-server :port 14005 :style :spawn :dont-close t)

 あとはポート14005番に「slime-connect」で接続すれば、Maximaを動かしつつ、裏からLispでいじることができる。

(%i7) wrk:444;
(%o7)                                 444

 なんてやって

MAXIMA> $wrk
444
MAXIMA> (setq $wrk 678)
678
MAXIMA> 

 見て変更して

(%i8) wrk;
(%o8)                                 678

 なんてことができる。だからどうした、という話だけれど。
 でもきっとこれで、ここ(Lisp)からgnuplotを使えるようになるんだよなぁ。

2019年7月18日木曜日

imaxima

 FreeBSDでimaximaが動いているせいでアスキーアートのmaximaに我慢できなくなった。
 MacBook AirにTeXをいれることにする。
 今度は用心深く最低限のTeX。

brew install basictex

 latexが見えないというのでパスを設定、そのほか。

;; imaxima
(setq exec-path (cons "/usr/local/texlive/2019basic/bin/x86_64-darwin" exec-path))
(autoload 'imaxima "imaxima" "Image support for Maxima." t)
(autoload 'imath-mode "imath" "Interactive Math minor mode." t)

(setq imaxima-fnt-size "large")
(setq imaxima-use-maxima-mode-flag t)

 やっと数式がきれいになった。グラフのインライン表示もできるようになった。

 ただ、Grapherではできた

1 > abs(x - y)

 のグラフはどうやったら描けるんだろう? できないのかな?

2019年7月16日火曜日

Maxima on Emacs

 同梱されているmaxima.elだと、数式はアスキーアートになる。

(%i3) expand ((x + y)^6);
           6        5       2  4       3  3       4  2      5      6
(%o3)     y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x

 それをTeXで

 という風に、きれいに表示するimaxima.elもあるので、TeXをインストールした。そうしたらひどい目にあった。
 MacTeXをいれたのだが、ディスクが満杯になってしまったのだ。MacBook Airの動きがおかしくなる。いや、もしかしたらMacTeXのせいではなく、タイミングわるく別の何かがあったのかもしれないのだが——。
 結局、MacTeXインストール以前の過去にもどることにした。
 TimeCapsuleを使って。
 ——24時間以上かかった。24時間前にもどるのに24時間以上かかるとは。
 はあ。

 wxMaximaではなぜか、gnuplotがうまく動かないし。突然、ロシア語になるし。
 しかたないのでアスキーアートで使うか、といじっていたらdescribe()が効かないことに気づいた。

(%i33) describe(sum);
No exact match found for topic `sum'.
Try `?? sum' (inexact match) instead.

(%o33) false

 ——はい?
 試しにFreeBSDへいれてみたMaximaはちゃんと動く。imaximaもちゃんと動く。数式もきれいだ。もうFreeBSDでいいじゃないか、と思ったけれど、CPUパワーがちがいすぎるし、ネットごしだし、オフラインだと使えない。
 SBCLが見えるところにないことが原因か、と

brew install sbcl

 したり、

brew install --build-bottle maxima

 buildしなおしたりしたけれど、解決せず。
 FreeBSDでは出力されていないので原因は起動直後にでるこのwarningらしいのだが。

warning: ignoring an empty documentation index in /usr/local/Cellar/maxima/5.43.0/share/info/./

 わからん。なぜだ。
 Maximaでswankを動かしてslimeで裏から入って調べてみたりして——ソースを見てみるか、とbuildしたときにもってきたソースをのぞいたらinfoディレクトリの下にあるmaxima-index.lispのサイズが妙にちがう。いかにもな名前だし、このlispが動くことによってdescribe()のデータベースができるのだ、と当たりはつけていたのだけど。
 中身をコピーしてみた。
 立ち上げなおした。
 ——動いた。

(%i1) describe(sum);


 -- Function: sum (<expr>, <i>, <i_0>, <i_1>)

     Represents a summation of the values of <expr> as the index <i>
     varies from <i_0> to <i_1>.  The noun form ''sum' is displayed as
     an uppercase letter sigma.

【中略】

(%o1) true

 くそお。

2019年7月14日日曜日

Maxima

 Maximaを入れた。

brew install maxima

 中身はCommonLispで書かれている、と聞いて興味を引かれたからだ1。元々、Mathematicaがバンドルされていることを知ってRaspberry Piを買うくらいには数学に憧れている文系だ。当然、インストールする。それがCommonLispでできているとなればなおのこと。数学は全然、わからないけれど。

Maxima 5.43.0 http://maxima.sourceforge.net
using Lisp SBCL 1.5.3
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bugreport() provides bug reporting information.

 installしていてあれ? と思った。
 SBCLがインストールされなかった2。必要なんじゃねーの?

brew info maxima

 してみると、

==> Dependencies
Build: sbcl ✘
Required: gettext ✔, gnuplot ✔, rlwrap ✔

 となっている。あ、requireではなく、SBCLでbuildされているのか。本体はコアダンプだから必要ないというわけか。

Footnotes:

1

Emacsから使えるということも一因。

2

roswellには入っているけれど、brew的には入っていない。

2019年7月12日金曜日

Grapher

 奥の方にしまいこまれるようにMacBook Airには「Grapher」というアプリケーションがある。数式を指定するとグラフを描いてくれる。

y=x

 とか。

 じゃ、こんなんは?

1 > abs(x - y)

 描けた。しかも範囲も認識している。
 当然、3Dも描ける。Exampleにはこんなんまである。

 しかもマウスでぐりぐり動く。
 すげー。数式の意味はさっぱりだけど。

2019年7月1日月曜日

brewでinstallしたらEmacsがうまく動かなくなった……。

 いろいろupgradeしたのでついでにEmacsもupgradeした。
 ——動かなくなった。
 あれ? なんで?
 コード系の文句をいわれている。
 しかもterminal onlyのようにも見える。
 コンパイルオプションはどうなっておるのだ。でも「brew info」では表示されなくなっている。すったもんだしていたらbottoleの中身を見る方法を見つけた。——「brew cat」

bash-3.2$ brew cat emacs
brew cat emacs
class Emacs < Formula
  desc "GNU Emacs text editor"
  homepage "https://www.gnu.org/software/emacs/"
  url "https://ftp.gnu.org/gnu/emacs/emacs-26.2.tar.xz"
  mirror "https://ftpmirror.gnu.org/emacs/emacs-26.2.tar.xz"
  sha256 "151ce69dbe5b809d4492ffae4a4b153b2778459de6deb26f35691e1281a9c58e"

  bottle do
    sha256 "dc49de7034346e692662d10ebacd75ea257d61ebba6f57699b855f158e4a7eda" => :mojave
    sha256 "de836e0766066201968c2dd0ef25ff4458ee532a61dc4ed9d7d8fb284b395b8d" => :high_sierra
    sha256 "6b07616447d66a8066c08591400dc8fed75d44bf51f81de2e1208635e03204c6" => :sierra
  end

  head do
    url "https://github.com/emacs-mirror/emacs.git"

    depends_on "autoconf" => :build
    depends_on "gnu-sed" => :build
    depends_on "texinfo" => :build
  end

  depends_on "pkg-config" => :build
  depends_on "gnutls"

  def install
    args = %W[
      --disable-dependency-tracking
      --disable-silent-rules
      --enable-locallisppath=#{HOMEBREW_PREFIX}/share/emacs/site-lisp
      --infodir=#{info}/emacs
      --prefix=#{prefix}
      --with-gnutls
      --without-x
      --with-xml2
      --without-dbus
      --with-modules
      --without-ns
      --without-imagemagick
    ]

    if build.head?
      ENV.prepend_path "PATH", Formula["gnu-sed"].opt_libexec/"gnubin"
      system "./autogen.sh"
    end

    system "./configure", *args
    system "make"
    system "make", "install"

    # Follow MacPorts and don't install ctags from Emacs. This allows Vim
    # and Emacs and ctags to play together without violence.
    (bin/"ctags").unlink
    (man1/"ctags.1.gz").unlink
  end

  plist_options :manual => "emacs"

  def plist; <<~EOS
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>KeepAlive</key>
      <true/>
      <key>Label</key>
      <string>#{plist_name}</string>
      <key>ProgramArguments</key>
      <array>
        <string>#{opt_bin}/emacs</string>
        <string>--fg-daemon</string>
      </array>
      <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
  EOS
  end

  test do
    assert_equal "4", shell_output("#{bin}/emacs --batch --eval=\"(print (+ 2 2))\"").strip
  end
end
bash-3.2$ 

 ——で?
 なんでMacなのに「–without-ns」になっているんだろう?
 もうHomeBrewはMac用のパッケージ管理システムではないんだなぁ……。
 しかたないのでCASKからインストールした。