13
8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である. グラフィックス 数式をすぐにグラフ化できる プログラミング 今回の授業では扱わないが,プログラミングが可能である.(プログラミングの文法は C 言語とほぼ同じで す.C 言語をある程度しっていて興味のある人は,試してみてください) 8.2. クイックスタート 8.2.1. Mathematica の起動 Mathematica を起動するには,[スタート]メニュ ー か ら [ プ ロ グ ラ ム ] → [Mathematica4] → [Mathematica4]をクリックします.すると右図の ように Mathematica が起動します. 8.2.2. 数式の入力と評価 まず,「1+1」と入力して,[Shift]キーを押しな がら[Enter]キーを押してみましょう.初めだけ 少し時間がかかりますが, In[1]:= 1+1 Out[1]= 2 と表示されるはずです. (注意) 入力した数式の評価を行うためには,常に[Shift]キーを押しながら[Enter]キーを押します.単に[Enter]キ ーを押すと前の行からの入力の続きと判断されます. 「 In[1]:= 」等は Mathematica が勝手に表示するもので入力してはいけません次に「x+x」と入力して,[Shift]キーを押しながら[Enter]キーを押して見ましょう.今度は, In[2]:= x+x Out[2]= 2 x と表示されるはずです.このように Mathematica は数値以外の数式を扱うことができます. 8.2.3. 計算結果の保存 計算結果を初めて保存する時は,プルダウンメニューの[File]から[Save As]をクリックします.すると図 8-1 の [名前を付けて保存]ダイアログが開くので,適当な名前をつけて(図 8-1 の例では,「test1」にしてあります), [保存する場所]で自分のホームディレクトリである[Nafs の Sxxxxx(Y:)]が選択されていることを確かめてから,

8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-1

8. Mathematicaを使ってみよう

8.1. Mathmaticaの特徴

数式処理

数値ではなく,数式を使った演算が可能である.

グラフィックス

数式をすぐにグラフ化できる

プログラミング

今回の授業では扱わないが,プログラミングが可能である.(プログラミングの文法は C 言語とほぼ同じで

す.C 言語をある程度しっていて興味のある人は,試してみてください)

8.2. クイックスタート

8.2.1. Mathematicaの起動

Mathematica を起動するには,[スタート]メニュ

ーか ら [ プ ロ グ ラ ム ] → [Mathematica4] →

[Mathematica4]をクリックします.すると右図の

ように Mathematica が起動します.

8.2.2. 数式の入力と評価

まず,「1+1」と入力して,[Shift]キーを押しな

がら[Enter]キーを押してみましょう.初めだけ

少し時間がかかりますが,

In[1]:= 1+1

Out[1]= 2

と表示されるはずです.

(注意)

・ 入力した数式の評価を行うためには,常に[Shift]キーを押しながら[Enter]キーを押します.単に[Enter]キ

ーを押すと前の行からの入力の続きと判断されます.

・ 「 In[1]:= 」等は Mathematica が勝手に表示するもので入力してはいけません.

次に「x+x」と入力して,[Shift]キーを押しながら[Enter]キーを押して見ましょう.今度は,

In[2]:= x+x

Out[2]= 2 x

と表示されるはずです.このように Mathematica は数値以外の数式を扱うことができます.

8.2.3. 計算結果の保存

計算結果を初めて保存する時は,プルダウンメニューの[File]から[Save As…]をクリックします.すると図 8-1 の

[名前を付けて保存]ダイアログが開くので,適当な名前をつけて(図 8-1 の例では,「test1」にしてあります),

[保存する場所]で自分のホームディレクトリである[Nafs の Sxxxxx(Y:)]が選択されていることを確かめてから,

Page 2: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-2

[保存]ボタンをクリックします.

2回目以降,保存する場合はプルダウンメニューの[File]から[Save]をクリックします.

図 8-1

8.2.4. Mathematicaの終了

Mathematica を終了するためには,プルダ

ウンメニューの[File]から[Exit]をクリックす

るか,タイトルバー(右図)の左上の[X]ボタンをクリックします.

8.3. Mathematicaのコマンド

8.3.1. 演算コマンド

四則演算

足算,引き算,掛け算,割り算はそれぞれ‘+,-,*,/’で行える.また( )も使うことができる.但し‘[ ]’は関数の

引数とみなされるので使ってはいけない.

(例) 1+1,1/3,2*x,x/y,(1+2)*3

冪級数は‘^’を使う

(例) 2^4

その他の組み込み関数

