| Home |
先日、 iPhone/iPod touchで使える数学系アプリを紹介した。
その中で「愛用している」と紹介したMathStuio(元Spacetime)であるが、Mathematicaのように充実したオンライン・リソースがある訳でも、Maximaのように世界中でたくさんの人がドキュメントを提供している訳でもない。
日本語だと特に資料がないので、役に立つ人もいるかもしれないので、メモ程度のものだが出してみる。


カテゴリ: 教育
価格: ¥1,700
第 1 章 MathStuio(元Spacetime)の基本
1.1 MathStuio(元Spacetime)とは
MathStuio(元Spacetime)はクロス・プラットフォームの数式処理システムである。、iPhone/iPad、Windows、Macintosh、Windows Mobile、Windows Mobile Smartphones、Palm OS5、(そのうちAndroid)で動く。
微積分ができる、方程式が解ける。二次元、三次元のグラフが描ける、それらを簡単にアニメーション化できる。グラフはもちろん指先でぐるぐる回したり拡大したりできる。パッケージを呼び出すことなしに、ベクトル解析も特殊関数も使える。
カッコの数が合わなくても、そもそも閉じてなくても、いいように解釈してへっちゃらで動く。
1.2 情報源
[Menu]ボタンを押して下の方にある「? Tutorials」を選ぶと、ステップバイステップで(指示される通りにボタンを押して、実際にMathStuio(元Spacetime)を操作する)基本機能と操作が学べる。
コースは9通り。
Basics(基本;Button Padの使い方など)
Solve Equations(方程式を解く)
Calculus(微積分)
2D Graphing(2次元グラフ)
3D Graphing(3次元グラフ)
Matrics(行列)
Functions(関数をつくる)
Scripting(プログラムする)
Scroll Function(変数の値をバーで操作できる機能)
[Menu]ボタンを押して「? Tutorials」のほかに「Online Manual」がある。
これを選ぶとhttp://www.mathstudio.net/manual/ が開く。
簡素なものだが、MathStuio(元Spacetime)で使える組み込み関数がジャンル別+アルファベット順に整理してあって、解説と使用例をみることができる。
[Catalog]ボタンを押すと、MathStuio(元Spacetime)で使える組み込み関数がアルファベット順になっているので、ここから選ぶことで関数を入力できる。
また、多くの関数では、ここから簡単な解説と使用例をみるとができる(使用例もペーストできる)。
ユーザーが定義した変数や関数も、この[Catalog]に登録されるので、入力を助けてくれる。
最後の砦は、掲示板http://www.mathstudio.net/forums/である。
オンライン・マニュアルを含めて提供されているものはどれも簡素すぎるので、最終的にはここに当たって疑問を解くことになる。
1.3 電卓として使ってみる
基本的に本に書いてある通りに式を入力して[Solve]ボタンを押せば答えが出る。×(掛ける)が「*」、÷(割る)が「/」、べき乗が「^」となるのはお約束。
普通の電卓だと3÷5は0.6と小数で表示するところだが、数式処理システムなので、分数で処理してくれる。「3/5」の式のところをタップして、もう一度[Solve]ボタンを押すと小数表示になる。
平方根は例えばsqrt(3) だが、ルートのボタンを押して入力した方が速い。対数、三角関数もlog、sinなどと入力してもいいがボタンがある。階乗、極限、微分,積分もボタンがある。
方程式を入力して[Solve]ボタンを押せば、方程式も解いてくれる。
直前の答えはansと書く(answerの略)。
これもボタンがあるが、何も入力せず+ボタンを押すと「ans+」と入力され、直前の答えに足し加えるのが簡単。「-」「*」「/」「^」でも同様。
直前でなく、もっと前の答えを参照したいときは、エントリー番号とansを組み合わせる。たとえば11番目のエントリーの答えを参照したいときは ans(11)とする。
電卓篇の最後に、お手軽に回帰分析をやろう。
次のような体重と身長のデータがある。
こうした複数の数値が集まったデータを扱うには、コンマで区切ってひとまとめに[]でくくっておくと便利である。こうした形のデータをリストという(後述)。
weight=[57,53,47,52,47,53,48,48,43,57,50,44,53,41,60,53,48,42,57,47,52,54,51,45,65,43,50,50,49,48,47,49,50,47,46,50,53,47,47,55,47,46,60,50,45,49,65,68,68,58,55,64,57,66,65,55,57,60,62,67,60,65,51,72,60,62,57,56,54,67,70,55,70,80,62,68,75,56,67,60,60,90,70,60,90,60,65,75,57,56,72,62,65,73,78,65,70,55,64,62]
tall=[170,166,157,164,157,160,163,160,153,165,162,150,165,151,165,169,158,153,172,162,160,175,165,155,177,161,160,166,162,161,165,158,158,164,160,159,165,163,160,175,159,161,173,158,159,162,175,178,185,163,165,175,168,180,180,170,167,175,164,178,175,169,171,190,173,171,175,171,166,181,175,163,180,188,180,185,181,167,178,177,172,198,171,169,190,164,170,188,177,169,186,179,176,190,171,171,186,169,179,180]
さらに体重と身長も[ ]でくくる。
[weight,tall]
ここでEntryボタン →Statボタン →Regressionボタンと押していくと、今のデータを散布図で表示したグラフが描かれる。Select Regressionのプルダウンメニューがあるから、そこからどんな曲線に回帰させるかを選ぶ(Liner ならy=ax+bに回帰)。すると散布図上に曲線が引かれ、回帰曲線の係数が表示される。

