• ベストアンサー

整数値行列のベクトルによる行の置換

以前からちびちび考えていたのですが 原理的に不可能なような気もして、 ひょっとすると人生を無為に過ごしているかもしれないので 質問させてください。 整数値M×N次元行列{a[m,n]}に対して 整数値N次元ベクトル{b[n]}を  c[m,n] = a[m,n]+b[n] (mod q) と作用させたときc[m,n]がa[m,n]の 行の値の置換となっている すなわち、m=1,2,..,Mがある置換Pによって P(1),P(2),...,P(M)と置きかえられるとき  c[m,n] = a[P(m),n] となっている、行列aとベクトルbの組、そしてq を求めたいのですが こんな組み合わせってあるのでしょうか? ※置換の数はM!通りあるわけなので  それぞれに対応した変換を与える  ベクトル{b[m]}の組{{b[m]}}が  全部存在していて欲しいと思います。 ※もちろん  a[m,n] と a[m',n]はすべての(m,m')の組に対して  等しくないとします。 多分、a[m,n] と a[m',n] の値を上手い具合に 不等間隔に並べればいいかと思うのですが...? あるいは類似の問題(できれば、答えが導かれているもの) を教えていただければと思います。 MやNに制限は設けませんが、 できればある程度の大きさがあったほうがいいです (逆に、無限大というのもこまりますが) 以上、不明な点は補足させて頂きますので、 要求をお願い致します。 (回答はできるだけ簡単に  あらすじだけでも結構ですのでよろしくお願いします。)

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.2

この話、ベクトルも行列も関係ないでしょう。 列<a[m]> (m=1,2,....M。∀n,m(n≠m→a[n]≠a[m]))の各要素に定数bを加えて作った列 <c[m]> (∀m(c[m]=(a[m]+b) mod q)) が列<a[m]>の置換になっているようにしたい。そしてb(0<b<q )を変えるだけで全ての置換が網羅されるようにしたい。 という問題ですね。違います? そういう<M, <a[m]> , q>があったとしましょう。 さて、M個の要素に関する置換全部の集合をPとするとき、M個の要素に関する互換の集合SはS⊂P。従って、ある互換sについて <c[m]> = <a[s(m)]> = <(a[m]+b) mod q> となるbが存在する。従って任意のmについて、 <c[s(m)]> =<a[s(s(m))]> = <a[m]> つまり <a[m]> =<(a[m]+2b) mod q> でなくてはなりません。よって、 2b ≡ 0 (mod q) ゆえに2b=q でなくちゃならんことになりますね。 このようなbは一つしかない。一方、互換はM (M-1)/2個ある。よってM>2の時には無理。 だから、この問題は「不可能」が答、かな?

motsuan
質問者

お礼

stomachmanさん。回答ありがとうございます。 証明了解いたしました。もともとの問題は x の関数 f_j(x) (j=0,1,2,...,N) があって、  exp[ i (f_j(x)+ g(x)) ] = exp[ i f_P(j)(x) ] ( i は虚数単位) となるようなg(x)があったら、便利だろうな、というところから、行列になってしまいました。そういう都合がいいことはそうそう起こらないと思っていましたがやっぱりそうですか。 (※oodaikoさんが等差数列のときを示してくださったように、   同じ列に同じ値が複数含まれる場合はN>1で   行単位の置換の意味がちょっと違うのだなと思いました。   多分、の場合は同じ列に同じ値が複数含まれる場合を許す場合だと思います。   a[1,1]=1, a[1,2]=0, a[2,1]=1, a[2,1]=1 のようにです。   ただ、stomachmanさんの証明自体は生きますよね。) 方法としては、似たような置き換えを何回かくりかえしてもいいかと思っています。 (ごめんなさい、問題自体が固まっていないもんで。最終目標は、「とにかく足し算だけで置き換える」ということなんです。) a[m,n]+b_w[n] (mod q_w) (w=1,...,W) として(Wはできるだけ小さく)、何回か繰り返していつかは、目的とする置換になっているというようなイメージです。(歯車のついたくるくるお絵かき定規(?)みたいに(スピログラフというらしいです)。) ともあれ、stomachmanさんのおかげで一歩前進です。ありがとうございます。

その他の回答 (4)

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.5

め、滅相もない。全然怒ってないですてば。 えらそな事申し上げて、こちらこそ失礼しました。  modを使うのは周期性の意味ですよね。  必ずしも足し算に拘らないなら、いろんな系が作れそうに思われます。線形空間論、直交関数論で、応用数学として必要に迫られて開発された方法がたくさんある。  是非、新たな手法を開発なさることを期待しています。  直交性云々については、upしてから自分でアレ?と思ってました。見なかったことにしてくださいな。

motsuan
質問者

お礼

回答どうもありがとうございます。 質問の出し方がまずかったようです。また出直します。 どうもありがとうございました。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.4

> もともとの問題は x の関数 f_j(x) (j=0,1,2,...,N) があって、 > exp[ i (f_j(x)+ g(x)) ] = exp[ i f_P(j)(x) ] ( i は虚数単位) >となるようなg(x)があったら、便利だろうな 仮にあったとして、f_j(x)として好き勝手な関数が使えず、また直交どころか線形従属である。そういう関数族f_jがどう便利なのか、ちょっと想像が付きかねます。また、 > a[m,n]+b_w[n] (mod q_w) (w=1,...,W) つまり法qを毎回変えても良い、という風に問題を拡張していらっしゃいますが、「もともとの問題」に照らせばq = 2π/k (k∈正の自然数) 以外では意味を持たないのでは?  失礼を省みず、アドバイスということで:もし実用目的が何かあるのでしたら、それをストレートに質問なさった方が良さそうですよ。

motsuan
質問者

お礼

stomachmanさん、夜分遅くまでありがとうございます。 > exp[ i (f_j(x)+ g(x)) ] = exp[ i f_P(j)(x) ] ( i は虚数単位) はそのままです。空間に位相分布しているような波面を取りかえるようなものを考えています。すぐにどうこうというわけではないのですが、止まらない信号(メモリ/バッファを用いずに)を処理するような場合に使えるかなという程度です(他にはアナログCDM回路のようなものにもつかえるかもしれません・・・あとづけです)。f_j(x)というような分布を作ること自体が大変ですし、式のような変換は実際は原理的に無理だと思っています。  でも、他の似た形態では何かあるかもしれないので、そのヒントのようなものが得られればと考えて質問しました。以上の意味で、実用というよりは単なる興味=関連知識が欲しと思っています(その意味で、完全な回答よりも、刺激的なアイデアを期待しているとも言えるかも知れません)。もちろん答えそのものがあれば、それを応用して上記のような系への適用を考えるかもしれませんが。  ご気分を害されたのでしたら申し訳ありません。2次の合同式とか良く知らないもので、なんかその当たりで、こういう変な数を使えば上手くいくよとか、oodaikoさんのように、制限つきの入れ替えであればできるなどなにか示唆していただければと考えています。    さて、 >直交どころか線形従属である というご指摘ですが、exp[ i f_j(x) ] (j=1,2,...)という関数の系は線形従属ではないので それなりに意味があるのだと思います。また、 g(x)がある程度ランダムであれば、 exp[ i f_j(x) ] (j=1,2,...)は積分により内積を定義すればある程度直交性をもつようになると思います。(もちろんそんな系があればですが) >「もともとの問題」に照らせばq = 2π/k (k∈正の自然数) 以外では意味を持たないのでは? ですが、上記の具体的な系を何段かに組んだようにしてもいいかなという程度です。 というか、最初に述べたように具体的な構成があるわけではないので... stomachmanさんにお手を煩わせて大変申し訳ないと思っています。 本当に気軽な気持ちで訊いているだけなので、お叱りはごもっともだと思いますが許してください。

  • oodaiko
  • ベストアンサー率67% (126/186)
回答No.3

N=1なら簡単です。以後特に断らない限り演算や等式はすべて環Z/q 上で考えます。 すなわちmod qで考えます。 さてqは固定してN=1の場合を考えます。stmachmanさんが書かれているように この問題でベクトルとか行列は本質的なことではありません。問題を <a[1],a[2],…,a[m]>を Z/q 上の列とするとき すべてのi ∈{1,2,…,m} に対し a[i] + b = a[P(i)]となるような b ∈ Z/q と{1,2,…,m}上の置換Pが存在するための 条件を求めよ。 と言う形で考えてみましょう。 mを1つ固定して考えても、任意の置換に対して条件を満たすような {<a[i]>,b}が存在するとは言えないということはstomachmanさんの証明の通りです。 しかし置換の形によっては条件を満たすものも作れます。 以下で問題の条件に合うような m,<a[i]>,b,P の満たすべき条件を考えます。 証明をきちんと書こうとするとかなり表記が面倒なものになりそうなので概要だけ書きます。 (0) まずi≠jならa[i]≠a[j]と言う条件から当然 m≦q であることが必要です。 (1)さらに各成分 a[i] は公差k(ただしk∈{1,2,…,q})の循環する等差数列のそれぞれ 異なる要素であることが必要です。すなわち<a[i]>の要素を適当に並べ変えて a[i_1]+k = a[i_2] ,a[i_2]+k = a[i_3],… ,a[i_{m-1}]+k = a[i_{m}] ,a[i_{m}]+k = a[i_1] となっている必要があります。q = 12 としていくつかこのような等差数列の例を挙げると { 2,5,8,11 } (公差3), { 11 ,5 }(公差6) , { 0,1,2,3,4,5,6,7,8,9,10,11}(公差1) などです。 (2)ここで公差kは1からqまでの任意の整数をとることが出来ますがmは(1)の条件があるので kによって決まります。具体的にはkとqの最小公倍数をlとし、l = sk(これは通常の整数演算です) とするとm=sになります。従ってkがqの約数ならm = q/k、kとqが互いに素ならm = qとなります。 そこでqによっては取り得ないmもあります。例えばq = 12ならm= 5とすることはできません。 (3)もうおわかりだと思いますが(1)のような<a[i]>は問題の条件を満たし、そのときの bの値はkになります。証明は省略しますが、直観的に問題の要請を満たすものであることは おわかりいただけると思います。 q = 12 として例を作ってみましょう。k=10とします。等差数列として {1,11,9,7,5,3 }をとります。適当に並べ変えて a = ( 5,9,1,7,11,3 )としましょう。aの各要素に10を足したものは c = ( 3,7,11,5,9,1) となるので 置換P= /1 2 3 4 5 6\ \6 4 5 1 2 3/ によってc[i] = a[P(i)]と表現できます。 またbとして公差のt倍の数を取れば c[i] = a[P^t(i)]となります。 今の例で言えばk=20とすると c=(1,5,9,3,7,11)であって c[i] = a[P^2(i)]となっています。 (4)またどんな置換に対してもaがとれる訳ではなく、恒等置換以外で”不動点”がある置換 (すなわちP(i)= iとなるようなiが存在する)の場合は a はとれません。 それは不動点iに対してa[i]+ k = a[P(i)] = a[i]であるから必然的に k= 0となり 従って<c[i]>= <a[i]>となってしまうからです。 m > 2なら互換は不動点を持ちますから 互換に対して条件を満たすような<a[i]> ,bはとれません。 以上でN=1に対する問題はおわりです。 N ≧ 2 に対してはN=1の場合を応用します。 > N>1の場合は、各列が違う系列 ということですから、異なるkに対する等差数列を並べれば良いですね。 このとき公差k_1,k_2,…,k_Nに対する項数をそれぞれm_1,m_2,…,m_Nとすると 全体の項数mは{m_1,m_2,…,m_N}の最小公倍数である必要があります。 q=12の例を一つ作ってみましょう。 0  4  2  5 1  8  5  7 2  0  8  9 3  4  11 11 4  8  2  1 5  0  5  3 6  4  8  5 7  8  11 7 8  0  2  9 9  4  5  11 10 8  8  1 11 0  11 3   1列目の公差は1、2列目は4、3列目は3、4列目は2となっています。 そこでb= <1,4,3,2>となります。この行列の行を適当に入れ換えたものも 条件を満たします。また任意の列の要素を循環的に入れ換えても同様です。 なんだか符合理論のような匂いがしてきた…… というより情報代数の中ですでに知られている結果のような気がしてきました。 大部はしょったので計算ミスなどがあるかも知れません。わかりにくいところがあれば 補足要求して下さい。

motsuan
質問者

お礼

oodaikoさん、回答ありがとうございます。  等差数列で公差の倍数で変換するということですよね。 実例を交えてお示しいただきありがとうございます。  私が漠然と思っていたのは、たとえば、数列が a_n=c*n^2 のような2次式であたえられていれば、適当なqの合同式を考えて還元すると、ちょうど2次関数のグラフを還元すると、初めはゆっくり立ち上がって、あとになるほど傾きが急になることから、それを平行移動するような操作をするともう少しいろいろな変換が可能になるのかなということでした。(stomachmanさんに蹴られちゃったですけど。)  oodaikoさんに示して頂いたように、線形の場合も結構ランダムな変換が起こっているように見えるものだと感動しました。また、stomachmanさんのお礼にも書かせていただいたように、ちょっと見落としていた大事なところにもおかげで気がつきました。ありがとうございました。   oodaikoさんご指摘のように、この手のことは結構考えられているのかなと思いますので、もうちょっと、この質問を開いておきたいと思います。

  • oodaiko
  • ベストアンサー率67% (126/186)
回答No.1

補足要求です。 c[m,n] = a[m,n]+b[n] (mod q) とは何のことでしょうか。ベクトルと行列の和とはどういう風に定義するのでしょうか。 またmod q と言うのは(両辺がm×nの行列だとして)各成分がqを法として合同 と言う意味でしょうか。 また、(この式の右辺がm×nの行列だとして)ある置換Pによって c[m,n] = a[P(m),n] と表せるようなあるa,b,q の組が得られたとして >それぞれに対応した変換を与える >ベクトル(b[m])の組{(b[m])}が >全部存在していて欲しいと思います。 ということは行列aと整数qは固定して別の置換P'を持って来たら、そのP'に 対してもc'[m,n] = a[P'(m),n]となるようなb'が存在する。 そのようなa,qの組を求めたいと言うことなのでしょうか。 あと補足要求ではありませんがベクトルや行列は丸括弧を使って(a[m,n])、(b[m])と 書くべきです。この場合は一応ベクトル、行列と断っているので間違えることはないと いうものの、中括弧は集合を要素として書くときの記号なので、黙って{a[m,n]}と 書くと a[m,n] を要素とする集合の意味になってしまいます。 おっと追加質問です。 >ある置換Pによって >c[m,n] = a[P(m),n] >となっている この等式もmod q の意味での等式ですね。