関数 Mathematica の表記 関数 Mathematica の表記

x Sqrt[x] log x Log[x]

e x Exp[x]

1sin x ArcSin[x]

sin x Sin[x] 1cos x

ArcCos[x]

cos x Cos[x] 1tan x

ArcTan[x]

tan x Tan[x] | |x Abs[x]

Mathematica は大文字・小文字を区別する.組み込み関数は全て大文字で始まることに注意.

Page 3: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-3

組み込まれている定数

定数 Mathematica の表記 定数 Mathematica の表記

Pi ∞ Infinity

8.3.2. 2次元グラフィックス

陽関数のグラフ

Plot[f,{x,xmin,xmax}(,option-> value)]

これは,x の関数 f を x の値が xmin から xmax までプロットすることを示します.‘( )’内は作図のオプションで

省略できることを示します.

(例) sinx のプロット

Plot[ Sin[x], {x,0,2 Pi} ]

(例) 上と同じで,y 方向の範囲を-2 から2にした例

Plot[ Sin[x], {x,-Pi,Pi},

PlotRange->{-2,2} ]

(例) 外枠をつけて,x,y というラベルをつけた例

Plot[ Sin[x], {x, 0, 2*Pi},

Frame->True,FrameLabel->{x,y} ]

-3 -2 -1 1 2 3

-2

-1.5

-1

-0.5

0.5

1

1.5

2

[問題1]

(1) 2xey のグラフを 44 x で書きなさい.

(2) x

xy

sin のグラフを 44 x で書きなさい(グラフ全体が入るようにすること).

Page 4: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-4

陰関数のグラフ

陰関数をプロットするコマンドは,

ContourPlot[ f, {x, xmin, xmax}, {y,ymin,ymax},(options) ]

です.

(例) 122 yx のグラフ

ContourPlot [x^2+y^2 == 1, {x, -2,

2},{y,-2,2} ]

プロットする数式の等号は 2 つ重ねる(「= =」と書く)

ことに注意.コンピュータでは「=」は「右辺を左辺に代

入する」という意味で使うのでこれと区別するために,

等号を重ねて書く.

-2 -1.5 -1 -0.5 0.5 1 1.5 2

-2

-1.5

-1

-0.5

0.5

1

1.5

2

[問題2]

(1) )1( 242 xxy のグラフを 22 x で書きなさい.

(2) 06 22224 yyxyxx のグラフを 44 x で書きなさい.

(3) 124 4224 yyxx のグラフを 44 x で書きなさい.

(4) 122 4224 yyxx のグラフを 44 x で書きなさい.

2 次元アニメーションの作成

アニメーションを作るためのコマンドは,

Animate[変数を含んだ描画関数,{変数名,変数の最小値,変数の最大値,変数の増分}]

です.

(例) 半径が 0から1まで 0.1づつ増えていく円のアニメーションを作る

Animate[ContourPlot[x^2+y^2==a^2,{x,-2,2},{y,-2,2}],

{a,0,1,0.1}]

解説: ContourPlot[x^2+y^2==a^2,{x,-2,2},{y,-2,2}]

この部分はすでに勉強した円を各部分です.ただし半径は a で変数に

なっています. Animate 関数の中で半径を 0 から 1 まで 0.1 づつ増や

して行きます.それを指定しているのが,

{a,0,1,0.1}

の部分です.

このままでは,図がカクカクするのでもう少し描画するメッシュを細かくし

ましょう.そのためのオプションが「PlotPoints」です.

Animate[ContourPlot[x^2 + y^2 = = a^2, {x, -2, 2}, {y, -2, 2},

PlotPoints -> 100], {a, 0, 1, 0.1}]

-2 -1.5 -1 -0.5 0.5 1 1.5 2

-2

-1.5

-1

-0.5

0.5

1

1.5

2

-2 -1.5 -1 -0.5 0.5 1 1.5 2

-2

-1.5

-1

-0.5

0.5

1

1.5

2

Page 5: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-5

[問題3] 陽関数のアニメーション.波の伝播( )( txf でかける関数は波の伝播を示すことを目で確かめる)

(1) )(sin tx のグラフを 1010 x , 5.15.1 y の範囲で時間 t を 0 から 10 まで 0.5 づつ増やし

た時の変化をアニメーションにしなさい.

(2) 2)( txe のグラフを 22 x , 5.15.1 y の範囲で時間 t を 0 から 4 まで 0.2 づつ増やした時の変

化をアニメーションにしなさい.

[問題 4] 陰関数のアニメーション

(1) 232 axxy のグラフを 44 x , 55 y の範囲で aを-2から 2まで 0.1づつ増やした時の変

化をアニメーションにしなさい.

(2) 22222 4)1( bxyx のグラフを 22 x , 22 y の範囲で b を 0.1 から 2 まで 0.1 づつ

増やした時の変化をアニメーションにしなさい.

Page 6: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-6

8.3.3. 3次元グラフ

3 次元グラフ

Plot3D[f,{x,xmin,xmax},{y,ymin,ymax},(,option-> value)]

これは,x,yの関数 f を x の値が xmin から xmax まで, yの値が ymin から ymax までの範囲で計算し z=f(x,y)

のグラフをかきます.‘( )’内は作図のオプションで省略できることを示します.

(例) z=sinx*cosx を-< x <,-< y < の範囲でプロットす

る.

Plot3D[Sin[x]*Cos[y],{x,-Pi,Pi},{y,-Pi,Pi}]

密度グラフ

DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}(,option->value)]

