このブログ内を検索可能

2017年11月25日土曜日

雑記 宿題について1

ちょっと、とある数学の宿題をやろうとすると計画停電とかでINできなくなったので、ここでちょっととある問題について考えることにする。いわばメモ。後で消すかも。

問題はこれ。
任意の有理数に対し連分数展開のリストを与えよ。

たとえば10/7ならば、10/7=1+(3/7)=1+(1/(7/3))=1+(1/(2+(1/3)))なので、{1,2,3}がリストとして返される。つまりQからZ^nへの写像を与える。
(とりあえず有限回のリストで済むと仮定)

だがしかしこの問題、やっていることがユークリッドの互助法と似ていることに気づいた。
しかしこれをどうやって説明するかが問題。

まずある有理数に対して、それを超えない最大の整数をA1とする。これより大きければ展開が全てAnに対して正であるのに反するので、それはアウト。それ以下だとA2が0となって、以後ずっと0が続いてアウト。なのである有理数をQとおくと、ガウス記号を用いてA1=[Q]と表せて、それをQから除いたものをB1とするとB1=1/(Q-[Q])である。
以後帰納的に繰り返して、漸化式An+1=[Bn]∧Bn+1=1/(Bn-[Bn])を得ることになる。
リストとしては数列{An}を返せばよい。
これは関数の再帰的定義により実現し、ガウス記号はたぶんそういう関数は間違いなくmathematicaに常備されているであろう。

それと終了する条件を付さなければならないが、Bn+1が自然数となったときである。
何気に難しそうな問題に見えるが、正直相当簡単な部類といえる。


次の問題。多項式が与えられたとき、次数が3以上のものの多項式を抜き出すというもの。
たとえばPi^Pi+E^Pi+Pi^Eならば、Pi>3,E<3より次数3以上のものはPi^Pi,E^Piなので結局Pi^Pi+E^Piを返す関数を定義するということ。
(Piは円周率、Eはネイピア数)

これは…まずぱっと見て考えられるのがヘッドか…。”^”がついているのでPowerというものが対象。それで何らかの方法でa^xのxの部分を判定したい。あとはそのxに対して式を構成しなおす感じか…。これはなれていないのでヘルプっぽいものを見るしかない。

最後は気象データをCSVファイルでインポートして何か統計せよ、というもの。
なににしようか…。気圧と天気の関係とか、単純だが複雑で面白そう。

これ、普通の大学生にはちょっと厳しいのではないか…?と思う。
しかし本当は我、もうちょっと難しい問題を提供してくれてもいいのにと思う。
数学とプログラミングが混ざったような系統の話には相当強いので。
だてに8年間RPG作成に手を出していたわけではない。その8年間でいつのまにかプログラミングの構成法を学んでいたのだった…。

ところでモンパレの無差別BSまで残り3日。いよいよ楽しみになってきた。
いまだに無課金プレイヤーには勝てていない。
しかし今度の無差別では、おそらく無課金だと我のPTに勝てる可能性はかなり薄いはず。
我ががんばってサポを充実させた渾身の魔王PT。ぜひとも堪能していただきたい。