Maxima のグラフ出力,gnuplot

グラフ出力にもいろいろあって,inline は Maxima の画面にすぐ出るので便利。でもいじれないのが不便。

(%i1) wxplot3d(sin(x)*cos(y), [x,-5,5], [y,-5,5])$
Result

open math を選ぶと XMaxima のグラフ出力なんだろうか大きいのが出る。

(%i2) plot3d(sin(x)*cos(y), [x,-5,5], [y,-5,5], [plot_format,openmath])$

Figure 1:
Result

gnuplot とやると(デフォールトがこれになっていると何もしないとこれ)が,グラフはいじれるし画面に出ないけれどとても便利。

--> plot3d(sin(x)*cos(y), [x,-5,5], [y,-5,5], [plot_format,gnuplot])$

Figure 2:
Result

で,gnuplot というのがすごいソフトで,またやり出すと止らない。 ここでは,Maxima の上でのみ使う,あまりネットには乗ってないことをまとめようというわけだ。

まず,gnuplot の知っておきたいキー操作

7キー:画面の縦横比を変える。「円を書いたのに楕円じゃあな」てなときに便利。あちらの人は黄金比が好きでこういうことは深くこだわらないのだろう
Gキー:方眼紙(graph paper)を書く。
Mキー:視点を変えると,左の座標を表す数字が変わる。個の数字がいらない(普通いらない)ときに押す。押すと始点変更ができなくなるが,又押すと元に戻る。
Bキー:3次元グラフを箱で覆う。
スペースキー:コマンドラインが出る(何もできないけど)
カーソールキー:視点変更
コントロールキー:これを押しながらマウスの視点変更すると普通とちょっと違う。
マウス:視点変更。上のバーの上で左クリックすると色々ある。この中のオプションの中にクリップボードに保存する命令があって,私はこれを使って(クリップボードの画像を保存する別のソフトも使ってるが)色々なものに貼り付ける。

MATHMATICA でしかできなかったことを Maxima+gnuplot でやるようにとやってみたのが下の例。
貧乏人の私は,何とか MATHMATICA から逃げて,フリーの Maxima にすがりたいのだ。

その1 ベクトル場
これは,数Cの行列の所を見てほしい。

その2 3次元
何といってもグラフは3次元だ。媒介変数表示グラフだ。

load(draw)$

基本。

(%i2) draw3d(
    parametric_surface(cos(s)*cos(t),sin(s)*cos(t),sin(t),
    s,0,2*%pi,t,-%pi/2,%pi/2)
)$

Figure 1:
Result

見えない処理,色付け,等高線。

--> draw3d(
    color = blue,
    surface_hide = true,
    contour = surface,
    contour_levels = [-1,0.5,1],
    parametric_surface(cos(s)*cos(t),sin(s)*cos(t),sin(t),
    s,0,2*%pi,t,-%pi/2,%pi/2)
)$

Figure 2:
Result

pm3d とやると,密度グラデーション。

(%i4) draw3d(
    user_preamble = "set pm3d at s depthorder",
    parametric_surface(cos(s)*cos(t),sin(s)*cos(t),sin(t),
    s,0,2*%pi,t,-%pi/2,%pi/2)
)$

Figure 3:
Result

この共通部分の体積を求めよってのが,入試に出る。

--> draw3d(
    surface_hide = true,
    color=blue,
    parametric_surface(s,cos(t),sin(t),
    s,-3,3,t,0,2*%pi),
    color=green,
    parametric_surface(cos(t),s,sin(t),
    s,-3,3,t,0,2*%pi),
    contour = surface,
    contour_levels = {0,0.5}
)$

Figure 4:
Result

トーラスとメビウスバンド,ここまではマニュアルの例にある。

(%i6) draw3d(
    surface_hide = true,
    color=blue,
    parametric_surface(cos(t)*(3+cos(s)),sin(t)*(3+cos(s)),
    sin(s),s,0,2*%pi,t,0,2*%pi)
)$

