Upload
duongthuy
View
214
Download
0
Embed Size (px)
Citation preview
Mathematicaの基本的な使い方
Mathematicaを起動する画面左下の「スタート」ボタンを押したまま、メニューをあけると、「アプリケーション」の項目
が有る。さらにその項目の中にMathと書かれている。Mathの上にカーソルをいれたまま、マウスボタンを放すとMathematica起動する(はず)
ファイルの保存・読み込み
ファイルのセーブ計算途中で作業を中断したい場合などでは、ファイルを保存したいときがある。保存の作業は、 File: Save
ファイルの読み込み保存されたファイルを読み込むには、該当書類をダブルクリックする。もしくは、Mathematicaを起動してから、 File:Openを選択する。
数式の入力、再入力
入力方法カーソルが横に寝ている状態のときに数式を打ち込む式を入れ終わったら、[Shift] + [Enter] で計算がはじまる
再入力式の一部を修正して実行したいときは、カーソルが縦になる位置にもってゆき、式を編集し、ふた
たび[Shift] + [Enter] とする。
Mathematicaで数値計算
たし算を実行する1 + 2
かけ算の実行2 * 42 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 ^ 1002.0 ^ 100
直前に実行した計算結果の引用% を使うと、直前に実行した計算結果の値を取り出すことができる。すこしずつ計算を進めてゆくときに便利である。例.25の2乗を求めてみる。そのあと、その結果の平方根を確かめる。
In[2]:= 25 ^ 2Out[2]= 625In[3]:= Sqrt[%]Out[3]= 25
記号計算Mathematicaでは、文字式(多項式、単項式)の四則演算、因数分解、解の導出ができるようになっ
ている。この機能を使えば、大学4年間で遭遇する計算式の多くは処理できる。
記号演算の基礎In[2]:= 2x + 5xOut[2]= 7 x
注意:Mathematicaでは、変数xyと、その間に空白が挟まったx yでは意味が違う。空白をはさんだ場合は変数xと変数yのかけ算と見なす。変数名の間には空白を入れないこと。
In[3]:= 2xy + 3 x y + 5 x yOut[3]= 2 xy + 8 x y
数式の展開
式の展開 Expand[]In[4]:= (x - y ) ^3 (x + y)^3Out[4]= 3 3 (x - y) (x + y)In[6]:= Expand[%]Out[6]= 6 4 2 2 4 6x - 3 x y + 3 x y - y
式の因数分解 Factor[]In[8]:=Factor[6x^2 + 13x -5]
Out[8]=(5 + 2 x) (-1 + 3 x)
分数の分母を揃える。Together[]下記のような複雑な分数式を分母をそろえて、ひとつにする。
14x2 – 1
+ 12x2 + 5x + 2
+ 12x2 + 3x – 2
文字式をもっとも簡素な形に変形する。Simplify[]下記の式は1項にまとめられる。
1x – y + 1
x + y +2y
x2 – y2
分子分母を約分する Cancel[]
2x + xy – 2y – 4x2 + 3x – 10
例題
平方根の計算ある数の平方根は256になる。その「ある数」は何かを計算せよ。
文字式の文字に値を代入する
文字式中の特定の変数を数値に置き換えた結果を計算する式 3x^3 + 4 において、変数xを4として計算せよ。
In[12]:=1+ 3x^3/.x->4Out[12]=193
文字を文字に置き換える文字に数字を置き換えるだけでなく、文字を文字に置き換えることもできる。たとえば、
1 + 3x^3/. x-> y-1
これにより連立方程式などの文字消去も簡単にできる。2x +3y =7x-2y=0
をx を消去することによって解いてみよ。
文字式の変数に即値を代入する。ここまで述べてきた代入では、式の中で代入が指定された部分だけを値に「置き換え」、その結果
を変形し、簡単にするものであった。それに対し、もうひとつの代入の仕方は、文字そのものがいつでも特定の値をもつとして式を計算する。(したがって、一度わりあてた文字は「定数」として扱われる。)
文字への即値の割り当てx=4
割り当て結果を用いての計算1+3x^3
文字に割り当てた即値の解除 Clear[]一度でも=で、文字に値を割り当てると、それ以後は「文字」としてはあつかれなくなり(いつで
も特定の数値として扱われる)、困ることがある。これを解除するのがClearである。
Clear[x]
方程式の解を求める関数 Solve[]
x2 + 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 = 17x + y + z =65x + 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.4x2
0.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 -21Plot[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 1/GoldenRatio 作図の縦横比。デフォルト値は黄金比の
逆数(約0.6)。指定可能な値は任意の実数、またはAutomatic。Automaticが指定されると、x軸、y軸の縮尺が同じになる。
AxesLabel None 座標軸にラベルを付けるには、{"x label","y label"}で指定
DisplayFunction $DisplayFunction グラフィックスの表示法。(出力デバイス)
Frame FALSE 作図の周りに枠を描くか否か。FrameLabel None 作図の周りの枠にラベルを付ける。GridLines None 方眼の指定。方眼を描くにはAUtomaticを
指定PlotLabel None 図のラベルを指定PlotRange Automatic 作図範囲。すべての点を描くためにはAll
を指定。PlotStyle Automatic 曲線に使用するグラフィックスのプリミ
ティブのリストのリストPlotPoints 25 関数の最小サンプリング数MaxBend 10 連続した線の最大折れ角
目一杯オプションを指定した例Plot[f[x], {x,-8,4}, PlotLabel->"Qudratic Function", AxesLabel -> {"x", "y"},GridLines -> Automatic]
条件付きユーザ関数 ~不連続な関数を描くにはどうしたらよいか?~経済学では、変数の値によって傾きがちがっているなど、場合分けを必要とする関数がよくある。
このような場合分けのある関数定義を「条件付きユーザ関数」という。Ex. 生産関数を描いてみる
f[x_ /; 0 <= x <= 100] := 2/5 xf[x_ /; 100 <= x <= 200] := 4/5 x - 40f[x_ /; x > 200] := 3/10 x +60Plot[f[x], {x,0,250}]
不連続な関数定義の例
局所変数の利用 ~変数が沢山あるときの関数定義~
前述のコブ・ダグラス型効用関数の一般形は、 u(x1,x2) = x1αx2
β のようになっており、パラメータα、
βの値によって値が異なってくる。α、βに数値を代入して関数を計算するには次のような方法がある。(1)α、βに値を割り当てる。(以下ではa,bがα、βのかわり)
a = 0.4b = 0.6utility[x1_, x2_] := x1^a x2^butility[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^butility[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を求めよ。