• Tidak ada hasil yang ditemukan

2 数式処理 - 東京理科大学

N/A
N/A
Protected

Academic year: 2024

Membagikan "2 数式処理 - 東京理科大学"

Copied!
5
0
0

Teks penuh

(1)

2 数式処理

前回は主にMathematicaの基本操作,および四 則演算と初等関数の使い方について解説した.今 回はもう少し複雑な計算について解説するとと もに,いくつかMathemmaticaの内部で行われ ている処理に関して解説する.

2.1 Mathematica内の扱い

これまでに解説した関数,変数,記号,数字な

どはMathematica内部では全て「式」として扱

われている.Head関数を使うと様々な関数,変

数等がMathematica内でどのような「もの」と

して扱われているかが分かる.例えば

Head[E]

Head[2+I]

Head[2.1]

を実行してみよう.すると

In[1]:= Head[E]

Head[2+I]

Head[2.1]

Out[1]:= Symbol Out[2]:= Complex Out[3]:= Real

のようになる.それぞれ,ネピア数eは記号,2+i は複素数,2.1は実数であることを示している.

Symbol, Complex, Realなどに分類される基本 要素を総称して「原子式」という.

Head[a+b]

を実行してみよう.ただし,a, bは数字を入れる のではなく,アルファベットのまま実行する.す

ると,

In[1]:= Head[a+b]

Out[1]:= Plus

となる.実は,足し算も関数の形式で表すこと ができ,a+b Plus[a,b] Plus関数を用い て表すこともできる.ただ,足し算や掛け算な どの単純な演算は初回のプリントで解説したよ うに省略された記法の方が入力が簡単であるし,

数学の記法に近いので省略形を使うことをおす すめする.

Mathematicaは,変数を記号として計算する

こともできる.例えば,

Expand[(1+x)^3]

Factor[x^2-1]

を実行すると

In[1]:= Expand[(1+x)^3]

Factor[x^2-1]

Out[1]:= 1+3x+3x2 + x3 Out[2]:= (-1+x)(1+x)

と出力される.

PlusHead,初回のプリントで解説したAbs やLogなど

h[a] やh[a,b]

などの形をしたものを「通常の式」という.hが 関数の名前で,式h[a]Headでもある.a, b 数値であるとは限らず,関数h 次第では,変数 や他の関数を交えた「表現」が引数として入る.

ドキュメントセンター内の解説でもそうだが,こ のような「表現」のことを総称して「expr」と

expressionを省略して表記することが多い.

(2)

2.2 関数

Sineやcosineなどの数学的な意味での関数に限

らず,Mathematicaに評価をさせるには様々な

「関数」を所定の形式で入力して実行する.

例えばDivisors関数を使ってみよう.

Divisors[105]

を実行すると

In[1]:= Divisors[105]

Out[1]:={1,3,5,7,15,21,35,105}

のように105の約数が出力される.

これら関数をいかにして組み合わせるかが

Mathematicaの全てであると言っても過言では

ない.当然,Mathematicaで使える関数全てをプ リントに載せることはできないので,適宜ドキュ メントセンターやインターネットで調べよう.

2.3 List

Listとは読んで字のごとく,値のリストである.

先ほど使ったDivisors関数の評価結果も105 約数をリスト形式で出力している.見たままの リストとしてだけでなく,Mathematica ではリ ストを用いて集合,ベクトル,行列なども表現 する.

{1,2,3}+{a,b,c} {1,2,3}.{a,b,c} {1,2,3}x

上の例を実行して,ベクトルの演算ができるこ とを確かめてみよう.なお,2つ目のセルに書 いてある「点」はピリオドである.

また,行列はリストの中にリストを組み込ん

で表現する.

a={{1,2},{3,4}}

MatrixForm[a]

上の例を実行すると,変数「a」が右辺の行列に よって定義されて,2行目で関数MatrixFormの 引数としてaを代入して評価する.MatrixForm は「いわゆる行列の形」に視覚上見せるための 関数である.この出力結果から行列を入力する ためには,行ごとにリストの中にリストを入力 すれば良いことが分かる.

課題 2.1. Mathematicaに以下の行列の掛け算 を計算させ,行列の形に表示させよ.



