Unityと数学の学習帳

Unityと数学の同時学習を目的としたブログ

PocketCASの各機能について

数学を利用して物事を解析したり調べものをする際などに非常に便利なiOSアプリ「PocketCas」に関して記事を書いてみました。微積分、方程式の解を導く、関数をプロットしてグラフ画像として保存する等が出来ます

pocketcas.com

<英文マニュアル>

マニュアルに書かれていない詳細やちょっとわかりにくい部分を日本語で説明してみました。以下がその内容となっています

式で利用する変数や演算子の扱い

x Plot、3Dplotモードではグラフの独立変数として指定できます。☆x,yを利用したグラフの作成時、グラフの山と谷の部分に頂点が表示されタップすると値が参照できます。これは何気に重要な機能です
y Plot、3Dplotモードではグラフの従属変数として指定できます
t 式に対して「parametric」指定すると定義域を持った独立変数として指定できます。TMin、TMaxにより範囲が指定できます
T アニメーション用。アニメーションで開始値と終了値を指定して線形直線的に遷移させる事ができます
θ 遷移する極座標。例えばcos(θ)で円が描けます
r Plot、3Dplotモードではグラフに対し半径rの円を描くことができます
i 虚数
e 自然対数の底ネイピア数。exp(1)でも同じです
:= 定義。f(x)の形で関数も指定できます。変数名は文字列でも利用可能。日本語による変数名も利用できます。一度代入した値は、そのファイル内で共通の変数値として記憶されます。構文入力時のメニュー上側にある「Variables」から内容が確認、編集できます
, ベクトルをカンマで区切って書いていく事で指定できます。Plotモードでは2次、3Dplotモードでは三次のベクトルを指定するとグラフが描けます。例: cos(t),sin(t)で円弧が描ける等
% モジュロ演算子。法を求めます。例:12%5とすると、2(mod 5)みたいな意味を返してきます
^ 指数演算子
^(-1) 行列に対する演算子として逆関数を指定できます。通常の指数演算では-1乗になります
! 階乗

f:id:cqbosinko:20170721235852p:plain

やや特殊な入力や出力

  • 行列の入力

行列の入力には「InsertMatrix」機能が便利です。入力機器がiPhoneiPadの場合は望みの縦横数の空入力行列を作成して0を書き換えていくと良いでしょう。基本的にベクトル入力時も構文的に扱いは同じで縦に並ぶものがベクトルとなります

  • 従属変数の具体的な値の変化を見たい場合

「Show Value Table」機能が便利です

f:id:cqbosinko:20170722000406p:plain

関数の機能

ちょっと便利な機能としてpocketcasのメソッド部分を選択すると構文のヘルプが表示されます。インフォメーションアイコンをクリックすると詳細なヘルプが表示出来ます
f:id:cqbosinko:20170722000758p:plain

基本的なメソッドの利用

整数、実数、有理数無理数複素数三角関数等の表示について

pocketcasは適時、有理数表示、n乗根表示、もしくはネイピア数による指数表示、三角関数表示を優先するようになっている。例えばn乗根等の無理数有理数を実数として近似で表示したい場合は以下の様に指定する必要がある

≈(√(3))
≈(1/2)
approx(1/2)

f:id:cqbosinko:20170722213253p:plain

「:=」を利用した関数の作成

PocketCas上での関数作成は以下のように行う。関数の名前は文字列であれば何でも構わない。1文字の名前でも可能。関数名に日本語も利用できる

f(x):=4*x^2+5*x+12
f(2)

testmethod(x):=x^2
testmethod(3)

一次関数(a,x,c):=a*x+c
一次関数(2,3,4)

f:id:cqbosinko:20170722212758p:plain

「solve」方程式を解く

方程式を解きます。連立方程式や複数の未知数を指定して解くことができます。例:4x^2+6x+24=64の未知数xを求めたい場合

solve(4*x^2+6*x+24=64,x)

連立方程式の解を求めたい場合。例:\begin{cases} x^{ 2 }+12y=4\\ x+y=2 \end{cases}の未知数xとyを求めたい場合

solve([x^2+12y=4,x+y=2],[x,y])

虚数解を求めたい場合はcsolveメソッドを利用する

csolve(x^2+2,x)

f:id:cqbosinko:20170722212857p:plain

「seq」数列、ベクトルの作成

数列、ベクトルを作成するには以下のような方法がある

例:等差数列、初項2、差3の数列の作成

seq(2+(n-1)*3,n=1..10)

例:等比数列、初項7、比5の数列の作成

seq(7*5^(n-1),n=1..10)

f:id:cqbosinko:20170722212954p:plain

離散的なグラフを描きたい場合、この数列作成をベクトルに転用できる。例えば以下の様な二次元ベクトルの各要素に対して数列を出力すればよい

[[seq(x,x=-10..20)],[seq(x^3+2*x^2+12*x-500,x=-10..20)]]

f:id:cqbosinko:20170722213039p:plain

その他にベクトルの作成にエクセルやスプレッドシート等で作成したデータをpocketcasで利用する方法もある。例えばエクセルやグーグルスプレッドシート等で以下の様なシートを作成しcsv形式で出力する

f:id:cqbosinko:20170722213717p:plain

この出力したcsvを「New Entry」時に「Load CSV data」を利用してpocketcasから読み込んで内部のデーターを適時、抽出し利用する。以下、統計学を利用した例。エクセルやスプレッドシートでも同様の事が比較的シンプルに出来るのですがPocketCasで計算をメインにした解析をする場合、それなりにメリットはあると思います

