皆さん、rubyをいじっていると微分したくなる事、よくありますよね?
…
rubyで微分!?(;゜0゜)他でやれよ(;゜0゜)
今にもそんな怒号が聞こえてきそうですが、作ってしまいました。
まだ作り込みが少し足りませんが、早漏なので公開してしまいました。
(割と普通になんでも微分出来ます。絶賛contributorさん募集中です。)
http://rubygems.org/gems/dydx
https://github.com/gogotanaka/dydx
見てもらうのが一番早いと思うのでこんな感じです。↓
( d/dx(x ^ 2) ).to_s
=> "( 2 * x )"
# 以下to_sを省略
d/dx(e ^ x)
=> "( e ^ x )"
d/dz(log(z))
=> "( 1 / z )"
d/dx(x ^ n)
=> "( n * ( x ^ ( n - 1 ) ) )"
グローバル変数に関数を格納すればdy/dxみたいにも出来る
$y = cos(x)
dy/dx
=> "( - sin( x ) )"
$x = a * ( (t ^ 2) / 2 )
dx/dt
=> "( a * t )"
d/dt(dx/dt) # これはそのうち (d/dt)^2(x) とも書けるようにする.
=>"a"
メソッドチェーンも出来る
((x ^ 2) * y).d(x)
=> "( ( 2 * x ) * y )"
((x ^ 2) * y).d(x).d(y)
=> "( 2 * x )"
こんな感じです。式が長くなると約分だったり因数をまとめるのがうまくいかなかったりするかもです。
(ここはもっと抽象代数的な手法でなんとかしたいと思っています。)
そろそろ微分したくなってきましたか?
使い方です。
一番手っ取り早いのはgem install してirbでrequireしましょう。
(こんなクソgem 管理下に入れたくないわーて場合はよしなに)
gem install dydx
irb
require 'dydx'
とdydxをrequireした後に、
include Dydx
すれば、そこには微分の世界が広がっています。
いや冷静にこのgem、誰得なの
…
割とぐうの音も出ませんが、マジレスすると、
微分も大事ですが代数的構造をrubyなりプログラミング言語内でうまく扱えたら、
絶対いいと思うんです。
例えば、群構造や環構造をプログラミング上で思い通りに扱えたらどうでしょう。
なんとステキではないでしょうか。
有名なところでいうとルービックキューブの郡構造を簡単に規定できからルービックキューブの解を簡単に出せたりしますね。
僕のdydx gemの中では代数思考プログラミングの示唆しか与えらていませんが、このgemを育てていく過程でこのあたりがもっと発達すれば夢、広がリングですよね。
まああと、微積分が完璧に扱えれば絶対便利です(流行の統計解析とかにいいかも)
ふぅ。
お後がよろしいようで。ノシ