1 2 0

3 1 2 0 5 3





2 1 7

11 4 13 0 3 25



リストを「集合の外延的記法」とみなして和 集合や共通部分を求めることもできる.

Intersection[{1,2,3},{3,4,5},{1,3}]

あるいは整理して

a={1,2,3}

b={3,4,5} c={1,3}

Intersection[a,b,c]

などを実行すれば共通部分を出力する.

関数によってはリストを引数として使えるも のもある.例えば

Sin[{0,(1/2)Pi, Pi}]

を実行すると,リストの各要素をSineに代入し

(3)

て得られた値がリスト形式で出力される.ある 関数がリストを引数として使えるかを確認する には

Attributes[関数名]

を実行し,出力されたリストの中にListableが あればリストを引数にできる.

その他Listと関連のある関数:

Length, Part, Take

2.4 Range, Map, Nest, Fold

リストの応用および作成法として4つの関数を 解説する.

Range

Rangeは引数をいくつ入れるかで意味が変わる.

課題 2.2. 以下の例を実行してRangeが引数の 数に応じて何をする関数か推測せよ.

Range[7]

Range[3,11]

Range[2,51,3]

Map Map は

Map[ f, {a,b,c}] の形式で入力し,

{ f[a], f[b], f[c]}

というリストを出力する.f は適当な関数であ る.例えば,Map[ Sin,{0, Pi, (3/2)Pi}]を実行

すると

In[1]:= Map[Sin,{0,Pi,(3/2)Pi}] Out[1]:={0,0,-1}

のように,入力したリストの左から順にSin 代入した値がリストとして出力された.

Nest

Nestは計算結果を関数に逐次的に代入して反復 計算をする関数である.

Nest[f,x,n]

の形式で入力し,実行すると x f に代入し,

その結果をまたf に代入する,という操作を n 回繰り返し,最後に得られる値を出力する.例 えば,

Nest[Sin,1,3]

Sin[Sin[Sin[1]]]

と同じことである.また,NestでなくNestList にすると最後の値だけでなく,各繰り返しのス テップで得られた値をリスト形式で出力する.

Fold

Fold は「引数を2つとる関数 f」 ,「初期値 x」

,「適当なリスト」の計3つの引数をとる関数で ある.

Fold[ f, x,リスト]

の形式で入力する.入力したリストを{a,b,c} おいたとき,

Fold[f,x,{a,b,c}] は

f[f[f[x,a],b],c]

と同じである.もちろん,リストの長さが3であ る必要はない.Nest の2変数バージョンのよう なものである.これも,FoldList にすると各ス テップでの結果も含めたリスト形式で出力する.

(4)

課題 2.3. Mathematicaで以下の値を計算せよ.

20 n=1

1 n2

ただし,和は Sum という関数を使えば簡単に 計算できるが,この課題においてはこれを使わ ずに,ここまでに解説した関数を組み合わせて 計算させよ.(ヒント:足し算も通常の式(h[a,b]

という形式)として表せたことを思い出そう).

2.5 微積分,極限

計算機を使った計算においては,一般的に「無 限」や「極限」といった概念が絡む計算は取り 扱いが非常に難しい.それは,最終的に計算結 果を出力するためにはどこかで計算を終了しな くてはならず,そうするためには計算を有限回 しかできないからである.当然,有限回で計算 を止めれば得られる値は基本的に「近似値」と なる.

しかし,Mathematicaは,これら抽象的概念

をある程度は厳密に扱うことができる.その例 として微分,積分,極限の計算を挙げる.

微分

Mathematicaでは多変数関数の偏微分を扱える

が,状況を簡略化するためにここでは,1変数 関数の微分のみ扱う.

D[Sin[x],x]

を実行すると

In[1]:= D[Sin[x],x]

Out[1]:= Cos[x]

のように微分が計算できる.上の例から関数D の一般的な入力形式は明らかであろう.なお,n 階の導関数を計算するためには

D[f(x),{x,n}]

とすればよい.

積分

積分を計算するにはIntegrate関数を使う.

Integrate[x^2,x]

を実行すると

In[1]:= Integrate[x^2,x]