f:id:cqbosinko:20170722213142p:plain

ここでは日本語の行列データを作成、利用している

分析するデータ:=[row(A,1..10)]
男性の身長:=col(分析するデータ,1)
男性の平均身長:=mean(男性の身長)

f:id:cqbosinko:20170722222517p:plain

データをうまく扱うには行列の向きに注意する必要がある。linear_regressionメソッドはグラフ上に散らばった行列データから回帰直線を求めるメソッドであり、その入力データを正しく処理する為にtrnメソッドで転置して渡している。ベクトル「トレンドライン」に出力としてスロープ(傾き)やインターセプター(切片)が二次ベクトルとして値が収納されるので関数g(x)に一次関数の形で取り出して割り当てている

回帰分析したいデータ:=trn([[seq(a,a=1..10)],男性の身長])
トレンドライン:=linear_regression(回帰分析したいデータ)
g(x):=トレンドライン[0]*x+トレンドライン[1]

f:id:cqbosinko:20170722221717p:plain

以下で回帰直線と、その元となる男性の身長のグラフを表示している

trn(回帰分析したいデータ)
g(x)

f:id:cqbosinko:20170722222302p:plain

「diff」微分方程式を解く

微分は以下の様にすると求められる。pocketcasでは「'」を利用した導関数表記にも対応している。例えばf\left( t \right) =4.9{ t }^{ 2 }+30\quad \longmapsto \quad f'\left( t \right) =9.8tの様な微分f(x)=3x^{ 2 }+5x+25の様な微分は以下の様に計算できる

diff(4.9*t^2+30,t)

f(x):=3*x^2+5*x+25
f'(x)
f'(4)

f:id:cqbosinko:20170722213842p:plain

また複雑な偏微分等の計算も求める事が出来る。この場合はdiffメソッドを利用して偏微分する変数を明確に指定する手法となります

以下、例:(この例ではa,bの二変数持つ関数Lに対して合成関数の微分偏微分を同時に利用して計算しています)
L\left( a,b \right) =\frac { 1 }{ 2 } { \left( y-ax-b \right)  }^{ 2 }\\ \frac { \partial L }{ \partial a } =\frac { 1 }{ 2 } \cdot 2\cdot \left( y-ax-b \right) \cdot -x=a{ x }^{ 2 }+bx-xy\\ \frac { \partial L }{ \partial b } =\frac { 1 }{ 2 } \cdot 2\cdot \left( y-ax-b \right) \cdot -1=a{ x }+b-y

simplify(diff(1/2*(y-a*x-b)^2,a))
simplify(diff(1/2*(y-a*x-b)^2,b))

f:id:cqbosinko:20170726000100p:plain

「simplify」式を整理する

上記でdiffメソッドと同時に利用しているsimplifyメソッドは式を可能な限り整理して見やすい形で出力します

「integrate」積分

積分は以下の様にすると計算できます
以下、例:
\int _{ 0 }^{ 1 }{ n^{ 2 }dn } ={ \left[ \frac { 1 }{ 2+1 } n^{ 2-1 } \right]  }_{ 0 }^{ 1 }=\frac { 1 }{ 3 } \\ \int _{ 0 }^{ 1 }{ \frac { 1 }{ 1+{ x }^{ 2 } } dx }

integrate(n^2,n,0,1)
∫(1/(1+x^2),x,0,1)

f:id:cqbosinko:20170726000132p:plain

「limit」極限を求める

極限計算を利用したい場合は以下の様にします

limit(1/n,n,∞)
limit((x^2-3*x+2)/(x-2),x,2)

f:id:cqbosinko:20170726000225p:plain

「sum」総和

∑(1/n^2-3,n,1,17)
sum(a+(n-1)*d,n,1,10)
sum(5+(n-1)*3,n,1,10)

f:id:cqbosinko:20170726000256p:plain

「nCr」二項定理

nCr(5,3)

f:id:cqbosinko:20170726000326p:plain

「expand」式の展開

expand((x+1)^5)

f:id:cqbosinko:20170726000352p:plain

その他の便利な関数

以下、個人的に調べた範囲で細々とした関数の機能を網羅しています。限定的な機能に特化したものが多いです

最大公約数
gcd(18, 15, 24)
→3

最小公倍数
lcm(18, 15, 24)
→360

素因数分解
ifactor(90)
→ 2*3^2*5
≈ 90.0

因数分解
factor(x^2+6x+8)
→ (x+2) * (x+4)

一番近い有理数を返す
float2rational(1.4142)
→ 7071/5000

連分数を返す
dfc(root(2))
→ [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2]

素数判定
is_prime(7)
→1

一つ前の素数
prevprime(7)
→5

1つ後の素数
nextprime(7)
→11

n番目の素数
ithprime(5)
→11

割り算の商のみを求める(190/12=15)
iquo(190, 12)
→15

割り算の余りのみを求める
irem(190, 12)
→10

割り算の商と余りを出力する
iquorem(190, 12)
→ 15, 10

除数の羅列
idivis(36)
→ [1, 2, 3, 4, 6, 9, 12, 18, 36]

偶数判定
even(16)
→1

奇数判定
odd(15)
→1

べズーの恒等式
48○+30○=18の丸部分を求める
iabcuv(48, 30, 18)
→ 6, −9

三平方の定理 c^2=a^2+b^2 のa,bを求める
pa2b2(17)
→ 4, 1

メモ

48ページまでチェック

中国の剰余定理(要調査)
ichinrem()