密度グラフは値の大きさを色の濃淡で表すことで 3 次元のグラフを2次元にプロットするグラフです.上のコマン

ドは,x,yの関数 fを x の値が xmin から xmax まで, yの値が ymin から ymax までの範囲で計算し z の値の大

きさを濃淡で示すことで2次元グラフをかきます.‘( )’内は作図のオプションで省略できることを示します.

(例) z=sinx*cosx を-< x < ,-< y < の範囲でプロットす

る.

DensityPlot[Sin[x]*Cos[y],{x,-Pi,Pi},{y,-Pi,Pi}]

-3 -2 -1 0 1 2 3

-3

-2

-1

0

1

2

3

等高線グラフ

ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}(,option -> value)]

等高線グラフは密度グラフに似ていますが,値の大きさが同じ点を結んだ線を引くことで 3 次元のグラフを2次

元にプロットするグラフです.上のコマンドは,x,yの関数 fを x の値が xmin から xmax まで, y の値が ymin か

ら ymax までの範囲で計算し z=f(x,y)の値の大きさが同じ点を結んだ線を引き2次元グラフをかきます.‘( )’

内は作図のオプションで省略できることを示します.

(例) z=sinx*cosx を-< x < ,-< y < の範囲でプロットす

る.

ContourPlot[Sin[x]*Cos[y],{x,-Pi,Pi},{y,-Pi,Pi}]

-3 -2 -1 0 1 2 3

-3

-2

-1

0

1

2

3

Page 7: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-7

(問題 5) )( 22 yxe の3次元グラフを-2 < x < 2,-2 < y < 2 の範囲で書きなさい.また等高線図を書きなさい.

(応用例) 点電荷の作るポテンシャルと電場

以下では,原点に1Cの電荷を置いたときにできる x-y面内のポテンシャルと電場の図を作成する例を示す.簡

単のために, 14 0 とする.

ポテンシャルは,r

zyx1

4

1),,(

0 で与えられるので,

x-y 面内では ,22

1),,(

yxzyx

となる (但し ,

14 0 とした).これを 88 x , 88 y で3次元

でプロットする.

Phi1=1/Sqrt[x^2+y^2]

Plot3D[Phi1,{x,-8,8},{y,-8,8}]

このままでは,値域が狭いので 20 でプロットすること

にしよう.

Plot3D[Phi1,{x,-8,8},{y,-8,8},PlotRange->{0,2}]

さらに,メッシュが荒いので,x-y面を 40x40で切って表示す

ることにする.

Plot3D[Phi1,{x,-8,8},{y,-8,8},PlotRange->{0,2},

PlotPoints->40]

等高線図を書いてみよう.

ContourPlot[Phi1,{x,-8,8},{y,-8,8},

PlotRange->{0,2},PlotPoints->40]

-5

0

5

-5

0

5

0.1

0.2

0.3

0.4

-5

0

5

-5

0

5

-5

0

5

0

0.5

1

1.5

2

-5

0

5

-5

0

5

-5

0

5

0

0.5

1

1.5

2

-5

0

5

-7.5 -5 -2.5 0 2.5 5 7.5

-7.5

-5

-2.5

0

2.5

5

7.5

Page 8: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-8

等高線が見やすいように色塗りをやめる.後で電場と重ねて

描くために,「g1」という名前をつけておく.

g1=ContourPlot[Phi1,{x,-8,8},{y,-8,8},

PlotRange->{0,2},PlotPoints->40,

ContourShading->False]

電場を書いてみよう.電場 E は, gradE で与えられ

る.Mathematicaでは関数の勾配を描画するために,

GradientFieldPlot[]

という関数が用意されている.これを使うためには最初に一

度だけ,

<<VectorFieldPlots`

とする必要がある.ここで[ ` ]はバッククウォートでクウォート

