いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

プログラミング

勾配降下法とは何か、分かりやすく説明します(2)今回は2変数関数!

今回は次の2変数の関数で勾配降下法を試してみましょう。 の最小値を求めます。前回は1変数の関数でしたので普通の微分係数を求めました。2変数だと、「xで微分する」「yで微分する」という操作が必要です。偏導関数と言うのでした。プログラムの gx(x, y)…

勾配降下法とは何か、分かりやすく説明します

関数の最大値や最小値を求める、勾配降下法について説明します。「微分すればすぐ分かるのに……」などと思うかも知れません。しかし、関数と言ったって常に明確に式の形で与えられている保証はありません。そんなときには導関数は直に分かりません。それでも…

昔のパソコン、プログラミング(2)

前回の続きです。www.omoshiro-suugaku.com 90年から95年くらいでしょうか、ちょうどパソコン通信が流行り始めた頃で、そちらも面白くていろいろ試していました。同僚の人に電話をかけて電話回線を通じてデータをやりとりする実験など。技術情報誌を見てプロ…

昔のパソコン、プログラミング(1)

ここのところよくPythonで書いています。Pythonに限らず、今では大きなことが簡単にできる様々の仕掛け(ライブラリなど)がたくさん出てきており、そういう意味ではプログラムを書くのはラクになったのかも知れません。言語を始め、プログラミング環境は大…

Pythonの開発環境、デバッグ

Pythonでプログラムを書くとき、少し前までは付属の開発環境、IDLEというのを使っていました。小さいプログラムならよいのでしょうが、少し大きくなると不便を感じるようになりました。ぼくはほとんどコードをいくつものファイルに分けて書く、ということを…

スタック(データ構造の一種)とは何か

