主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

数学: 東工大2006年数学科AO入試問題

                
tags:
 数学の問題を解いていく番組、『たけしのコマ大数学科(以下コマ大)』である問題が取り上げられていたのを知った。しばらく数学の問題を解いていなかったので、トレーニングがてらやってみた。


 問題は東工大2006年数学科AO入試問題。試験時間は1,2時間ぐらい。解答に使う定理を求めるのにその時間は使い切ってしまい、この問題の解答を得るにはそれからまた少し時間がかかった。つまり東工大のAOは落ちるということだ。でも解けただけ満足している。

 コマ大では「スネルの法則を使いなさい」と模範解答が説明されたらしい。ぼくはその法則を覚えていなかったし、これはスネルの法則を使って解く問題だと覚えたところでなんのトレーニングにもなりはしない。だから自分で解き進めて解答を得た。せいぜいが三角関数の微分までしか使っていないので、わりと簡単な範囲で解ける部類なんだと思う。


"アメリカの偉大な物理学者リチャード・ファインマンは、かつて私にこう言った。もしこれまで君がしてきたことが他人の引き出した理論を読むことだったら、物理学のある理論を読んでそれを理解したなどと言わないように、と。ある理論を真に理解する唯一の方法はそれを自分で導き出すことだ、と彼は言った" たまたま―日常に潜む「偶然」を科学する - レナード・ムロディナウ

130121.png
スポンサーサイト



円の面積を積分から

                
tags: Math
 「微分」や「積分」を教わったころ、教科書にのったそれらの問題を手順通りに処理することはできた。教わっていないところであっても、教科書の真似をして手順を守れば、問題を解くことはできた。だけど微分や積分の初等問題をやっているあいだは、それらがなんなのかイマイチわからなかった。
 そのあとに微分積分がフーリエ変換やラプラス変換にすすんだことや、コンピュータで数値計算をやったことで微分積分がなにかを理解できた。結局のところそれらは読んで字のごとくで、微分は大きさのあるものを微小なものに分解すること。積分はその微小なものを積み重ねたり、束ねてひとまとめにするようなことだった。積分ならたとえば、放射線の予想被ばく量の算出なんかに使われてたな。


 「円の面積 積分」でググると、積分を使って円の面積を求める方法が見られる。その多くは、円を微小な長方形に切るやり方で行っている。でも微分、積分を考えてみると、円の面積を求める公式を導く方法が一つとは限らなさそう。下記でそれを試してみた。









確率を使ってパイを求める(モンテカルロ・シミュレーション)

                
tags: math


 ↑の本でモンテカルロ・シミュレーションを使って円周率パイを求めるなんて話が載っていて面白そうだったのでやってみる。

"幾何をちゃんと知らない人でも、あのほとんど神話ともいえる神秘的な円周率パイが計算できる。どうやって? 四角の中に円を描き、四角の中ならどこでも同じ確率で弾が当たるようにしておいてから、絵にむかってでたらめに「銃を撃つ」"

本に載っていた上記の文をもとに式を立て、シミュレータを作成する。道具はCでもPythonでも
やれるのだが、Scilabを使う。従来のプログラミング言語でも計算はできるが、記述がもっとも数学らしくなるScilabにしておく。そうしたほうがソースコードの意味を追いやすい。あと、こういうのは実際に動かしてみないと納得しづらいものがある。即座に試せるデモを用意するため、JavaScriptでも作った。

 で、書いたデモとコードが以下。これを走らせてみると、たしかに3.14に近い数字が出る。面白い方法があったもんだなぁ。でもこういうのって初等教育の先生には嫌われるのよね。
確率を使って幾何を使わずにパイを求める


Scilab Ver.
l = 4
trial = 100

r = l / 2
trials = zeros(1, trial)
for k=1:length(trials)
x = rand(1, 10000, "uniform") * l - r
y = rand(1, 10000, "uniform") * l - r

counter = 0
for j= 1:length(x)
if x(1,j)^2 + y(1,j)^2 < r^2 then
counter = counter + 1
end
end

pi = (l^2 / r^2) * counter / length(x)
// disp(pi)
trials(1, k) = pi
end

disp(mean(trials))




以下工事中

L=CdS
dS=l(radius)×θ(radian)=lθ
L=02πl?dθ=2πl
S=0rL?dr=0r2πl?dl=πr2

ライブラリやモジュールを使わずに平方根を得る sqrt()

                
tags:
 人の書いたコードを読んでいると、ある数値の平方根を得たいがために数値計算のライブラリやモジュールを呼び出しているのを見る。でも平方根ていうのは、累乗でも書くことができる。だからいちいちライブラリを呼び出さなくても計算できる。ぼくはプログラミング言語を多く知っているわけではないが、累乗を最初からサポートしていないプログラミング言語はそうないだろう。

Xの1/2乗

この値はXの平方根と等しい、というか平方根を求めることと上の式は同質。Pythonなら以下のように平方根を求める関数を書ける。

def sqrt(num):
  return num ** 0.5


x = x ^ 1 = x ^ (0.5 + 0.5) = (x ^ 0.5) * (x ^ 0.5) = sqrt(x) * sqrt(x)
∴ sqrt(x) = x ^ 0.5


mathタグで証明を書いた。Operaでなら以下が見られる。
x=x1=x0.5+0.5=x0.5*x0.5=x*x

x=x0.5=x1/2
プロフィール

h

Author:h

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon