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

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

プログラミング

雑記 Pythonは使いやすい? OSによる改行コードの違い

最近は使うプログラミング言語はPythonばかりです。さすがに慣れてきて、一応手元に辞書っぽいものを置き、ネットも使って分からないことを調べながらですが、あまり困らずに書いています。でもfor文などは多分C言語みたいな書き方をしてしまっている場面が…

インタプリタ作りは面白い!

架空のコンピュータ言語です。文法はぼくが決めました。BASICに近いですが、適当です。 とにかくこれをコンピュータに渡すと…… 1から100までの自然数の総和 = 5050.0 と表示されます。今回、上のような「プログラム」を渡すとそれに従っていろいろ作業してく…

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

中高生の夏休みは終わりですが、勉強は進んだでしょうか……。学生はみんなかわいそうだけれど一番は特に受験生です……。コロナは自然界のことだから仕方ないとしても、受験の制度など、勉強とは関係のない部分で人災に遭ったようなものです。 www.omoshiro-suu…

ニュートン法で方程式の解を求める

ニュートン法は、グラフの接線を利用して方程式の解の近似値を求める、効率のよい方法です。これについては前の記事があります。 www.omoshiro-suugaku.com このときは具体的にプログラムを書いて解を求めて……とはやりませんでした。今回は実験してみましょ…

落ち穂拾い(2)自分自身を印字するプログラムなど

①自分自身を印字するプログラム、という話があります。例えば…… Pythonで、 print(123) を実行すると 「123」という数値が表示されるだけです。つまりこのプログラムは自分自身を印字するプログラムではありません。 print('print (123)') では 「print (123…

2分法で方程式の解の近似値を求める

2分法を使って方程式の近似解を求めてみましょう。ロジックは単純だけれど、効率的に解を計算できます。 水色の線はy=f(x)のグラフです。グラフとx軸(左右に延びている直線)の交点の目盛りが方程式f(x)=0 の解なのでした。まず、f(p)<0、f(q)…

勾配降下法とは何か、分かりやすく説明します(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の特異値分解では上のようでなく、別の形の結果が得…