さて,授業日程も半分まで来たところで,学生によっては,数学+コンピュータ+Mathematica という三重苦
に消化不良をおこしつつある者もいるだろう.
そこで,この辺りでいったん休息を入れ,これまでの簡単な復習を行おう.
復習問題 … 消化不良をおこしつつある人用
- Sin[x] は x の正弦を与える.
では,y = Sin[x] の式で y が与えられたとき,x の値を求めるにはどうしたらよいか?
?Sin を実行し,その結果をよく調べて考えよ.
→ Help を使いこなす問題.英語が読めない,読むのはいやだ…
というならば「勘」を養う必要がある.
しかし,きちんと英語を学ぶのとハズレるかもしれない勘を養うのと,どちらがましか?
- Sin 関数を計算しようとして,試しに Sin(0) と入力して計算したら
答えが 0 になったので安心して,
Sin(Pi) と入力したらなんか答えがおかしい.
なぜだろうか?
どうしたらいい?
→ よくやるミスである.が,気づかないとモニタの前でもったいない時間を過ごすことになる(^-^).
- 一般に,次の二つの量はどちらが大きいか.
a2+b2
------, a * b
2
→ Simplify を使いこなす問題.
ただし,a と b が実数でないと意味がないので,
Element[{a,b}, Reals] として a と b が実数だ,と主張しておこう.
- とある液体が蒸発して減っていくとする.
1日たつと 1/10 の量に減るとしよう.
この時,0日経過,1日経過,2日,… 10日経過時の量をリストにすると
{1, 1/10, 1/100, 1/1000, 1/10000, 1/100000, ..., 1/1000000000, 1/10000000000}
といった感じになるが,このリストをつくれ.
→ Table を使う問題.最初と最後,つまり範囲があっているかは常に確認しよう.
- 上の問題で作ったリストをグラフにしてみよ.
さらに,そのグラフを点ではなくて線で結んだり,色を付けたりしてみよ.
→ ListPlot を使う問題.簡単なオプションは覚えておくと楽か.
オプションを Help で調べるには,??コマンド とするのは覚えているか?
- (ちょっと難しい)
上の問題で作ったグラフをみると挙動がよくわからない.
そこで同じリストを片対数グラフで描いてみよ.
対数グラフのありがたみがわかるはずである.
→ LogListPlot というコマンドを使う.詳しくは Help を見るとよいが,何も考えなくても使えるだろう.
LogLogListPlot を以前使ったときと同様に,Graphics パッケージを読み込む必要があるのに注意.
詳しくは以下を見よ.
● データのグラフを片対数で描く
… LogListPlot[リスト]
→ y 軸だけを対数にしたグラフを描く.
→ Graphics パッケージ読み込み,つまり,
Needs["Graphics`"];
を事前にしておかないと使えないので注意.
- 実数 x が 0以上1以下の数だとして,次のような関数を考える.
2x : x <= 0.5 の場合
f(x) =
2 - 2x : x > 0.5 の場合
この関数を Mathematica で実現しろ.
つまり,f[0.3] を入力すると,0.6 が,
f[0.8] を入力すると 0.4 が答えとして出てくるようにしろ,とい
うこと.
→ 関数の定義,と If を使いこなす問題.
以前使った例をみれば簡単.
- 上で定義した関数 f が正しく定義できているか,f のグラフを
x ∈ [0,1] の範囲で描け.
→ Plot を使いこなす問題.
- 上で定義した関数 f を π/4 に作用させると約 0.429 が得られ,
その 0.429 にさらに f を作用させると 0.858 が得られる.
この様に,π/4 に f を n 回作用させた結果を n= 0 .. 50 まで並べ
たリスト
{π/4, 0.42920.., 0.85840..., .... , 0.965529..} ← ちなみに,50 回目は 0.965529.. となる.
を作れ.
→ Nest を使いこなす問題.
Nest[f, π/4, n] で,初期値を π/4 として f を n 回作用
させた結果が得られる.
あとは,Table と組み合わせて…
あと,できれば関数 f の定義に //N をつけておくと楽か.
→ ただし,こういう風に Nest を使うのは計算時間が非常に無駄になる.
これを回避する方法 → 発展問題
- 上で得られたリストを(線でつないだ)グラフで描いてみよ.
関数 f について何も知らずにこのグラフをはじめて見たときに
関数 f が想像できるだろうか,考えよ.
→ ListPlot を使う問題.Mathematica としては簡単.
でも,得られたグラフは…
- 正の整数 n が素数かどうかは PrimeQ[p] というコマンドでチェックできるが,
この PrimeQ と同様の働きをする関数を自分で作れ.
多少計算時間がかかる方法でもかまわない.
→ 関数の定義 Module (複雑な方)と Do, While 等の「繰り返し」を使いこなす問題.
よ〜っ〜く考えよう.
発展問題 … 消化十分で,暇をかましている人用
- 復習問題 9 の指摘にある,
「こういう風に Nest を使うと計算時間が無駄」というのはなぜか.
- 復習問題 9 の指摘にある,
「こういう風に Nest を使うと計算時間が無駄」というのを回避する
にはどうプログラムすればよいか.
→ リストに要素を付け加えるコマンドは Append という.
これを用いて,「リストの最後の要素に f を作用させて,リストにつけ加える」
ことを繰り返す,ということができる… のを使えば.
- 復習問題 9, 10 の計算結果,グラフから f(x) を推定するには,実は
(xk, xk+1), k=1,2,...
からなるリストをプロットしてみる,という手がある.
これをやってみよ.
→ なぜなら,xk+1 = f(xk) の関係にあるのだから.
データはこの関係のサンプルがたくさん集まっているもの,と思えばよいのだ.
- 正の整数 p と p+2 がともに素数であるとき,この組を「双子素数」と呼ぶ.
双子素数を小さい方からいくつか求めてみよ.
- 双子素数 (p,p+2) に対して,
1
Σ ---
(p,p+2)が双子素数 p
を(厳密には無理だがある程度)計算してみよ.
またグラフを用いて,計算した値が真の値にどれくらい近づいたか考えてみよ.
→ この値が発散する(∞になる)ならば,双子素数は無限個ある,
ということになる.
しかし実際は…
ちなみに双子素数が無限個あるのか有限個しかないのかは未判明.
□ レポート課題 1
復習問題,発展問題をできるだけ解け.
>> 目次