Figure 5:
Result

(%i7) draw3d(
    title = "The Mobius band",
    color=blue,
    surface_hide = true,
    parametric_surface(cos(s)*(3+t*cos(s/2)),
    sin(s)*(3+t*cos(s/2)),t*sin(s/2),
    s,-%pi,%pi,t,-1,1)
    )$

Figure 6:
Result

ここから,MAHTMATICA にある回転体(revolutionが回転とはなあ,どうも私の世代はこの言葉に弱い)を作りました。
z=f(x) を z軸の周りに回転したもの。入力は f(x) 。

(%i26) zRevolution(f):=block(
    draw3d(
    title = "z=f(x) Revolution",
    color=blue,
    surface_hide = true,
    parametric_surface(x*cos(s),x*sin(s),
    f,s,0,2*%pi,x,0,1)
    )
)$

(%i28) zRevolution(x^2)$

Figure 7:
Result

媒介変数表示された,3次元グラフを z軸の周りに回す。
入力は z=t として,x と y の t の式。

(%i18) paraRevolution(x,y):=block(
    draw3d(
        title = "Parametric Revolution",
        color=blue,
        surface_hide = true,
        parametric_surface(sqrt(x^2+y^2)*cos(s),
        sqrt(x^2+y^2)*sin(s),
        t,s,0,2*%pi,t,0,1)
    )
)$

(%i19) paraRevolution(1-t,t)$

Figure 8:
Result

MATHMATICA は,回転軸を自由にできるが,まあそこまでしなくてもと。(昔は頻出だったが最近は出なくなり,09年に東工大に出題されたのでそのうち,やってみるかも)

それより先に実際の入試問題から回転体を図示する考え方を書こう。
例1 東大09年
aを正の実数とし,空間内の2つの円板(0,0,1)中心半径1の円板をy軸の周りに回転して,(0,0,-1)中心半径1の円板に重ねる。そのx座標が正の部分。
とにかくy軸の周りの回転だから,(r*sin(s),,r*cos(s)),あとは yを変化したときの(円上で変化するのでsin(t))半径 r(aとcos(t)を直角をはさむ辺の斜辺) を求めればいいわけ。

(%i1) load(draw);

(%i2) a:1;

(%i3) draw3d(surface_hide = true,
color=blue,
parametric_surface(sqrt(a^2+(cos(t))^2)*sin(s),sin(t),sqrt(a^2+(cos(t))^2)*cos(s),
s,0,%pi,t,0,2*%pi),
parametric_surface(a*sin(s),sin(t),a*cos(s),
s,0,%pi,t,0,2*%pi))$

Figure 1:
Result

例2 東北大07年
線分A(1,0,1)B(1,0,2)を z 軸に回転してできる円柱を, x 軸の周りに回転してできる立体の体積を求めよ。
とにかくx軸の周りの回転だから,(,r*sin(s),r*cos(s)),あとは xを変化したときの(円上で変化するのでcos(t))半径 r(2とsin(t)を直角をはさむ辺の斜辺) を求めればいいわけ。

(%i12) draw3d(surface_hide = true,
color=blue,
parametric_surface(cos(t),sqrt(4+(sin(t)^2))*sin(s),sqrt(4+(sin(t))^2)*cos(s),
s,0,2*%pi,t,0,2*%pi),
parametric_surface(cos(t),sqrt(1+(sin(t)^2))*sin(s),sqrt(1+(sin(t))^2)*cos(s),
s,0,2*%pi,t,0,2*%pi),
parametric_surface(1,t*sin(s),t*cos(s),s,0,2*%pi,t,1,2)
)$

Figure 2:
Result

見てる方向がx軸が右,y軸が奥なので,日本の高校の教科書とはちょっと違うので,マウスで回転する必要があるが。

あと,力学系(漸化式は数列のところで)と,微分方程式がすごいことができるとマニュアルにあるので,また楽しみだ。 inserted by FC2 system