回帰曲線の種類は、Cubic, e, Exponential, Liner, Logarithmic, Logistic, Median-Median, Quadratic, Quartic, Power, Sinusoidal, Custom Regression(ユーザー定義)の中から選ぶことができる。
1.4 グラフを描いてみる
数式を書いて[Plot]ボタンを押すとグラフが描ける。たとえば[sin]ボタン→[x]ボタン→[Plot]ボタンでこんなグラフ。
グラフ部分をダブルタップすると全画面表示。もう一度ダブルタップすると戻る。
Zeroz、Minima、Maximaをタップしてそれぞれにチェックを入れると、ゼロ点、極小点、極大点に丸印がつく。複数のグラフを表示したときはこれにintersections(交点)が加わる。
3次元グラフも[Plot]ボタンを押すだけで描ける。たとえばsin(x)*cos(y)と入力して[Plot]ボタンでこんなグラフ。

指で触れるとくるくる回転する。
全画面表示にして、右下の数字をタップすると1:メッシュ有り(標準)、2:メッシュなし、3:メッシュだけ、4:ドット表示、と表示形式が切り替わる。
フラクタルも簡単に描ける。z^2+cと入力して[Plot]ボタンでこんなグラフ。

古典的なマンデルブロ集合(zn+1 = zn^2+cの漸化式で定義される複素数列 {zn}n∈N が n → ∞ の極限で無限大に発散しないという条件を満たす複素数 c 全体が作る集合)。
ピンチインでどんどん拡大できる。
1.5 変数と関数の定義
a という変数に、2 という値を記憶させるには、a=2でいい。
b という変数に、sin(z) という数式を記憶させるには、b=sin(z)。
a,bという変数の値を消去するには、clear("a',"b")。クォーテーションで変数名をくくる必要がある。clear(all)ですべての変数の値を消去できる。
関数の定義も普通のイコールでできる。
多変数関数を定義するには、変数をカンマ(,)で区切って f(x, y, z) のようにする。
たとえば 2財におけるコブ・ダグラス型生産関数は、p(x,y,s,t)=x^s*y^tで定義できる。
p(x,y,s,t)=x^s*y^t
Plot3D(p(x,y,0.2,0.3),[x,0,10],[y,0,10]
1.6 作業の保存など
[Menu]ボタンを押すと、New(新規作成)やOpen(保存したファイルを開く)やSave(保存する)やSave as(名前を付けて保存)などがある。ファイルの拡張子は.st。
Include Script Filesで.stファイルを開くと、そのファイルで定義された変数や関数がつかえるようになるが、スクリプト自体は展開されない。他のファイルの関数を使いたいときなど便利。
Transfer Filesを選んでしばらくするとIP-addressが表示されるので、そのアドレスをPCのWebブラウザで開くと、WiFi経由でファイルの転送(PCからMathStuio(元Spacetime)へ/MathStuio(元Spacetime)からPCへ)ができる。
第 2 章 グラフの描画
MathStuio(元Spacetime)にはグラフを描く関数がたくさんある。さっき触れた[Plot]ボタンは、それらの関数を自動的に使い分けしてくれていたのだ。
電卓的な使い方から進んで、自分でプログラムをつくる場合は、作り手の方で関数を使い分けする。その方が細かい指定もできる。
2.1 平面的なグラフ
(書式)
Plot(equation, window, [type])
plot(関数式,[定義変数名,開始値,終了値],[y成分変数名,開始値,終了値],オプション)
(例)
plot(sin(x))……関数式以外は省略できる
plot(sin(x),[x,-2,2])……グラフの範囲を指定してみた
plot(sin(x),[x,-2,2], style=middleShade, color=red)……赤色にして、グラフとx軸の間を塗りつぶした
plot(sin(x+T))……時間変数Tを使うと簡単にアニメーション化できる(時間変数Tは他のPlot系関数でも使える)。
2.1.1 陰関数
(書式)
ImplicitPlot(equation, window, [type])
(例)
ImplicitPlot(cos(x)+sin(y)=1, x=[-8, 8], y=[-8, 8])
2.1.2 媒介変数表示
(書式)
ParametricPlot(equation, window, [type])
(例)
ParametricPlot(cos(u), sin(u), color=red)
2.1.3 極座標表示
PolarPlot(sin(2\theta))
2.1.4 等高線グラフ
ContourPlot(x^2+y^2)
2.1.5 ベクトル場グラフ
VectorPlot(-y,x)
2.1.6 グラフを重ねて表示
同じ関数で描けるグラフなら、数式をコンマで区切るだけでいい。グラフの色は、指定しなくても適当に変えてくれる。
Plot(sin(x),cos(x))
複数のグラフを重ねて描くと、たとえば近似関数が元の関数のどれくらいよい近似になっているかが一目瞭然である。
Taylorという関数でテイラー多項式による近似関数がつくれる。たとえば
Taylor(sin(x),x,7)
で7次の近似。
スクロールバーを動かして変数の値を動かせるScrollという関数と組み合わせて
Scroll(1,13,n)
Plot(sin(x),Taylor(sin(x),x,n))
スクロールバーを動かして次数をあげていくと、テイラー近似がどんどん元のsin(x)のグラフに近付いていく様子を見ることができる。簡単にグラフをインタラクティブにできた。
描くのに異なる関数を使うグラフ同士を重ねるにはMultiPlotという関数を使う。こっちはグラフの色を指定しないとこんな風に同じ色(デフォルトだと青)になる。
MultiPlot(VectorPlot(1,2x),Plot(x^2))
今のを少しいじって、与えられた関数を微分し勾配の場をベクトル表示して、元の関数のグラフを重ねたものを描こう(赤色にして少し太めにする)。

2.2 立体的なグラフ
3次元のグラフを描く基本関数はPlot3Dである。
(書式)
Plot3D(equation, window, [type])
Plot3D(関数式,[x成分変数名,開始値,終了値],[y成分変数名,開始値,終了値],オプション)
(例)
Plot3D(sin(x)+cos(y))
Plot3D(x^3-3*x*y^2,[x,-1,1],[y,-1,1])
2.2.1 媒介変数表示の場合
ParametricPlot3d([cos(u)*cos(v),cos(u)*sin(v),sin(u)],[u,-\pi/2,\pi/2],[v,-0,2\pi])
……球を描いてみた

……2つのリングを絡めてみた。リングごとに色を塗り分け(colors=[[orange,red],[blue,skyBlue]])、座標は消してある(axis=0)。
2.2.2 ベクトル場グラフ
VectorPlot3D([x,y,z])
2.2.3 グラフを重ねて表示
Plot3D(sin(x+T),cos(y+T))
第 3 章 数式の操作
3.1 多項式の操作
3.1.1 多項式の展開
多項式を展開するには関数expandを使う。
expand((a+b)^5)
項が多くなって分かりにくいとき、欲しい変数の係数だけを拾いだすにはCoefficientという関数を使う。
Coefficient((a+b)^5,a,2)
これでaの2乗の係数を拾いだしてくれる(10b^3)。
3.1.2 多項式の因数分解
Factor(x^4-18x^2+81)
Factor(x^5+111105x^4+1121766570x^3+1118845033650x^2+108868944188565x+890011088900109)
3.2 有理式の操作
3.2.1 有理式の通分
Together(2/(x+1)-1/(x-1))
3.2.2 有理式の部分分数展開
Apart((x^3+2*x^2-4*x-3)/(x+1))
→x^2+x+(2/(x+1))-5
3.3 方程式を解く
solve(x^3+2*x^2+3*x+4=0,x)
solve(a*x^2+b*x+c=0,x)
二次方程式の解の公式がでてくる。
連立方程式は式をコンマで区切る。
solve(2*x+4*y=30,x+y=12)
3.4 方程式の近似解
もう少し難しいのを解かせてみる。
solve(exp(x)=3-x^2,x)
=>[7019575/8411846, …]
Maximaあたりだとうまくいかないのだが、あっさり解かれてしまった。
実はMathStuio(元Spacetime)のSolve関数は、式変形で解くのが難しいときは,数値的に解くように、自動的に切り替えを行っている(NSolveという関数にバトンタッチしてる)。MathematicaでいうとFindRootをつかって反復法で解くのに当たる。このやり方だととにかく答えは出してくれるのだが、複数の解があっても一つしか答えない。
答えに「…」とあるのは、他にも解があるんだけど、ひとつしか見つけてないよ、という意味だ。
こういう時は、初心に返る。
Plot(exp(x),3-x^2)と、元の方程式の右辺と左辺のグラフを書いて重ねてみる。
グラフをダブルタップして全画面表示し、拡大する。やはり解はふたつありそうである。

[trace]をタップして、グラフの交点の座標を確かめる。x=0.84と-1.58あたりである。
あたりがついたら、さっきの解でないほうのx=-1.58を教えてやって,その近くで解を探させる
solve(exp(x)=3-x^2,x,-1.58)
と最後にコンマで区切って付け加えるだけでOKだ。
[-3882309/2314711]=-1.67723…という解が見つかった。
第 4 章 微分と積分
4.1 極限
(書式)
Limit(function, variable, point, [direction])
limit(函数, 変数, 近づける値,方向);
……direction(方向)は、0のとき両側、+1のとき右極限、-1のとき左極限
(例)
Limit((3x-15)/sqrt(x^2-10x+25), x, 5, +1)
=>3
Limit((3x-15)/sqrt(x^2-10x+25), x, 5, -1)
=>-3
グラフを描くとわかる。
Plot((3x-15)/sqrt(x^2-10x+25),[x,0,10])
4.2 微分
まずは極限を使って微分の定義をかいてみる。試しにsin(x)を微分してみる。
f(x)=sin(x)
Limit((f(x+h)-f(x))/h,h,0)
ちゃんとcos(x)が得られる。
もちろん微分する関数も用意されている。
(書式)
D(f(x), x, [n])
D(関数, 微分用変数, 階数)
(例)
D(x^6+3x^5-4x^3+x-1)
D(f(x)*g(x), x)
D(cos(x)*sin(x), x)
D(sin(3x+6), x, 3)
大抵はDで間に合うが、特殊関数が入っている場合はDiffという関数を使う。
Diff(z^2*Zeta(z, a), z)
全微分はfDiffという関数を使う。
fDiff(x^2*y^2,[x,y])
テイラー展開
(書式)
Series( function , var , n , value )
Series(函数, 展開変数, 近似次数,展開の中心)
Taylor( function , var , n , value )
Taylor(函数, 展開変数, 近似次数,展開の中心)
(例)
Series(tan(x),x,9,2)
Taylor(tan(x),x,9,2)
テイラー展開をやってくれる関数は、Mathematica風にSeriesでもMaxima風にTaylorでも、どちらでもOK。ただし近似次数と展開の中心の位置が、MathematicaやMaximaとは逆になっている。
4.3 級数
総和
(書式)
Sum( function , n , start , end)
Sum(関数, 添え字変数, 初期値, 終値)
(例)
Sum(1/a!,a,0,20)
Sum(1/a^n,n,1,5)
総積
(書式)
Product( function , n , start , end)
Product(関数, 添え字変数, 初期値, 終値)
(例)
Product(i,i,1,30)
Product((n+k),n,0,4)
4.4 積分
不定積分
(書式)
Integrate(f(x), x, [a], [b])
Integrate(被積分関数, 積分変数)
(例)
Integrate(x^2+3x-6, x)
Integrate(2sin(3x)/sqrt(5+cos(3x))^3,x)
定積分
(書式)
Integrate(f(x), x, [a], [b])
Integrate(被積分関数, 積分変数, 開始値, 終了値);
(例)
Integrate(sin(x^2/2),x,0,2)
Integrate(Integrate(x^2,x,sqrt(y),y),y,0,1)
数値積分
(書式)
Nintegrate(f(x), x, [a], [b])
Nintegrate(被積分関数, 積分変数, 開始値, 終了値);
(例)
NIntegrate( (sin(x)-cos(x)) / (sin(x)+cos(x)) , x , 0 , 1)
NIntegrate( ((x+1)/x) * ln(x) , x , 0 , 1)
4.5 微分方程式
(書式)
DSolve(equation, dependent(independent), values, mode)
Dsolve(微分方程式, 求める関数, 関数の値, モード)
(例)
微分はアポストロフィで表す。二階微分ならf''(x)
DSolve(x''(t)=g,x(t),[0,0])
=>1/2 g t^2
一階の微分なら
DSolve(d@R/d@S=n*R(S)/S,R(S),no)
DSolve(d@y=sin(t)*d@t, y(t), no)
DSolve(m*x''(t)=-k*x(t),x(t),[A,0])……x(0)=A,x'(0)=0
=>A cos(sqrt(kt)/sqrt(m))
4.5.1 ラプラス変換を使って微分方程式を解く
MathStuio(元Spacetime)のDSolve関数は、どうもラプラス変換を使って元の微分方程式を代数方程式に直して解いている感じがする。 Maximaの Desolve関数みたいな感じだ。
自動化されているが、これを1ステップずつ、解いていくと次のような感じになる。
(例)f''(t)+f(t)=sin(t)
ラプラス変換をつかう。
Laplace(f''(t)+f(t)=sin(t),t)
変換後の代数方程式を解く。
関数について解くにはSolveでなくSolve_Equationを使う。
Solve_Equation(ans,F(s))
さらにその結果をラプラス逆変換すると、
iLaplace(ans,s)

Dsolveで解いたのとおなじになる。
4.5.2 微分方程式の数値解析
常微分方程式の近似解を数値解析で求めるのには、4次のルンゲ=クッタ法を行う関数RK4と、4次と5次のルンゲ=クッタ法をやって両者の差が許容限界に収まるように刻み幅を調節する関数RK45が用意されている。
(書式)
RK4(function, t, y, a, b, y0, N=10)
RK4(微分方程式, 独立変数, 従属変数, 範囲の開始値, 範囲の終了値, 初期値, 区間の分割数(デフォルト=10)
RK45( function , t , y , a , b , y0 , Tol=10E-5 , hmax=0.25 , hmin=0.25 , N=20)
RK45(微分方程式, 独立変数, 従属変数, 範囲の開始値, 範囲の終了値, 初期値, 誤差の許容限界(デフォルト=10E-5),刻み幅の上限(デフォルト=0.25),刻み幅の下限(デフォルト=10E-6 ),区間の分割数(デフォルト=20))
(例)
RK4(t-y^2,t,y,0,3,1)
ListPlot(ans)
RK45(t-y^2,t,y,0,3,1)
ListPlot(ans)
RK4とRK45は、x,yの組をリストにして返す。これを見るためにリストをグラフにする関数ListPlotに結果を渡す。するとこんなグラフになる。
第 5 章 リスト、ベクトル、行列
5.1 リスト
多くの数式処理システムと同様に、MathStuio(元Spacetime)でも、リストという《データを組にしたもの》を扱うことができる。
リストをつくるには、データの各要素をコンマで区切って,全体を[](中括弧)でくくる。
[4,5,6]
リストは変数に代入できる。
a=[4,5,6]
また関数Listでも、リストをつくることができる。
単にList(数値)とすれば、その数値の個数だけ0でできたリストができる
List(4)
a
[0,0,0,0]
ルールを計算式で表して、リストをつくることもできる。
(書式)
List(expression, variable, start, step, length)
List(計算式, カウンタ変数, 初期値, 増分,個数)
Sequence(計算式, カウンタ変数, 初期値, 終了値)
(例)
List(i^2,i,1,1,5)
=Sequence(i^2, i, 1, 5)
[1,4,9,16,25]
二つのリストを連結させる
(書式)
Append(expression1, expression2)
(例)
Append([1, 2, 3], [4, 5, 6])
→[1,2,3,4,5,6]
リストの一部を取り出す
(書式)
Extract(expression, position, [length])
(例)
Extract([1, 2, 3, 4, 5], 2, 3)
→[2,3,4]
変数にリストが入っている場合、「変数()」でも一部を取り出すことができる。
(例)
a=[1,2,3,4,5]
a(2:3)
→[2,3,4]
リストの中身を昇順で並びかえる
Sort([2, 5, 3, 4, 1])
→[1,2,3,4,5]
リストの順序を逆にする
Reverse([3, 2, 1])
→[1,2,3]
リストの中の要素の数
Length([3,2,1])
→3
スカラー値を引数にしてスカラー値を返す関数にリストを渡すと、リストの要素それぞれを引数にして計算したスカラー値をリストにまとめて返してくる。
つまりリストにまとめて関数を使うと、いっぺんにリストにまとまった結果が得られる。
sin([0,\pi/6,\pi/4,\pi/3])
→[0,1/2,√2/2,√3/2]
複数のデータを統計処理するときもリストを使う。
最大値 Max([3, 0, -5, 0.5, 4]) →4
最小値 Min([3, 0, -5, 0.5, 4]) →-5
平均値 Mean([3, 0, -5, 0.5, 4]) →1/2
分散 Variance([3, 0, -5, 0.5, 4]) →49/4
標準偏差 StandardDeviation([3, 0, -5, 0.5, 4]) →7/2
5.2 ベクトルの演算
v1=[1,0,2]
v2=[2,1,-2]
ベクトルの足し算
v1+v2
ベクトルの引き算
v1-v2
スカラー倍
3*v1
ベクトルの内積
Dot(v1,v2)
ベクトルの外積
Cross(v1,v2)
ベクトルのノルム
Norm(v1)
ベクトルの間の角度
Angle(v1,v2)
5.3 行列の演算
行列はリストを組み合わせて作る。
a=[[1, 2], [3, 4]]
変数に行列が入っている場合、行列のm行n列を抜き出してスカラーを得るには、
a(1, 2)
→2
1~2行×2~3列だけを抜き出して行列にするには
a(1:2,2:3)
数式で行列を定義する
(書式)
ConstructMat(数式,行カウンタ変数,列カウンタ変数,行数,列数)
(例)
ConstructMat(i*j,i,j,3,3)
与えられた行列をm行n列の行列に組み直す
Reshape(matrix,m,n)
Reshape([[1,2,3,4,5,6,7,8,9]],3,3)
n×nの単位行列
Identity(n)
逆行列
Inverse(matrix)
転置行列
Transpose(matrix)
あるいは変数名にアポストロフィで
A' は Transpose(A)と同じ
行列の行列式
Det(matrix)
行列の積
Command(MatrixDetection=1)
[[1, 2], [3, 4]]*[[5, 6], [7, 8]]
行列の固有値のリストを得る
Eigenvalues(matrix)
行列の固有ベクトル
Eigenvectors(matrix)
行列の(i,j)余因子
coFactor(matrix, i, j)
ガウスの消去法
RowReduce(matrix)
次の連立方程式を解く。
2x1 + 4x2 + 2x3 = 8
4x1 + 10x2 + 3x3 = 17
3x1 + 7x2 + x3 = 11
上の連立方程式の係数から次のような行列を作る
A=[[2,4,2,8],[4,10,3,17],[3,7,1,11]]
これにガウスの消去法をおこなう。
RowReduce(A)
次のような行列が得られる。

上の連立方程式の解はx1=1,x2=1,x3=1である。
- 関連記事
-
- フリーの数式処理ソフトMaximaで数学の高速道路に乗る
- Mathematica,Maxima,MathStuio(元Spacetime)の関数対照表
- iPhone/iPod touchで使える数式処理アプリMathStuio(元Spacetime)の超簡易マニュアル
- iPhone/iPod touchで数学する24の方法(アプリ)
- 中学数学+αで家庭内権力を炙り出す
| Home |