おれおれマークダウンで$\LaTeX$とRubyで数列
$\LaTeX$で数列を表示するのはけっこうめんどうなのでRubyを使って簡単に書ける方法を考えてみます。
まず普通に$LaTeX$でやると、
1,\;2,\;3,\;\cdots
実行結果$$1,\;2,\;3,\;\cdots
$$
埋め込みのRubyで素直に書くと、
print "$$"
print "1,\\;2,\\;3,\\;\\cdots"
print "$$"
実行結果$$1,\;2,\;3,\;\cdots$$
もうちょっと汎用的に書くと、
class Sequence
def getTerm(n)
n
end
end
print "$$"
s = Sequence.new
(1..3).each do |i|
print ",\\;" if i > 1
print s.getTerm(i)
end
print ",\\;\\cdots"
print "$$"
実行結果$$1,\;2,\;3,\;\cdots$$
これなら3乗とかでも、
class Sequence
def getTerm(n)
n ** 3
end
end
print "$$"
s = Sequence.new
(1..3).each do |i|
print ",\\;" if i > 1
print s.getTerm(i)
end
print ",\\;\\cdots"
print "$$"
実行結果$$1,\;8,\;27,\;\cdots$$
Sequenceクラスに直書きはださいので外に出しましょう。
class Sequence
attr_accessor :func
end
print "$$"
s = Sequence.new
s.func = lambda{|n| n ** 2}
(1..3).each do |i|
print ",\\;" if i > 1
print s.func.call(i)
end
print ",\\;\\cdots"
print "$$"
実行結果$$1,\;4,\;9,\;\cdots$$
整理しましょう。
class Sequence
attr_accessor :func
attr_accessor :base
def initialize(func, base)
@func = func
@base = base
end
def show(count)
(@base..@base + count - 1).each_with_index do |n, i|
print ",\\;" if i > 0
print @func.call(n)
end
print ",\\;\\cdots"
end
end
print "$$"
s = Sequence.new(lambda{|n| n ** 2}, 2)
s.show(4)
print "$$"
実行結果$$4,\;9,\;16,\;25,\;\cdots$$
なんとなく形が見えてきました。
フィボナッチ数列とかはどうしましょう?
class Sequence
attr_accessor :func
attr_accessor :base
def initialize(func, base)
@func = func
@base = base
end
def show(count)
(@base..@base + count - 1).each_with_index do |n, i|
print ",\\;" if i > 0
print @func.call(n)
end
print ",\\;\\cdots"
end
end
print "$$"
s = Sequence.new(
func = lambda { |n|
return 0 if n == 0
return 1 if n == 1
func.call(n - 1) + func.call(n - 2)
},
0)
s.show(10)
print "$$"
実行結果$$0,\;1,\;1,\;2,\;3,\;5,\;8,\;13,\;21,\;34,\;\cdots$$
問題なく出力できるようです。
コメント
コメントを投稿