• 締切済み

隣接行列の表示

MATLAB初心者です。 隣接行列をグラフにしたいのですが、 gplotで描こうとするとgplot(A,B)のBの部分を 入れないといけません。 今1000*1000の隣接行列のデータはあるのです(Aはできている)がこれらを自動でうまく配置して表示するにはどうしたらよいのでしょうか?

みんなの回答

  • mtblue
  • ベストアンサー率100% (3/3)
回答No.1

このWebページの新参者です. MATLABは普段業務等でチョコチョコと使っています. いまさらですが,このご質問を見てgplotを使ってみました. (グラフ理論はちょっとかじった程度です.) ヘルプを見てみると,隣接行列を2次元グラフに表示するものですね. ですから,gplotを使う場合,グラフの隣接行列(この場合,行列A)とノードの座標系が必要になります. >これらを自動でうまく配置 したいことですが,各ノードの座標を計算するM-ファイルを作成すればよいかと思います. もし,この座標が計算できないのであれば手作業で入れていくしかないと思います. うまく回答できたがわかりませんが,これからも頑張ってください.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 隣接行列プログラム

    隣接行列を使ったグラフ探索のプログラムを作りたいのですが。。 手も足もでません。どなたか助けていただけないでしょうか?? まずstate.txt 1 2 3 0 といったフォーマットに従った状態空間が記述された テキストファイルを読み込んで、隣接行列を動的に作成し、 さらにその状態空間をfwrite()を用いてバイナリ形式のファイルにする。 実行時のコマンドラインは次の書式に従う。 > ./MakeGraph テキストファイル(読み込み元) 状態空間(書き込み元) 状態数 [Enter] もうひとつは、上で作成した状態空間ファイル(バイナリ形式)をmalloc(),fread()を用いて メモリ上に復元し、経路探索を行う。 ただし、オプション指定で縦型探索と横型探索を切り替えられるようにすること。 実行時のコマンドラインは次の書式に従う。 > ./Search [-bd] 状態空間ファイル  状態数  開始状態  終了状態 [Enter] ちなみに、 使用例 > ./MakeGraph state.txt state.bin 4 [Enter] > ./Search -d state.bin 4 1 0 [Enter] > ./Search -b state.bin 4 3 3 [Enter] > ./Search -bd state.bin 4 2 0 [Enter] 結果例 1-0 : d : 0 <- 3 <- 1 3-3 : b : 3 <- 1 <- 0 <- 3 2-0 : b : Not Found... 2-0 : d : Not Found... これらを作るうえでのヒントのようなものもあるのですが、さっぱりで。。 状態空間をファイルから取り込むため、隣接行列で表現した状態空間のサイズは可変、 (たとえば、状態数5ならば、25個)である。したがって、メモリは動的に確保する必要がある。 また探索時に容易に扱えるようにするため、隣接行列は2次元配列であることが望ましい。 しかし、2次元の動的確保は難易度が高いので、1次元配列の動的確保を応用することで考える。 1次元配列を状態数2個確保し、2点の座標を指定することで、要求する要素へ アクセスできるマクロCoordinates(x, y, size)を用意する。 このマクロを利用すれば、1次元配列で確保したデータを2次元として扱うことができる。 ****************************************** MakeGraph.cとSearch.cは次にあります。 ここにはのせきれなかったので。。 お手数おかけします。 http://mugen.cc.osaka-kyoiku.ac.jp/pg/ あとstate.txt のフォーマットは次のようになっています。 これはデータ構造などででてくる有向グラフを隣接行列で示した場合、 スタート地点の状態0から状態1に(0→1) 状態1から状態2と、ゴールの状態3に(1→2、1→3) ゴールの状態3からスタート地点の状態0に(3→0) となっていた場合に、状態0~3までのリンク先をあらわしたものです。 単に、机上において、隣接行列で表現すると   0 1 2 3 0 0 1 0 0 1 0 0 1 1 2 0 0 0 0 3 1 0 0 0 となります。(線がはいっていないのでややこしいかもしれませんが。。) これと同じ意味で、 1 (状態0のリンク先で、1の直後に¥n) 2 3 (状態1のリンク先で、2と3の間に空白、さらに3の後ろに¥n)   (状態2のリンク先はなにもないので、まっしろ) 0 (状態3のリンク先) となっています。こういう説明で伝わっているかわかりませんが、 よろしくおねがいします!!

  • Scilabで行列をグラフ化したいのですが…

    Scilabで行列をグラフ化したいのですが… すみません、Scilabを使っていて詰まってしまったので初心者なゆえ質問させてください。 行列をMatplotを使ってグラフ化しようとしたのですが、 グラフ化するとなぜかオートスケールがきかず出力画面が真っ黒になってしまいます。 おそらく、カラーマップでナンバー1が黒なので行列内にある2未満の数値がすべて 黒として表示されているのだと思います。 行列内の数値はすべて0以上1未満でしたので。 ここで例えば、 A=[0 0.5:1 2]; Matplot(A) とすると要素(2,2)だけが青色でほかすべてが黒の二次元グラフができるかと思います。 (カラーマップ2が青なので) 理想は行列内のMAX値を一番明るくし、0を今までどおりの黒にしたいです。 ここに行列Bがあり、 B=[0 0.3 0.2:0 0 0.5] とするならば、 0.5を一番明るくして0に近づくほどその色を黒にしていく。 こんなグラフが欲しいと思っています。 できますでしょうか?? 無知ですみません、よろしくお願いします。

  • Matlab 2行の行列をプロットしたいのですが

    こんにちは、Matlabを使い始めのものです。 二行の行列(2x10とか2x40など)にについて、一行目をx座標、二行目をy座標としてグラフ化したいのですが、うまくいきません。 自動的にx座標は列の番号となり、二つのグラフが現れてしまいます:y座標に一行目、二行目、両方がプロットされてしまいます。どうにか、一行目をx、二行目をy座標としてグラフ化できないでしょうか。おそらく、とても単純なことなのかもしれないのですが、どうしてもわからず、とても歯がゆい思いをしています・・・。どうかご教示ください。 何をしたいかといいますと、音声データをMatlabで取り込んだのですが、振幅データがずらっと並んだ、1x500000とかの行列が得られます。 これを、プロットすると、x軸はサンプル番号が並ぶわけですが、本当はx軸は時間であって欲しいため、音声データの行列にひとつ行を足して、時間軸を作ってあげました。つまり、今手元にあるのは、2x500000の行列で、一行目が時間、二行目が振幅となっています。これをx軸が時間軸、でy軸が振幅となるようにグラフ化してあげたいと考えています。 文章がわかり辛くて申し訳ないのですが、何卒よろしくお願いします。

  • Excelで行列を入替えるマクロ

    よろしくお願いいたします。 A1~Q2までデータが入っています。 A1~Q1はタイトル、A2~Q2は内容です。 これを、 (1)A1~B17に行列を入替えて貼り付けする (2)列幅をA列を20、B列を65、行の高さが12~16行目までを60 (3)縦位置の配置を中央揃えにする この(1)~(3)をボタン1つで実行したいのです。 初心者です。よろしくお願いいたします。

  • matlab初心者の質問

    matlabに関する質問です。(私は初心者です。) 例えば A=[1 2 3 … n] のような行列があった場合、 B=[1 1+2 1+2+3 … sum(A(1:n))] のような行列を表示するにはどのようなコードを書けばいいのでしょうか。

  • 多項式を行列式で表示したい

    次の多項式(1)をただ一つの行列式 det(A) で表示したいのですが, 可能でしょうか? A=a+cd+ef+gh ・・・(1) 例えば,(1)のAは,2行2列の行列式を用いれば, A= |a 0|+|c 0|+|e 0|+|g 0|    |□ 1| |△ d| |◇ f| |▽ h| と書けるますが,これではいけません.det(A)を4行4列の行列式で det(A)=|a  c  e  g| ・・・(2)       |☆ ☆ ☆ ☆|       |△ △ △ △|       |□ □ □ □| と表示したいのです.例えば,Bを B=a+cd+ef ・・・(3) とすると,det(B)は, det(B)= |  a  c  e|       | 0  f -d|       |-1 0 1/f| と表示出来ます.では,det(A)はどうでしょう? 4行4列の行列式表示が可能でしょうか?

  • 行列計算の速度

    行列計算の速度 今、スパース行列計算のプログラミングをしているのですが、Cで作成していて、計算速度について考慮しています。同じような計算をmatlabでさせてみたら、matlabでの行列計算は圧倒的に速かったので、matlabを使う事を考えてます。行列計算を得意とするmatlabなのですが、matlabはCを使っているので、Cでのプログラミングをあきらめるべきなのか考えています。 Cもmatlabも良い点、悪い点はあると思いますが、何か参考になるアドバイスがあればいいなと思って、投稿させてもらいました。お願いします。

  • 行列計算で、できること

    先日、 MatLabの超初心者講習に お呼ばれしてきたのですが、 すごいですね! 非常に興味深いです。 何だか、何でもできそう… と、言う点で 何も知らずに、Pcを初めて手に入れちゃった。!! そんな、デジャブー的なものを 感じました。 ただ Pcでも同じですが やはり「何ができるか」を知り 能動的に活用しないと 立ち上げただけでは 何もできないのが必定、 ですよね?… MatLabは、行列演算が基本とか そこで 質問させてください。 行列演算 多種多様なことができそうで、 現在もなお 研究すらされてそうですが 何ができるのでしょうか? 我ながら、バカな質問だ とは、思いますが、 どうぞ 宜しくお願い致します。

  • ある行列とその転置行列の積の逆行列は?

    今エクセルで行列を使って問題を解いています。 問題は 行列X、A、Yがあり、Xは1行4列、Aは1行2列、Yは1行4列です。 X・A=Y という式があり、Aの行列は未知数a,bの要素からなっています。 X,Yはそれぞれ数値として要素が決まっています。 ここからはヒントとして表示されていました。 そこでXの逆行列を両辺の左からかけるとAは求まるはずですが、 Xは正方行列ではないので、Xの転置行列を左からかけます。 X(T)・Xは正方行列になるのでこれを行列Pとおくと Pの逆行列を求められ、右辺にP^-1をかけるとAが求まる。 というものです。 エクセルで書かれている通りにやってみて、エラーになるので調べてみると、XとXの転置行列の積の行列式は要素にかかわらず0になるようです。 実際に数値ではなく、abcdでやってみたところ0のようです。 この場合、逆行列は存在しないのではないかと思いますが、このヒントが間違っているとはあまり思えず、困っています。 補足ですが、この問題は最小二乗法をエクセルで行列を用いて行うという趣旨です。 もとのデータとして(x、y)の座標が4点与えられており、行列Xはxの要素を縦にならべたもの、Aは最小二乗法で求める一次関数式のパラメーターa,bで、YはXと同様座標のy要素です。 私の理解が間違っていて、何行何列という部分に誤りがあるなどの指摘があれば、ぜひお願いいたします。 そもそもある行列とその転置行列の積の逆行列は存在するのかどうかもお願いします。 締め切りが近く、ちょっとあせっています。 よろしくお願いします!!

  • 逆行列の行列による微分

    今、あるシステムを構成したく行列方程式を解こうとしているのですが、行き詰ってしまったので質問させていただきます。 YとAを5×1行列、Bを5×3行列、Xをスカラ、Wを5×5行列、Hを3×1行列,B'はBの共役転置行列として、 Y = (A+BH)X・・・(1) H = -inv(B'WB)B'WA・・・(2) とします。 ((2)を(1)に代入した状態で)Y'Y=Jとおいて、∂J/∂W=0となるようなWを求めようとしているのですが、逆行列の行列による微分などが出てきてしまい、まったくわからなくなってしまいました。 これは解けるのでしょうか? 行列をvec関数を使ってベクトルになおしてみたりしたのですがinv()の部分がわからなくて・・・。 逆行列の行列による微分さえわかれば何とかなるような気もするのですが・・・。 解けるとすればどのようになるのでしょうか? 解法のヒントや参考になるページなどありましたら紹介していただきたいです。