数学

Ruby で循環小数を扱う

以前にも同様の試みをしたのですが(参照)、コードを始めから書き直しました。以前のは何か自分でもよくわからない、面倒なことをしているので。作ったのは Rational#to_rec_decimal と String#to_r で、前者は Rational(分数)を(String で表される)循…

GTK+ で落書き 12(Ruby)

三角形の内心・外心・重心・垂心・傍心 自分で求めた公式を使って、三角形の内接円と外接円を Ruby で描いてみました。 描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - C…

OpenGL で正多面体を回転させてみる その2(Ruby)

前回のエントリの隠面消去バージョンです。 5つのウィンドウが同時に立ち上がるのは同じです。コードは下のリンク先にあります。 OpenGL で正多面体を回転させる · GitHub

OpenGL で正多面体を回転させてみる(Ruby)

Ruby 用に OpenGL を手軽に使うライブラリ「miniopengl.rb」を書いたので、その例として 5つの正多面体すべてを回転させてみました。 正多面体のデータはここより頂戴しました。ありがとうございます。polyhedrons_obj.zip をダウンロードして解凍し、フォル…

フロイド−ワーシャル・アルゴリズム(Ruby)

フロイド−ワーシャル・アルゴリズムは、グラフの全点から全点へのすべての最短経路を求めます。重みは負値を許しますが、負閉路は許しません。上のようなグラフは次のようなハッシュで表現されます。頂点を表わすオブジェクトは何でもかまいません。 g = {a:…

RubyGem 'Salamander' でコッホ曲線を描く

以前、自作の Gem 'oekaki' でコッホ曲線を描いてみましたが(参照)、タートルグラフックスを実装している Gem 'salamander'(参照)を使って同じことをしてみました。4次のコッホ曲線です。 salamander_koch_curve.rb require 'salamander' require 'salam…

RubyGem 'Salamander' でヒルベルト曲線を描く

RubyGem 'Salamander' は Ruby/SDL を使ってタートルグラフックスを実装しています。これを使ってヒルベルト曲線を描いてみました。Linux Mint 18.2 と Ruby 2.3.3 で確認しています。インストールは Bundler で入りますが($ gem install salamander でもた…

「既約分数クイズ」を解く(Ruby, C言語)

ここのところで結城先生の「既約分数クイズ」のことを知りました。結城先生らしい「お話」仕立てですので、是非参照して頂きたいですが、簡単にいうと 問題:正の整数Nが与えられているとき、 以下の条件を満たす既約分数p/qを「すべて」求めるアルゴリズム…

フォードの円、GTK+ で落書き10(Ruby)

いわゆる「フォードの円」というものを描いてみました。これについてはここで知ったものです。ありがとうございます。Ruby で描きました。描画には自作の Gem 'oekaki' を使っています。 oekaki_sample10.rb require 'oekaki' Width, Height = 500, 500 Oeka…

ドラゴン曲線を描く(Ruby)

自己相似図形であるドラゴン曲線を Ruby で描いてみました。 3次。 5次。 10次。これだと確かにドラゴンみたいですね。 描画には自作の Gem 'oekaki' を使っています。 require 'oekaki' Width, Height = 600, 400 class Point < Struct.new(:x, :y) end Oek…

マンデルブロ集合を描いてみる(Ruby)

このサイトのそのままパクリです(ありがとうございます!)。やったのは Java から Ruby へ移植しただけ。 def mandelbrot_count(c) z = Complex(0) 100.times do |i| z = z ** 2 + c return i if z.abs > 10 end 100 end Diff = 0.001 io = open("mandelbr…

コッホ曲線を描く(Python, Ruby)

自己相似図形であるコッホ曲線を Python と Ruby で描いてみました。 Python では手軽にタートル・グラフィックスが使えるので、これを利用するのが簡単です。 3次のコッホ曲線を描きます。 from turtle import * def draw(length, depth): if depth == 0: f…

Ruby でローレンツアトラクタを描画する

Ruby + gnuplot でローレンツアトラクタを描いてみました。 全体的にここなどを参考にしました。微分方程式はオイラー法(参考)で数値計算しています。gnuplot での描画は numo/gnuplot という Gem を使っています。 require 'numo/gnuplot' fx = lambda {|…

「孤独の7」を Ruby で

rscの日記さんのところで、「孤独の7」という虫喰い算を知りました。問題は右の画像のとおりです。ここで回答を募集していたようです。 Ruby で解きました。かかった時間はほぼ 0.1秒です(答えの uniqueness のチェックなし。チェックすると 0.7秒程度)。R…

複素フィボナッチ数列と GTK+ お絵かき

GTK+でお絵かきしてみた(Ruby) - Camera Obscura これまで mygtk.rb と言っていた GTK+ お絵かきモジュールを、Gem 'oekaki' として RubyGems.org に登録いたしました。よろしかったら使ってやって下さい。 oekaki | RubyGems.org | your community gem ho…

コンウェイのライフゲームを Ruby で実装してみた

有名な「コンウェイのライフゲーム」を素朴に実装してみました。一種の生態系シミュレーションですね。ルールは簡単です。「セル」が集まって長方形領域を形成しているとき、それぞれの「セル」はまわりの 8つの「セル」の状態によって「生きる」か「死ぬ」…

Python の Turtle でヒルベルト曲線

タートルグラフィックスは再帰的な図形を描くのに適しています。Python では組み込みで簡単にタートルグラフィックスが利用できるので(参照)、ヒルベルト曲線を描いてみました。5次のヒルベルト曲線です。 コードは以下です。驚くほど簡単ですね。 from tu…

GTK+でヒルベルト曲線(Ruby)

前記事の Ruby/GTK+ 用のモジュールを使って、ヒルベルト曲線を描いてみました。Ruby/Tk 版(参照)と殆ど同じです。 require './mygtk' class Draw def initialize(n, slot) @lgth = Width / 2 ** n @y = (Width - @lgth * (2 ** n - 1)) / 2 #見栄えを整え…

gnuplot で陰関数の表示(Ruby)

Python の matplotlib の plot_implicit による陰関数の描画がどうも信用ならないので、gnuplot でやってみることを考えた。しかし gnuplot 自体には陰関数を直接描画する機能はないので、工夫が必要となる。gnuplot で陰関数を描く 基本的には上サイトでや…

Python で陰関数のグラフの表示

ここを参考にしました。関数は id:mathnb さんの出題されたものです(参照)。コードはこんな感じ。plot_implicit というのが陰関数の表示なのでしょうね。 from sympy import * x, y = symbols("x y") f = x ** 6 + 3 * x ** 4 * y ** 2 + 6 * x ** 4 * y -…

Python に連立方程式を解かせる

定点を通る球の接平面 - オベリスク備忘録 上では手計算で解いたのですが、Python で機械的に解けるようなので。Sympy というライブラリを使っています。おお、すごい。これ、ライブラリはどうやっているのかな。 ※参考 Pythonを使って一瞬で連立方程式を解…

いわゆる「ビュフォンの針」の同心円バージョンについて

いつも拝読している「完全無欠で荒唐無稽な夢」というブログがあるのですが、そのコメント欄にこんなことが書いてありました。 こんにちは ^^ またお願いなんですが…^^; ビュフォンの針:平行線の間隔の半分の長さの針が平行線と交わる確率が1/πというもので…

シンプソンの公式による数値積分(Ruby)

Rubyによる情報科学入門作者: 久野靖出版社/メーカー: 近代科学社発売日: 2008/12メディア: 単行本 クリック: 5回この商品を含むブログ (13件) を見る f(x) = x^2 を [1, 10] の区間で数値積分してみます。ここでは区間を100分割します。ちなみに、正しい答…

1変数方程式を数値計算で解く(Ruby)

Rubyによる情報科学入門作者: 久野靖出版社/メーカー: 近代科学社発売日: 2008/12メディア: 単行本 クリック: 5回この商品を含むブログ (13件) を見る方程式 f(x) = 0 を ある区間 [a, b] において、f(x) が単調増加、連続、f(a) 0 であるとして、数値計算で…

「rscの日記」さんが紹介されていた問題を解く(Ruby)

またまた「rscの日記」さんが紹介されていた問題を Ruby で解いてみました。問題はこちらです。 A~Eの5人はある事業所に勤務する派遣社員である。この5人のある月曜日から金曜日までの出勤状況について次のことがわかっているとき、正しくいえるのはどれ…

Ruby の C拡張で約数を求めるメソッドを書いた

なぜか Ruby 本体には、約数を求めるメソッドがないようですので、C拡張で作ってみました。以前書いた Utilsc への機能追加です。コードは必要な部分だけ載せます。全体のコードはここ です。 #include "utilsc.h" #include "math.h" VALUE divisors(VALUE s…

Ruby で OpenGL

Ruby でも OpenGL が使えるようですが、日本語ではぐぐっても古い情報が多いので、できるかやってみました。Linux Mint 17.2, Ruby 2.2.3 で確認しました。'OpenGL' という Gem(公式HP)を入れればいいのですが、その前に Linux の OpenGL 関係のライブラリ…

プロジェクト・オイラーの Problem 68, 69

Problem 68。 def sum(i); @b[i].inject(:+); end max = 0 @b = Array.new(5) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1].permutation(10) do |a| next unless a[0] == 10 or a[1] == 10 or a[2] == 10 or a[3] == 10 or a[4] == 10 @b[0] = [a[0], a[5], a[6]] @b[1]…

Ruby で gnuplot を使い関数グラフを描く

Python の pylab で簡単に関数グラフが描けたので(参照)、Ruby でも出来ないかとぐぐってみたところ、なかなか簡単なやつがありました。Linux で使える Gnuplot というツールのラッパーGem があったので使ってみます(ソースコード)。すでにここにとても…

Python 3.4 に matplotlib を入れる

T_NAKA さんのブログを拝見していたら(参照)、Python で簡単に数学の関数グラフが描けるようである。これはいいというので、自分も試してみました。コードはこんなに簡単。 from numpy import * import pylab as plt x = linspace(-10, 10, 100) y = x plt…

Tree構造を利用して問題を解いてみる(Ruby)

前回実装した Tree構造を使って、プロジェクト・オイラーの問61を解いてみました。問題はこれです。

不等式の一問題

また rscの日記さんのところからです。もとの問題はこちら。 ある塾のA組からC組までの3つの組には、合計105人の生徒が在籍しており、それぞれの組の生徒数に関して、次のア、イのことがわかっている。 ア B組の生徒数の3倍は、A組の生徒数の2倍より5人以上…

質問投稿サイトの問題を解く

また rscの日記さんのところにあった問題です。おもしろそうなので Ruby で解いてみました。元の問題はこれです。問題をコピペしておきます。 円卓の判断推理 問題 A~E の5人が円卓に等間隔で着席している。5人のうち女性は2人で、この2人の席は隣り合…

google の入社試験

rscの日記さんのところで知りました。 Googleの入社試験です。次の覆面算を解きなさい : IT速報 WWWDOT - GOOGLE = DOTCOM ただし、EとMは交換可能。Ruby で解いてみました。 def to_int(a, b, c, d ,e, f) a * 10 ** 5 + b * 10 ** 4 + c * 10 ** 3 + d * 1…

分数を循環小数に直すメソッドを作った(Ruby)

※注記 のちに全面的に書き直しました。 割り算をするとき、場合によっては割り切れず、小数部分が循環して無限に続くことがあります。これが「循環小数(recurring decimal)」です。これを扱うメソッドを作ってみました。 Rational クラスのインスタンス・…

プロジェクト・オイラーで遊ぶ(3)

ここの続きです。Ruby でやっています。 ※追記 本家サイトに登録すると、答えがチェックできるのですね。ここまではすべて正しいことを確認しました。答えは消しておきます。

プロジェクト・オイラーで遊ぶ(2)

ここの続きです。Ruby でやっています。

整数を2数の積に分ける/約数を求める

例えば 48 は、2 * 24, 3 * 16, 4 * 12, 6 * 8 に分けられますね。これを Ruby の Integer#divide2 メソッドとして実装しました。ペアを配列に格納して返します(そのようなペアがなければ、空の配列を返します)。引数に true を取れば、自明な 1 * 48 のよ…

プロジェクト・オイラーで遊ぶ(Ruby)

Project Euler - PukiWiki プロジェクト・オイラーというのは、数学の問題をプログラムで解いてみようというものです。全部解こうとか、そういう殊勝な決意ではないのですが、ちょっとだけ Ruby で遊んでみました。結果は保証の限りではありません。

質問の線形代数の行列の問題を Ruby で

質問の線形代数の行列の問題をPythonで解いてみた。 - rscの日記 rsc さんが Python でやっているのを、Ruby でやってみました。元の問題はこれです。自力では解けませんでした。組み合わせの数を劇的に減らすのがコツですね。 ans = [] target = [12, 20, 2…

n次対称群

クラス Group についてはひとつ前のエントリを見てください。 変数 od に次数を入れます。かなり時間がかかる。自分の環境だと、5次で 40秒くらい、6次で 2.8時間くらい。次数が大きくなったら、結合法則の確認をスキップした方がいいかも知れない。 od = 5 …

有限群の実装(Ruby)

クラス Group#initialize の set は定義された集合(配列)、op は定義された演算(Proc オブジェクト)。@ie は単位元、@order は位数、インスタンスメソッド inverse(a) は a の逆元を与えます。(結合法則の確認はひどく時間がかかる場合があるので、引数…

3次の置換(Ruby)

「"012"→num の置換」でひとつの元。perm3[num1, num2] は2つの元の積を表す。 #permutation(置換) perm3 = lambda do |num1, num2| n1 = num1.chars.map(&:to_i) n2 = num2.chars.map(&:to_i) n1.map {|i| n2[i]}.join end perm3["210", "012"] #=>"210" …

簡単なチューリング・マシン

「P≠NP」問題 現代数学の超難問 (ブルーバックス)作者: 野崎昭弘出版社/メーカー: 講談社発売日: 2015/09/18メディア: 新書この商品を含むブログ (1件) を見るの第二章のチューリング・マシンを、Ruby で実装してみました。コードは以下です。pg は動作規則…

ユークリッドの互除法を Ruby で

ユークリッドの互除法(Euclidean Algorithm)を使って、最大公約数を求めます。99400891 と 99221377 の最大公約数は 9973 です。プログラムは以下のとおり。再帰を使う典型的な問題でしょう。 def ea(m, n) return m if n == 0 ea(n, m % n) end puts ea(9…

n進数から 10進数へ(Ruby)

Ruby で 10進数を n進数に直すのは int.to_s で出来ます。しかし、その逆(n進数から 10進数へ)ができるかわからなかったので、メソッドを作ってみました。ただし、n は 2 から 10 までです。アルファベットを使って、36進数まで出来ないことはないですが、…

「なかなか収束しない級数の数値計算例」を自分もやってみた

id:Hyperion64 さんのブログの、 なかなか収束しない級数の数値計算例 - 完全無欠で荒唐無稽な夢 の記事が興味深かったので、ちょっと Ruby でやってみた。級数 の極限を求めようというのである。こういうコードでやってみた。Ruby は、任意の精度で 10 進表…

Ruby で素因数分解

素因数分解を Ruby でやってやろうかと思ったのだが、既に標準添付ライブラリに用意してありました… require 'prime' p Prime.prime_division(252) #=>[[2, 2], [3, 2], [7, 1]] 結果が配列で帰ってきます。これは という意味です。簡単だなあ。その他にも、…

或るゲームのくじの確率(その2)

ちょっと前に、Yahoo!知恵袋の問題で ゲームのくじの確率を計算して欲しいです・当たりは14%です... - Yahoo!知恵袋 というのを、Ruby で強引に解いた記事を書いた(参照)。確率は 8.06% くらいと求まったのだが、これは乱数を使った推定である。しかし、…

或るゲームのくじの確率

ゲームのくじの確率を計算して欲しいです・当たりは14%です... - Yahoo!知恵袋 Yahoo!知恵袋で上のような問題があった。最初は手計算でやろうと思ったが、非常に面倒な計算になるので挫折。で、Ruby で強引に計算してみた。結果は 8.06%ほどと出た。さて、…