[ ‘ ](7の上のキー)ではありません.バッククウォートは「シ

フトキーを押しながら@キーを押して」入力します.

(注) 「General::obspkg: VectorFieldPlots`はサポートされなくなりました.ロ

ードしようとしているレガシーバージョンは,現在の Mathematica 機能と衝突を起

す可能性があります.更新情報については Compatibility Guide をご覧くださ

い. >>」というエラーメッセージが出ますが,新しいバージョンのバグなので気に

しないで下さい.

ここではメッシュを 20x20に切って勾配をプロットすることにす

る.

g2=GradientFieldPlot[-Phi1,{x,-8,8},{y,-8,8},

ScaleFunction->(.6&),PlotPoints->20]

最後に,ポテンシャルと電場を重ねて描いてみよう.

Show[g1,g2,PlotRange->{{-8,8},{-8,8}}]

-7.5 -5 -2.5 0 2.5 5 7.5

-7.5

-5

-2.5

0

2.5

5

7.5

-6 -4 -2 0 2 4 6 8

-6

-4

-2

0

2

4

6

8

(問題6) 上の例に倣って, 2x と 2x にそれぞれ1C の電荷を置いたときの x-y 面内でのポテンシャル

の等高線と電場を重ねて描きなさい.但し 14 0 とする.

(問題7) 上の例に倣って, 2x と 2x にそれぞれ-1Cと1Cの電荷を置いたときの x-y面内でのポテンシ

ャルの等高線と電場を重ねて描きなさい.但し 14 0 とする.

Page 9: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-9

8.3.4. 式の変換

式の展開

Expand[expr]

式 expr を展開する.

(例) 2)1( x を展開する

Expand[(x+1)^2]

1 + 2 x + x2

因数分解

Factor[expr]

式 expr を因数分解する.

(例) 221 xx を因数分解する

Factor[1 + 2 x + x^2]

( 1 + x )2

式の簡約

Simplify[expr]

式 expr をなるべく簡単な形に変換する.

(例) 221 xx を簡単にする

Simplify[1 + 2 x + x^2]

( 1 + x )2

通分

Together[expr]

分数式の和 expr を通分する

(例) yx /1/1 を通分する

Together[1/x + 1/y]

x y

x y

部分分数展開

Apart[expr]

分数式 expr を部分分数に変換する

(例) xyyx

yx

1

23を部分分数に展開する

Apart[(3+2x+y)/(1+x+y+x y)]

1

1 x

2

1 y

(問題 8)次の式を因数分解しないさい

(1)4224 bbaa (2) abccba 3333 (3)

3333)( cbacba

8.3.5. 関数の極限

Limit[f,x->x0]

は x の関数 fの x->x0の極限 fxx 0

lim

を求めます.

(例) x

xxe

lim を求める.

Limit[x*Exp[-x],x->Infinity]

0

(問題 9) x

x

x

sinlim

0を求めなさい.

(問題 10)

x

x x

11lim を求めなさい.

Page 10: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-10

8.3.6. テーラー展開

Series[f(x),{x,x0,n}]

は xの関数 f(x)の x=x0の周りのテーラー展開を n次まで求めます.

(例) sinx を x=0 のまわりに 5次まで展開し,その結果をグラフにして sinx のグラフと比較する.

In[1]:= u=Series[Sin[x],{x,0,5}]

Out[1]= x

x3

6

x5

120O x

6

In[2]:= u=Normal[u]

Out[2]= x-

x3

6+

x5

120

In[3]:=Plot[{Sin[x],u},{x,0,Pi}]

Out[3]=

-Graphics-

(問題 11) xeの x=0のまわりでのテイラー展開を1次から3次まで求め,

xeと一緒にプロットし

展開次数が上がれば近似が良くなることを確認しなさい.

8.3.7. 級数和

Sum[f,{i,imin.imax}]

級数 f(i)を iが iminから imaxまでの合計をもとめ

る.

(例) 自然数を1から10まで合計する.

Sum[i,{i,1,10}]

55

(問題 12)

1

1

iniを n=1,2,3,4 についてもとめ,n=1 の時だけ発散することを確認しなさい

(問題 13)

0n

nx を求めなさい

8.3.8. 微分・積分

偏微分

D[f,x]

関数 fの xについての偏微分を求める.

(例) xsin の x についての偏微分

D[Sin[x],x]

Cos[x]

高階偏微分

D[f,{x,n}]

関数 fの xについての n階微分

(例) nx の x についての 3階微分

D[x^n,{x,3}]

2 n 1 n n x3 n

Page 11: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-11

多重偏微分

D[f,x,y,...]

関数 fの x,y,...についての多重偏微分

(例) xysin の x,y についての多重偏微分

D[Sin[x*y],x,y]

Cos[x y] - x y Sin[x y]

不定積分

Integrate[f,x]

関数 fの xについての不定積分

(例) xsin の xについての不定積分

Integrate[Sin[x],x]

-Cos[x]

定積分

Integrate[f,{x,xmin,xmax}]

関数 fの xminから xmax までの定積分

(例) xsin の x0 での定積分

Integrate[Sin[x]^2,{x,0,Pi}]

2

数値定積分

NIntegrate[f,{x,xmin,xmax}]

関数 fの xminから xmax までの数値定積分

(例) x2sin の x0 での定積分

NIntegrate[Sin[x]^2,{x,0,Pi}]

1.5708

(問題14)関数22

1)(

yxxf

について次の偏微分を求めなさい.

(1) xf (2) yf (3) xxf (4) xyf (5) yyf

(問題15)以下の不定積分を求めなさい.

(1) xdxlog (2) xdxe x sin (3) dxxx 12

(問題16)以下の定積分を求めなさい

(1)

0

2

dxe x (2) dxx

x

sin

8.3.9. 方程式の解

1 元方程式

Solve[{lhs == rhs},x]

は lhs=rhs という方程式を変数 x について解きま

す.

「==」は「=」を2つ書くことに注意

(例) x x2 1 0 を xについて解く.

Solve[x^2+x+1==0,x]

x 11 3

, x 12 3

Page 12: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-12

多元連立方程式

Solve[{lhs1 == rhs1,lhs2==rhs2,...},{x,y,...}]

は lhs1=rhs1,lhs2=rhs2,...という x,y,...

についての連立方程式を解きます.

(例) 連立方程式3 5

3

x y

x y

を解く

Solve[{3 x+y==5,x+y==3},{x,y}]

{{x -> 1, y -> 2}}

(問題17)質量 m1の質点が速さ v1で,静止している質量 m2の質点に完全弾性衝突し,それぞれ v2と v3

の速さで動き始めた時,運動量保存則と運動エネルギー保存則から,

2

32

2

21

2

11

322111

2

1

2

1

2

1vmvmvm

vmvmvm

が成り立つ.この方程式を解いて v2と v3を求めなさい。

8.3.10. 微分方程式

DSolve[eqns,y[x],x]

は xの関数 y についての微分方程式 eqns を解きます.

単振動の例

(例1)微分方程式 )('' txx を解く.

「''」はダブルクオーテーションではなく,「'」

を2つ書く

(例 2)微分方程式 )('' txx を初期条件 ,1)0( x

1)0(' x のもとに解いて答えを u に代入する.

結果を 20 x でプロットする.

DSolve[x''[t]==-x[t],x[t],t]

{x[t] -> C[1] Cos[t] + C[2] Sin[t]}

u=DSolve[{x''[t]==-x[t],x[0]==1,x'[0]==1},

x[t],t]

{{x[t] -> Cos[t] + Sin[t]}}

Plot[Evaluate[x[t]]/.u, {t,0,2 Pi}]

1 2 3 4 5 6

-1

-0.5

0.5

1

Page 13: 8. Mathematica を使ってみよう - Shimane U8-1 8. Mathematica を使ってみよう 8.1. Mathmatica の特徴 数式処理 数値ではなく,数式を使った演算が可能である.

8-13

( 例 3) 連 立 微 分 方 程 式 )()(' txty ,

)()(' tytx )を初期条件 0)0( y , 1)0( x のも

とに解く

DSolve[{y'[t]==x[t],x'[t]==-y[t],x[0]==1,

y[0]==0},{x[t],y[t]},t]

{{x[t] -> Cos[t], y[t] -> Sin[t]}}

(問題18) )()(')('' txtxtx を初期条件 1)0( x , 0)0(' x の下で解き,結果を 40 t でプ

ロットしなさい.グラフが全て見えるように工夫すること.

(問題19) ttxtx sin)(4.0)('' を初期条件 1)0( x , 0)0(' x の下で解き,結果を 1000 t で

プロットしなさい.