Mathematica の基本的な使い方

Mathematica の基本的な使い方
Mathematica を起動する
画面左下の「スタート」ボタンを押したまま、メニューをあけると、
「アプリケーション」の項目
が有る。さらにその項目の中に Math と書かれている。Math の上にカーソルをいれたまま、マウスボタ
ンを放すと Mathematica 起動する(はず)
ファイルの保存・読み込み
ファイルのセーブ
計算途中で作業を中断したい場合などでは、ファイルを保存したいときがある。保存の作業は、
File: Save
ファイルの読み込み
保存されたファイルを読み込むには、該当書類をダブルクリックする。
もしくは、Mathematica を起動してから、
File:Open
を選択する。
数式の入力、再入力
入力方法
カーソルが横に寝ている状態のときに数式を打ち込む
式を入れ終わったら、
[Shift] + [Enter] で計算がはじまる
再入力
式の一部を修正して実行したいときは、カーソルが縦になる位置にもってゆき、式を編集し、ふた
たび[Shift] + [Enter] とする。
Mathematica で数値計算
たし算を実行する
1 + 2
かけ算の実行
2 * 4
2 4
関数の実行
Mathematica が用意している数学関数は、はじめが大文字であることに注意。
Sqrt[16]
16 の平方根の計算
Prime[15] 15 番目の素数を求める
FactorInteger[2001]
素因数分解
Help の使い方
Mathematicaには無数の数学的関数が組み込んであり、すべてを覚えるのは不可能である。また、関
数に渡す数値や順番、オプションなども同様である。このためMathematicaには「どのような関数がある
のか」
「関数に渡す値は何か」「関数が返す値の説明」などを画面で確認できる仕組みがいくつも有る。
?
関数の引き数、出力の意味が表示される。
? FactorInteger
とすると、FactorInteger が素因数分解の関数であることが表示される。
また、関数名をはっきり覚えていない場合は、
? Factor*
とすると、関数名が Factor で始まるものすべてが表示される。
メニューの Help
“Go To”と書かれているところに関数名を入力すると、詳細な説明が表示される。
整数と浮動小数点
Mathematica では、数値のうち、整数は近似ではない正確な値を意味し、小数点を含む少数は有限
の精度でうちきられた数値として解釈される。このため、整数と少数ではその計算結果が異なることが
多い。次の例を実行してみよ。2^100 はすべての桁数が表示されるが 2.0^100 では近似的な結果になる。
2 ^ 100
2.0 ^ 100
直前に実行した計算結果の引用
% を使うと、直前に実行した計算結果の値を取り出すことができる。
すこしずつ計算を進めてゆくときに便利である。
例.2 5の2乗を求めてみる。そのあと、その結果の平方根を確かめる。
In[2]:=
25 ^ 2
Out[2]=
625
In[3]:=
Sqrt[%]
Out[3]=
25
記号計算
Mathematica では、文字式(多項式、単項式)の四則演算、因数分解、解の導出ができるようになっ
ている。この機能を使えば、大学4年間で遭遇する計算式の多くは処理できる。
記号演算の基礎
In[2]:=
2x + 5x
Out[2]=
7 x
注意:Mathematica では、変数 xy と、その間に空白が挟まった x y では意味が違う。空白をはさん
だ場合は変数 x と変数 y のかけ算と見なす。変数名の間には空白を入れないこと。
In[3]:=
2xy + 3 x y + 5 x y
Out[3]=
2 xy + 8 x y
数式の展開
式の展開 Expand[]
In[4]:=
(x - y ) ^3 (x + y)^3
Out[4]=
3
3
(x - y) (x + y)
In[6]:=
Expand[%]
Out[6]=
6
4 2
2 4
6
x - 3 x y + 3 x y - y
式の因数分解 Factor[]
In[8]:=
Factor[6x^2 + 13x -5]
Out[8]=
(5 + 2 x) (-1 + 3 x)
分数の分母を揃える。Together[]
下記のような複雑な分数式を分母をそろえて、ひとつにする。
1
1
1
+
+
4x 2 – 1 2x 2 + 5x + 2 2x 2 + 3x – 2
文字式をもっとも簡素な形に変形する。Simplify[]
下記の式は1項にまとめられる。
2y
1
1
x – y + x + y + x2 – y2
分子分母を約分する Cancel[]
2x + xy – 2y – 4
x 2 + 3x – 10
例題
平方根の計算
ある数の平方根は 256 になる。その「ある数」は何かを計算せよ。
文字式の文字に値を代入する
文字式中の特定の変数を数値に置き換えた結果を計算する
式 3x^3 + 4 において、変数xを4として計算せよ。
In[12]:=
1+ 3x^3/.x->4
Out[12]=
193
文字を文字に置き換える
文字に数字を置き換えるだけでなく、文字を文字に置き換えることもできる。たとえば、
1 + 3x^3/. x-> y-1
これにより連立方程式などの文字消去も簡単にできる。
2x +3y =7
x-2y=0
を x を消去することによって解いてみよ。
文字式の変数に即値を代入する。
ここまで述べてきた代入では、式の中で代入が指定された部分だけを値に「置き換え」
、その結果
を変形し、簡単にするものであった。それに対し、もうひとつの代入の仕方は、文字そのものがいつで
も特定の値をもつとして式を計算する。
(したがって、一度わりあてた文字は「定数」として扱われる。)
文字への即値の割り当て
x=4
割り当て結果を用いての計算
1+3x^3
文字に割り当てた即値の解除 Clear[]
一度でも=で、文字に値を割り当てると、それ以後は「文字」としてはあつかれなくなり(いつで
も特定の数値として扱われる)、困ることがある。これを解除するのが Clear である。
Clear[x]
方程式の解を求める関数 Solve[]
x 2 + 3x + 2 = 0 の解を求める場合、
In[15]:=
Solve[x^2+3x+2==0,x]
Out[15]=
{{x -> -2}, {x -> -1}}
最後の行は、x=-2, x=-1 のときに右辺が0となることを表す。
2元連立方程式の場合
In[16]:=
Solve[{2x+3y==7, x-2y==0},{x,y}]
Out[16]=
{{x -> 2, y -> 1}}
2次元の関数のグラフの書き方
2次元平面にグラフを書くには、
Plot[式の形 , 変数の値の範囲]
とする。たとえば一元一次関数F(x) = 2x + 3 のグラフを -2 ≦ x ≦ 2 の範囲で書くには
Plot[2x+3, {x, -2,2}]
2次関数F(x) = x 2 – 3 のグラフを同様にして作図するには
Plot[x^2-3, {x, -2,2}]
例題
2次関数 x^2+4x-21=0 を満たす x をもとめよ。また、そのグラフをかけ。
Solve[x^2+4x-21==0,x ]
Plot[x^2+4x-21, {x, -3, 7}]
-15 + 9 x + 6 x^2 + 26 y + 23 x y + 21 y^2 ==0 となる x,y の関係を次の手順で求めよ。
式の左辺を因数分解せよ。
Factor[-15 + 9 x + 6 x^2
+ 26 y + 23 x y + 21 y^2]
関数 Solve をつかって、上記の式が0となる x,y の関係を求めよ。
Solve[-15 + 9 x + 6 x^2
+ 26 y + 23 x y + 21 y^2 ==0, {y,x}]
x,y の関係式をグラフにせよ。
Plot[{y=-5/3 - 2x/3,y=3/7-3x/7},{x,0,4}]
実際に前述の式が0となる x,y の値を3つしるせ。
3元連立方程式
3x + 4y + 2z = 17
x + y + z =6
5x + y -z =6
をみたす x,y,z をもとめよ。
Solve[{3x + 4y + 2z = 7, x + y + z= 6, 5x+y-z =6},{x,y,z}]
関数の定義
ユーザ定義関数の例
コブダグラス型効用関数u(x1,x2) = x10.4 x20.6 を作ってみる。
utility[x1_, x2_] := x1^0.4 x2^0.6
定義の表記上の注意
(1)左辺の関数名は小文字で始まっている。
(2)関数の独立変数を表す文字の後に下線がついている。
(3)数学の関数定義で使うイコールが、コロン・イコールになっている。
(4)関数式を入力しても、結果を返さない。
(Out[]はでてこない。)
定義ができているかどうかの確認
いま作成した関数が Mathematica に登録されたかどうかを確かめる。
In[4]:=
?utility
Global`utility
utility[x1_, x2_] := x1^0.4*x2^0.6
自分で定義した関数を使ってみる。
x1 = 4, x2 = 3 のときの値を計算する。
utility[4,3]
関数の消去
関数を消去したい場合は Clear[]を用いる。
Clear[utility]
関数定義をつかったグラフプロット
ここまでは、Plot[x^2+4x-21, {x, -3, 7}]のようにして、プロットしたい式を直接 Plot に与えていた。
これを関数定義を行ってからプロットを行う。
f[x_] := x^2 + 4x -21
Plot[f[x], {x,-8,4}]
注意! Plot のときに与える変数名は、定義のときにつかった変数名とは一致してなくても構わな
い(一致させるほうが混乱は少ないが。)。たとえば、Plot[f[x], {x,-8,4}]は、Plot[f[y], {y,8,4}] としてもまったく同じグラフができ上がる。
Plot のオプション
関数のプロットの際にはさまざまな装飾が指定できる。
たとえばプロットされたグラフに題名をつ
けたり、グラフの縦横比を変えるなどである。そのようなオプション指定は、
Plot[f[x], {x,-8,4}, PlotLabel->”Quadratic function”]
などとして、定義域の指定の後に追加する。オプションは、
オプション名 -> オプション値
という書式で指定する。オプション値が2つ以上ある AxesLabel の場合は、
AxesLabel -> “
{ x 軸の軸名”, “y 軸の軸名”}
とする。オプションには次のものがある。
オプション名
AspectRatio
AxesLabel
DisplayFunction
Frame
FrameLabel
GridLines
PlotLabel
PlotRange
PlotStyle
PlotPoints
MaxBend
デフォルト値
1/GoldenRatio
作図の縦横比。デフォルト値は黄金比の
逆数(約0.6)。指定可能な値は任意の実
数、またはAutomatic。Automaticが指定さ
れると、x軸、y軸の縮尺が同じになる。
None
座標軸にラベルを付けるには、{"x label",
"y label"}で指定
$DisplayFunction グラフィックスの表示法。(出力デバイ
ス)
FALSE
作図の周りに枠を描くか否か。
None
作図の周りの枠にラベルを付ける。
None
方眼の指定。方眼を描くにはAUtomaticを
指定
None
図のラベルを指定
Automatic
作図範囲。すべての点を描くためにはAll
を指定。
Automatic
曲線に使用するグラフィックスのプリミ
ティブのリストのリスト
25
関数の最小サンプリング数
10
連続した線の最大折れ角
目一杯オプションを指定した例
Plot[f[x], {x,-8,4}, PlotLabel->"Qudratic Function", AxesLabel -> {"x", "y"},
GridLines -> Automatic]
条件付きユーザ関数 ∼不連続な関数を描くにはどうしたらよいか?∼
経済学では、変数の値によって傾きがちがっているなど、場合分けを必要とする関数がよくある。
このような場合分けのある関数定義を「条件付きユーザ関数」という。
Ex. 生産関数を描いてみる
f[x_ /; 0 <= x <= 100] := 2/5 x
f[x_ /; 100 <= x <= 200] := 4/5 x - 40
f[x_ /; x > 200] := 3/10 x +60
Plot[f[x], {x,0,250}]
不連続な関数定義の例
局所変数の利用 ∼変数が沢山あるときの関数定義∼
u(x1,x2) = x1αx2β のようになっており、パラメータα、
前述のコブ・ダグラス型効用関数の一般形は、
βの値によって値が異なってくる。α、βに数値を代入して関数を計算するには次のような方法がある。
(1)α、βに値を割り当てる。
(以下では a,b がα、βのかわり)
a = 0.4
b = 0.6
utility[x1_, x2_] := x1^a x2^b
utility[4,3]
(2)このような場合は、カッコとセミコロンをつかって一行にまとめることもできる。
utility[x1_, x2_] := x1^a x2^b
( a = 0.4; b = 0.6; utility[4,3])
このように1行に複数の式がはいったものを「複合式」とよぶ。
(3)α、βを関数の引き数にいれてしまう。
utility[x1_,x2_,a_,b_] := x1^a x2^b
utility[4,3]
いづれのばあいも同じ結果をかえすことができる。
しかし値の割り当てを使う場合、作業を続けてゆくと、aやbなどは使われやすい変数名なので、い
ろいろな関数で使われる危険が大きくなる。たとえば utility 以外の関数 g[x]が次のように定義されてい
たとしよう。
g[x_] := a x^2
関数 utility も a,b をつかっていて、utility を計算するために a,b の値を定義してしまうと、関数 g[x]
も影響をうけてしまう。このため、関数ごとに変数名が重ならないようにする必要があるが、これを解
決するのが Module である。
Module をつかった関数定義
Module の定義は、
関数名[引き数] := Module[{Module の中で使う変数リスト}, 式]
となっている。たとえば、効用関数の例では、
utility[x1_, x2_] := Module[{a,b}, a = 0.4; b=0.6; x1^a x2^b]]
utility2[x1_, x2_] := Module[{a,b}, a = 0.5; b=0.5; x1^a x2^b]]
Module を使うことで、同じパラメータ名 a,b を使っていても utility,utility2 の2つの関数は別のもの
として定義することができた。
例題
下記の問題をとき、その結果を考察せよ
(1)2次関数 x^2+4x-21 を関数定義を用いて関数 f(x)として定義し、f(x)をプロットせよ。
(2)(1)で作成した関数 f(x)の値が 0 となる場合の x の値を Solve を使ってとけ。
(3)
「条件付きユーザ関数」の例として示した生産関数を定義し、グラフにせよ。
ただし、グラフにはタイトル、横軸の名称、縦軸の名称を書き入れること。
(4)コブ・ダグラス型効用関数を a=0.1(このとき b=0.9)から a=0.9(このとき b=0.1)まで9通り定義せ
よ。a=0.1 のときの効用関数は utility1, a=0.2 のときの効用関数は utility2 などとして、utility9 まで関数を
定義すること。
(5)(4)で作った関数9つを Plot3D を使って表示せよ。その表示結果から、効用関数がもっとも大き
くなる a,b はどのような場合かを考察せよ。
微分
Mathematica は、数式を特定の変数について微分することができる。関数 x^2 + 2x y + y^2 を変数 x
について微分するためには、
D[x^2 + 2x y + y^2, x]
とすればよい。
課題
容積 V, 半径 r, 高さ h のジュースの缶を設計することを考える。ジュース缶を作るコストは、その
表面積に比例し、平方センチメートルあたりp円かかるとする。容積Vがすでに決まっているとき、もっ
とも安く作れる半径 r を決めたい。
r
h
(1)缶を作るコストは、表面積 * p である。容積が V であるときの表面積を表す式を求めよ。表面
積は上下のフタの面積(2つぶん)と、側面の面積からなる。
[ヒント:缶の容積は底面積× h である。]
(2)缶をつくるコストの式 Q を r の関数として表せ。つまり関数 Q(r)を定義せよ。
(3)缶のコストの関数 Q(r)がもっとも小さくなるときの半径 r の条件を求めよ。手段は問わない。
(4)V=250, p=2 として缶のコストを最小にする半径 r を求めよ。