下のようにカッコが並んでいます。数式についたカッコと思えばよいでしょう。点検してみるとカッコの対応は正しいことが分かります。例えばこれが ((()(())だと正しい対応でないということになります。いったん開いたカッコは閉じなければなりません…

インタプリタを作る(6)雑談

記事「インタプリタを作る」の続きです。 www.omoshiro-suugaku.com 作成中のインタプリタは、例えば a = 3x = 6 - (2 + 3) * a + ax = x + a / 10 というコードを読んでちゃんと -5.7 と計算できるようになりました。通常の数値はもちろん変数も使うことが…

インタプリタを作る(5)雑談

最近数学のテーマが続いたので休憩です。ここのところ、インタプリタ作成に勤しんでいます。Pythonをそのまま使っているので、できあがったインタプリタ(新しい言語)は実行速度という点では期待できません。しかし、今や多くの人がPythonは使いますし、そ…

インタプリタを作る(4)字句解析とは何か

コロナ騒ぎもどうにか収まりつつあり、世の中が動き出しました。図書館も机は使えなくなっていて行っても勉強できず落ち着きませんが、本は借りられます。仕事も再開。この3ヶ月、それなりに勉強はしたけれど刺激がないのが辛かったです。学生はみんなかわい…

インタプリタを作る(3)電卓は入力された「534」からどうやって534という数値を求めているのか

ぼくたちは「534」を見るとすぐ「五百三十四」のことだと理解できます。一瞬で「3桁だから先頭の5は100の位で……」と分かるわけです。しかしコンピュータには、先頭から順に読んで「5」「3」「4」と並んでいるようにしか見えません。534と思わせるには5を読む…

インタプリタを作る(2)

前、「インタプリタを作る」というタイトルで記事を1本書きました。続きです。「インタプリタで作る」ではありません。「インタプリタを作る」です。インタプリタというのは何なのかここでも簡単に説明しますが、前の記事もご覧ください。 www.omoshiro-suug…

ゲームプログラミングの「スプライト」とは何か

2Dのゲームなどを作るときの「スプライト」という技術があります。正確な定義は知りませんが、実際にどんなものなのか説明しましょう。背景が表示されていて、そこで小さなキャラクタが動き回るときに使います。背景は固定、動くのはキャラクタだけです。こ…

徒然(つれづれ)なるまま、プログラミングについて……

学生時代から一応やっていて、今でもプログラミングが趣味です。30年前くらいでしょうか、その頃から「フリーウェア」という考え方はあったようです。(インターネットでなくパソコン通信のネットに)自作のソフトを登録して「無料です、気に入ったら使って…

『ゼロから作るDeep Learning③』紹介

面白そうだったので本屋さんで見つけて中身をざっと確認して即、買いました。楽しみです。未読ですが紹介します。 ゼロから作るDeep Learning ❸ ―フレームワーク編 作者:斎藤 康毅 発売日: 2020/04/20 メディア: 単行本(ソフトカバー) 同じ著者の先生の1冊…

新・写真から立体を再現(7)Pythonのコードを載せます

前回の続きです。2枚の写真を再掲。 とりあえず立体を再現するためのコードを載せておきます。2枚の写真は「a.jpg」、「b.jpg」としてありますが、変えられます。1枚目の写真のマジックの位置を25点、マウスでクリックします。それが終わったら対応順を間違…

新・写真から立体を再現(6)ちょっとCM。2枚の写真から立体を一応再現する。

CMです。細かい話はとりあえず後回し。「おおっ、パソコンと数学を使ってこんなことができるのか!?」と思っていただければO.K.です。 角度を変えて撮った2枚の写真に立体が写っています。基準となる立方体などは写っておらず、対象の立体だけです。ある程…

新・写真から立体を再現(3)3元4次の連立方程式を解く方法

前回の続きです。後で説明しますが、3枚の写真から基礎行列Fを求めるとき、(方法によりますが)3元(変数が3個)4次の連立方程式を解く必要があります。Pythonに何かないかなと思って探していたらSymPyというライブラリがありました。試してみたので紹…

新・写真から立体を再現(2)連立方程式の非自明解

「新・写真から立体を再現」では、エピポーラ方程式というものを使います(これについては別の回に説明します)。2枚の写真上の対応する点の組を方程式に代入してエピポーラ方程式に含まれる基礎行列Fを決定し、カメラ行列を求めます。このときAx=0の形…

写真から立体を再現(13)一応、フィナーレ!!

ここまでに紹介した事実を使って、理屈も(ある程度)説明しましょう。Pythonのコードも示します。過去の記事で使うのは以下です。必要に応じて参照してください。 www.omoshiro-suugaku.com www.omoshiro-suugaku.com www.omoshiro-suugaku.com www.omoshir…

写真から立体を再現(10) カメラ行列をRQ分解する

QR分解ではありません、RQ分解です。QR分解について書かれているサイトはたくさんありますがRQ分解については少ないようです。しかしこの分野(3Dビジョン)では必要です。 カメラ行列(透視投影行列)Pというのがありました。過去記事にあります…

Python、OpenCVでマウスのクリック位置を取得する

OpenCV(画像処理ライブラリ)でマウスのクリック位置を取得します。画像を表示しておき、その画像上でマウスイベント(右クリック、左ダブルクリック、……)が起こったときにコールされる関数を定義します。ここでは左クリックしたときに画像上の座標を取得…

写真から立体を再現(9) 固有値、固有ベクトル、非自明解を求める

後で使うので、固有値、固有ベクトル、連立方程式の非自明解を求めます。例によってPythonです。 #======================================================== #固有値、固有ベクトル、非自明解 # import sys import numpy as np A = np.array([[3, 1, 2], […

写真から立体を再現(8) 再び特異値分解(SVD)してみる

特異値分解の理解を確実なものにするため、サイズの違う行列で試してみます。前回にも書いたとおり、Python(Numpy)で特異値分解をした場合、結果の解釈がやや難しい部分があります。今回、行列は3×3、ランク2のものを使います。前回の表を再び載せておきま…

写真から立体を再現(7) 実際に特異値分解(SVD)してみる

Numpyの特異値分解は、結果の解釈に注意が必要です。説明します。 行列Aは、以下のように特異値分解(SVD)されるのでした。 過去の記事にあります。 www.omoshiro-suugaku.com Pythonのモジュール、Numpyの特異値分解では上のようでなく、別の形の結果が得…

ライプニッツの公式で円周率を計算できるか?(2)

ライプニッツの公式で円周率を求める話を書きました。www.omoshiro-suugaku.com 中学生の頃この話を聞いて、高校生になってから手に入れた電卓で円周率を求めようと頑張りました。ポケットコンピュータというのも現れ始め、これは当時で3万円くらい。何を使…

Pythonでいくつかの区画でいろいろなグラフを描く

Python、グラフも色々描けそうです。比較のためなど、いっぺんにいくつか表示することもできます。パラメータはたくさんあるようですが、ここでは本当に基本的なものを。 #======================================================== #画面をいくつかの区画…

肉声を電話の声に変換する

電話ので人の声を聞くと、ザラついていると言うか、いかにも「機械を通した声」と言うか、うまい表現の方法がこれ以上見つかりませんがそんな感じに聞こえます。とにかく直に聞いたのとは違いますよね。今回は肉声を電話を通したときの声に変換してみましょ…

wavファイルで、強い音は弱く、弱い音は強く記録し直す

音楽やその他の音が鳴っているとき、大きな音なら媒質(音を伝える媒体。空気や水など)は大きく、小さな音なら小さく揺れているはずです。wavファイルに記録するデータはそれをある程度反映しているのでしょう。媒質が変位していないならデータは0、変位し…

平均律、純正律のドミソの和音を聴き比べる

音階の話です。音の高さを少しずつ変えて音階ができあがります。音の周波数を少しずつ増やしてだんだん高くなるようにするのです。ラの音を440Hzとしましょう。まずラの音を鳴らすwavファイルを作ってみます。コードを載せておきますが、作り方は前にブログ…

ノイズ入りのwavファイルからノイズを消す

ここまでで確認した事実を組み合わせて、wavファイルのノイズを消す実験をしてみましょう。まず、以下のコードでノイズ入りのwavファイルを作ります。wavファイルの作り方は過去の記事を参照してください。 www.omoshiro-suugaku.com #=====================…