線形代数の演習問題をジェネレートする [数学]
線形代数の講義で,「行列$A$の対角化をせよ」の問題は鉄板の一つであるが,整数成分の行列であってもランダムに選ぶと手計算では計算不能になってしまう.できれば,行列$A$は整数成分であって,なおかつ固有値が整数であるような問題にしたい.そうすれば,いらぬ分数の計算で演習問題を解く側の労働量をいたずらに増やすことは避けられる.
そのような$A$を得るには,整数成分で行列式が±1の行列$P$を作って,整数成分対角行列$B$によって
$A=P^{-1}BP$とすればよい.$P$は$GL(n,\mathbb Z)$の元が整数の範囲での基本行列の積で書けることを逆手に取ればいくらでも作れる.以下はsagemath用の関数の定義であり,行列式が±1の$n$次正方整数成分行列をランダムに生成する.$c,d$ は複雑性をコントロールするためのパラメーターである.
ある$n$に対してどのぐらいの$c,d$を選べばよいかは(いまのところ)試行錯誤による他ない.
対角化つながりで言えば,対称行列$A$を直交行列$U$で対角化せよ,というのも鉄板問題である.この種の問題は作るのがさらに難しい感じがあるがどうすればよいだろう.
そのような$A$を得るには,整数成分で行列式が±1の行列$P$を作って,整数成分対角行列$B$によって
$A=P^{-1}BP$とすればよい.$P$は$GL(n,\mathbb Z)$の元が整数の範囲での基本行列の積で書けることを逆手に取ればいくらでも作れる.以下はsagemath用の関数の定義であり,行列式が±1の$n$次正方整数成分行列をランダムに生成する.$c,d$ は複雑性をコントロールするためのパラメーターである.
def random_GLZ(n,c,d): A = identity_matrix(n) p=0 while p < c: a = int(random()*(2*d+1))-d i = int(random()*(n-0.1)) j = int(random()*(n-0.1)) if a == 0: A.swap_rows(i,j) elif i != j: A.add_multiple_of_row(i,j,a) p += 1 return A
ある$n$に対してどのぐらいの$c,d$を選べばよいかは(いまのところ)試行錯誤による他ない.
対角化つながりで言えば,対称行列$A$を直交行列$U$で対角化せよ,というのも鉄板問題である.この種の問題は作るのがさらに難しい感じがあるがどうすればよいだろう.
住んでる星 [数学]
環論が苦手。というか、全然わからない。しょせんはsmooth星の住人だから、部分多様体の変な交わりの様子とか全然わからない。代数幾何学者はそういうのがちゃんとわかってなきゃいけないような気がするけど、若い頃サボったせいで・・・学部レベルのこともおぼつかない・・・
のろい [数学]
呪うべきは自分の計算力のなさ.
あまりに計算力がないから,計算していくとすぐに矛盾する.色々違う方法で計算して検算して,どうにか矛盾を取り除いていく.
そういう風だから,僕のほうから見た数学の横顔はつねに矛盾に満ちている.それは単に僕の目が曇っているっていうことを都合よく言い換えたに過ぎない.
はじまる [数学]
ドウライケンの集会始まる.2週間は長いよなあ.
でも,ボルティモアでのやつとはちがって休みもたくさんあるから助かる.普段の生活のリズムをなるべく崩さずがんばりたいものだ.
なにか計算をしていると自分の直観に反する結果が出てきてしまうのだけど…反例も作れないし…だれにしつもんしたらいいもんだかわからない.あー,こまったー.
あたま良く生まれたかった・・・