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

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

プログラミング

コンピュータ言語作成のすすめ。再帰コールの不思議。

再帰的なプログラムというのがあります。プログラムを書き始めたばかりの頃、そういうものがあるとは全く知らなかったときに再帰的なプログラムに出会ったときの衝撃は大きかったです。大学では情報処理の授業でFORTRANを習いましたが、今はどうか知りません…

Pythonで円周率を小数第100位まで求める(3)

今度は引き算を試してみます。関数 minus() を書きました。繰り下がりは、あれば cf = 1とし、なければ cf = 0 で処理します。各桁ごとに1桁の数の引き算をし、結果が負になったら繰り下がりありとして引き算の結果には10を加えます。これを繰り返します。 i…

Pythonで円周率を小数第100位まで求める(2)

まずリスト同士の足し算の関数を作ります。5831.6591 + 6019.4723 を計算します。リストAUに5831.6591の整数部分を、ADに小数部分を入れます。同様にBU、BDにも値をセットし、plus(AU, AD, BU, BD, CU, CD)をコールするとCU, CDに計算結果が入ります。Uはup…

Pythonで円周率を小数第100位まで求める(1)

円周率を試しに計算してみることにしました。今はPythonをよく使っているので、Pythonで。何回かに分けてやってみます。世の中には50兆桁まで計算した人がいるそうです(ウィキペディア)!! 頑張ったなあ……。でも、ここでは計算の理屈を整理し、実験をやっ…

さて次に何を勉強しようか……(2)

Pythonでインタプリタを作る、ということで頑張っていました。仕事もあったし結構時間はかかりましたがようやく完成。関数機能はもちろん、1次元ですが配列も装備! インタプリタ作成は1回目にはC++で、2回目にはC#で、今回は3回目です。C++からC#のときに…

Pythonのforループのカウンタについて。ちょっと驚きました……。

Pythonの話です。次のプログラム、実行結果はどうなるかご存じですか? for i in range(10): print('i = ', i) if i == 3: i = 8変数 i の値を0,1,2,……と1刻みで増やしながら表示します。3になったら i の値は8にセット。そのまま、i が9になるまで繰り返…

ハッシュ値を試す

ハッシュ値について前、簡単に説明しました。 www.omoshiro-suugaku.com 「このデータは誰か改ざんしていないだろうか?」という疑問に対して、ハッシュ関数が答えてくれます。ハッシュ関数はチェックサムのようなものです。チェックサムとは、データ(数値…

四元数(しげんすう、クオータニオン)を使ってみる(5)

せっかく四元数が使えるようになったので、いくつか実験しておきます。高校では今は複素数が表す図形などについて少し勉強するようになっていますが、前は行列をやっていました。ぼくも行列を習いました。数学BとかCとかいろんな科目の間をいろんな単元が…

四元数(しげんすう、クオータニオン)を使ってみる(4)

前回までに四元数を使って空間の点を回転する方法について調べました。再度載せておきます。 試してみましょう……と言いたいのですが、手作業だと絶望的な気分になります。4項の和×3項の和×4項の和 で、勘弁です。Pythonで計算できるみたいなので、調べてやっ…

雑記 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点、マウスでクリックします。それが終わったら対応順を間違…