motsuan
質問者

補足

補足要求ありがとうございます。 質問を出したあとしまったと思ったのですが、 出てくる行列とベクトルはすべてqを法として合同なものを考えてください。 > ということは行列aと整数qは固定して別の置換P'を持って来たら、そのP'に > 対してもc'[m,n] = a[P'(m),n]となるようなb'が存在する。 > そのようなa,qの組を求めたいと言うことなのでしょうか。 おっしゃるとおりです。 あともうひとつ設定を忘れておりました。 本質的にN=1の場合だけ考えれば良いので この場合だけ考えてくださっても良いかと思います。 N>1の場合は、各列が違う系列のものを求めていただければと思います。 つまり、n,n'が異なるときa[m,n]を 並べ替えただけのa[P(m),n’]のようなものではないものを 考えていただければと思います。 分かりにくい説明で申し訳ありませんがよろしくお願いします。

関連するQ&A

  • 行列式と置換

    A:p次行列、 B:(p,q)行列、 C=0、 D:q次行列 p + q = n 、X=(x_ij)のもとで    |AB| |X|= |CD| =|A|X|D| になる証明のプロセスについて質問します。 ------------------------------------------------------- i\j p q p  |AB| q  |CD| i > p, j≦p ⇒ x_ij=0 よって行列式の定義式 Σsign(σ) a_σ(1),1 ... a_σ(n),n において j≦p ⇒ σ(j)≦p  であるようなσに対する項だけが残る (ここまでは多分大丈夫です) この条件をみたすσは{1,・・・,p}の置換σ1と{p+1,・・・,n} の置換σ2の積として表わされる ・・・(*) (*)の部分がよく分かりません。 説明していただけないでしょうか、お願いします。

  • 二つの確率ベクトルの共分散行列

    n次元確率ベクトルXについての分散共分散行列 Cov(Xi, Xj)の説明は多くの教科書にあり理解しているのですが,p次元確率ベクトルPとq次元確率ベクトルQについての共分散行列 Cov(Pi, Qj) が何の指標になっているのかがわかりません.行列の各成分は何を表しているのでしょうか.直感的・幾何学的なイメージがつかめないのですが...

  • 行ベクトル

    |1234| |5678|=Aという行列を行ベクトル表示するとき |1234| [1234]では4次元数ベクトルではないため b=[1234]と表すことは出来ないが 行列を転置させれば [1234]は4次元数ベクトルとなるため tb=[1234]と表すことが出来るため 同じように考えていくと 行列Aは |tb1| |tb2|=A |tb3|   と表すことができる よってtb1をbに戻すと |1| |2|=b |3| |4| となる という考え方(解き方)は正しいですか? *bはベクトルです

  • 行列の要素にベクトルの成分をいれる?

    ベクトルの成分を行列にするというのは習いました。 では、ベクトルを並べて 例えば 2次元のベクトルA,BとベクトルC,Dがあり、それぞれを並べて ( (2,1) , (3.5) ) と ( (2,4), (1.6) ) というようにして、A,Cの内積、B,Dの内積が入った行列を導出するようなことはできますか? (A,B)・(C,D) = (A・C , B・D) 仮にベクトルの成分行列を要素に持つ行列があると仮定して、(C,D)行列を転置すれば行列の 掛け算はできますが、内積を行うようなこうはできるのでしょうか。

  • 3次元ベクトルの回転と行列

    3次元ベクトルA, B, Cを仮定します。ここで、AとBは既知のベクトルで、長さが同じとします。 その場合、当然ですがAを回転させるとBになります。 同様の作業をBにすることにより、Cのベクトルが得られます。 このCのベクトルを行列を用いて求めたいと考えているのですが、どうするか忘れてしまいました。 教えていただけるとありがたいです。

  • 線形代数 ベクトル空間と行列(ランク)の証明

    証明のやり方がよくわからなかったので次の2つの証明のやり方を わかる方どうか教えてください。 1、 Aを(m、n)行列 Bをn次の正則行列  Cをm次の正則行列とするとき   rank(CAB)=rank(AB)=rank(A) を示す。 2、 UをK上の有限次元ベクトル空間、WをUの部分ベクトル空間とする。 a1,a2,,,,,arをWの基底とするとWの次元がrということを示す。 この2つです。どちらか片方だけでもいいのでもし分かるかたがいたら よろしくお願いします。

  • 行列の比較

    M行N列(M×N)の行列A,B,Cがあるとき。 行列Aに対してBとCどちらが近いかを比較する方法には どのようなものがあるのでしょうか。 例 行列A(3×3) 1 1 1 1 1 1 1 1 1 行列B(3×3) 1 1 2 2 1 1 1 1 1 行列C(3×3) 2 2 2 2 2 2 2 2 2 例では誤差で考えるとBの方がAに近いのですが 行列内の互いの数値関係が同じ(同じ値)ということで Cの方がAに近い性質を現していることを数値で示したいと考えています つまり求めたいのは相関(?)のような近さです 思いつくのは一列づつ相関をとって最終的に全ての行での 平均をとる方法ですが 他に上手く(出来れば一つの数字で)近さの程度を表す方法や 一般的な方法があれば教えて頂けないでしょうか。 よろしくお願い致します。

  • 3次元ベクトルを2次元にしたい。

    空間上にあるベクトルA=(a,b,c)、ベクトルB=(p,q,r)(以下<→A>、<→B>で表す)も<→A>、<→B>を含む平面上から見れば2次元、つまり2つの成分のベクトルA’=(a’,b’)、ベクトルB’=(p’,q’) で表せると思うのですが、 このa',b',p',q'はa,b,c,p,q,rを用いてどのように表せますか? ヒントだけでもいいのでよろしくお願いします。

  • 行列をベクトルに(C言語)

    行列をベクトルに(C言語) m行n列の行列Aがあったとき、それをm×n行1列の行列(ベクトル)Bに するというプログラムを作りたいです。 これは、行列Aの1列目m行分の要素をそのまま行列Bの1行1列目に持っていき、 それを行列Aのn列の数だけ繰り返す、といった要領です(画像参照) つまり MATRIX B; B.m=A.m*A.n; B.n=1; return B; ということだと思うのですが、なかなかうまいくいきません。 また、構造体も使いたいので、 typedef struct { int m; int n; double *mat; } MATRIX; と宣言しました。 画像は説明のため、一応載せておきました。(例として4列の行列になっています) みなさんよろしくお願いします。

  • 行列について教えてください。

    行列についていくつか質問させて下さい。 1)(A+B)^-1の結果   (^-1は逆行列です。自分ではそのままA^-1+B^-1だ  と思うのですが・・・) 2)置換行列について 例えば、線形方程式Ax=b(A:正方行列,x:求める解)を解く問題でA^=PAQ,x^=Q^-1x,b^=Pbと置換行列P,Qを用いてその後の処理(行列分割)を行うと、本で読んだのですがなぜ、置換行列を使っておきかえるのでしょうか?  置換しなくてもその後の処理(行列分割)はできると思います。 一つでもいいので解かる方よろしくお願いします。