Out[1]:= x33

となる.当然,これは不定積分なので任意定数 差は無視されている.区間[a, b]上での定積分を 計算するためには

Integrate[f(x),{x,a,b}] の形式で入力する.

極限

極限を計算させるためにはLimit 関数を使う.

Limit[x^2, x->0]

Limit[(1+(x/n))^n, n->Infinity]

を実行すると

In[1]:= Limit[x^2, x->0]

Limit[(1+(x/n))^n, n->Infinity]

Out[1]:= 0 Out[2]:= ex

と出力される.特に,変数が無限に発散すると きの極限も扱える.

(5)

2.6 関数の定義

数学においては sine, cosine などの初等関数と は別に頻出する関数を独自に定義し,その関数 に特定の記号を割り当てたいことがしばしばあ

る.Mathematica にもそのような機能が備わっ

ている.例えば関数f(x)を f(x) =x3+ 3 と定義したいときは

f[x_] = x^3 + 3

と入力し,実行すれば以後は関数 f が上で定義 され,予めMathematicaに用意されている関数 と同様に扱える.例えば

f[x_] = x^3 + 3 f[3]

を実行すると

In[1]:= f[x_] = x^3 + 3 f[3]

Out[1]:= 3 + x3

30

となる.

課題 2.4. x2+ 3x−11から30の自然数を代 入して得られる値をリスト形式で出力せよ.

Referensi

Dokumen terkait

2014.7.10 | セミナー 応⽤数学セミナーの情報はこちら 2014.7.11 | セミナー 確率論セミナーの情報はこちら ロジックセミナーの情報はこちら 2014.7.14 | セミナー 整数論セミナーの情報はこちら 2014.7.15 | セミナー 2014.7.17 | セミナー

ここで, ux, y,vx, yはそれぞれfzの実部と虚部とする. i コーシー・リーマン方程式を書け.(証明は必要ない.)これを用いて,|f′z|2を ux=∂u ∂x, uy=∂u ∂y を用いて表せ. ii 空でない開集合D⊂Ωが存在して,ux, yがD上定数関数であれば,fzはΩで定数 関数であることを示せ... 2 n以下の非負の整数kと

擬似乱数のメリット: • 漸化式と初期シードを記録しておけば、 誰でも同じ数列を再現できる • 高速で低コスト 問題点:「乱数と呼んでいいのか」...⇐(実用的)定義の不在 疑似乱数の創始者von Neumann 「漸化式で乱数を作るのは ある種の罪」 “Anyone who considers arithmetical methods of

Check 逆三角関数の値を求めたり,方程式を解くなどの問題においては,逆三角関数の主値 Arcsinx, Arccosx, Arctanxの定義域・値域に注意して求めるとよい.

1[1996 東京大]まさか、東大でこれが出題されるとは を正の整数とし, 個のボールを つの箱に分けて入れる問題を考える.ただし, 個のボールも入らない箱があってもよいものとする.次に述べる つの場合につい て,それぞれ相異なる入れ方の総数を求めたい. から まで異なる番号のついた 個のボールを, , , と区別された つの

位相空間 科目: 数学演習IIA( f組) 担当: 相木 いよいよ一般的な位相空間を扱う.その前にRnの開集合の性質をもう一度思い出そう. Rnの開集合の性質 これまでの演習問題で見てきたRnの開集合に関する主要な性質を挙げる. i ∅とRnは開集合 ii A, B ⊂Rn がRnの開集合ならばA∩BもRnの開集合 iii

部分集合U ⊂X が開集合であるとは,U が空集合であるか,あ るいは任意の点x∈U に対して,あるr >0が存在し,Bx, r⊂U がなりたつことをいう.. ここでr >0の選び方は点x∈U

添数集合と元の族 数列の拡張として元の列というものを導入した.特に,元の列はN から集合Aへの 写像から定まるものであったが,定義域がNである必要はあるのだろうか?答えはNoで ある. 元の族 ΛとAを集合,f : Λ→ Aを写像とする.このような写像を元の族ともいう.λ ∈Λ に対して aλ :=fλ とおき,元の族のことをaλλ∈Λと表記する.