Matlabのspdiags関数について

このQ&Aのポイント
  • Matlabのspdiags関数を使って行列Aを生成する方法について解説します。
  • spdiags関数を使用すると、与えられた行列の特定の位置に値を配置して新しい行列を作ることができます。
  • d = [-3 0 2]は、値を配置する位置を示しており、full(A)の行と列のオフセットを表しています。
回答を見る
  • ベストアンサー

Matlabのspdiags関数

Matlabのspdiags関数に関してわからないところがあります。以下はMatlabのヘルプWebページから持ってきた例です。http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/math/?/matlab/support/manual/r2006/toolbox/matlab/math/sparse4.shtml B = [ 41 11 0 52 22 0 63 33 13 74 44 24 ]; d = [-3 0 2];、m=7, n=4のとき A = spdiags(B,d,7,4) A = (1,1) 11 (4,1) 41 (2,2) 22 (5,2) 52 (1,3) 13 (3,3) 33 (6,3) 63 (2,4) 24 (4,4) 44 (7,4) 74 これに対応するフル行列Aは、つぎのようになります。 full(A) ans = 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74 mやnというのはfull(A)がm行n列の行列であるというイメージの対応がわかるのですが、d = [-3 0 2]とfull(A)の行列の関係がわかりません。-3,0,2というのはfull(A)のどこを見れば良いのでしょうか。

  • phy0
  • お礼率76% (148/193)

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

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

d = [-3 0 2]; というのは、行列Bの各列に対応するフル行列A内の位置を示しています。つまり、Bの1列目の情報はフル行列Aの-3の位置に入り、Bの2列目の情報はフル行列Aの0の位置に入り、Bの3列目の情報はフル行列Aの2の位置に入るといった具合です。 下記URLに図入りで詳しく説明されています。 http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/spdiags.html&http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/math/sparse4.shtml

phy0
質問者

お礼

ありがとうございます!おかげさまでよくわかりました。

関連するQ&A

  • c言語のプログラムにMATLABを入れたい

    CプログラムからのMATLABの呼び出しを行いたいのですが その環境設定の方法が http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/matlab_external/?/matlab/support/manual/r14/toolbox/matlab/matlab_external/ch_c_mex.shtml 上記ページに書かれているのですが icudt24b.dat,or icudt24l.datがないので手に入れたく探したのですが 見当たらないので入手先をご存知の方がいたら教えていただきたいのと 自分のシステムがbig-endian、little-endianのどちらのシステムか判別する方法を教えて頂きたいです。

  • MATLABでssを実行すると、未定義な関数としてエラーになる。

    MATLABでssを実行すると、ssが未定義な関数として認識されて エラーになっているようです。 どなたか、対処方法をご存じでしょうか? 宜しくお願いいたします。 ■実行環境 OS:WindowsXP SP2 MATLAB:2007a ■実行したM-ファイル %test l=0.2404; M=0.390; J=0.0712; c=0.695; g=9.81; A=[0 1; -M*l*g/J -c/J]; B=[0; 1/J]; C=[1 0]; D=0; sys = ss(A,B,C,D); ■実行結果 ??? 未定義の関数、またはメソッド 'ss' (タイプ'double' の入力引数)。 エラー ==> test at 13 sys = ss(A,B,C,D); ■調べた事項 >> ver ------------------------------------------------------------------------------------- MATLAB Version 7.4.0.287 (R2007a) MATLAB License Number: XXXXXX Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 2) Java VM Version: Java 1.5.0_07 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode ------------------------------------------------------------------------------------- MATLAB Version 7.4 (R2007a) Simulink Version 6.6.1 (R2007a+) Communications Blockset Version 3.5 (R2007a) Communications Toolbox Version 3.5 (R2007a) Filter Design HDL Coder Version 2.0 (R2007a) Filter Design Toolbox Version 4.1 (R2007a) Fixed-Point Toolbox Version 2.0 (R2007a) Link for ModelSim Version 2.2 (R2007a) Signal Processing Blockset Version 6.5 (R2007a) Signal Processing Toolbox Version 6.7 (R2007a) Simulink Fixed Point Version 5.4.1 (R2007a+) Trademarks ------------------ MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, and xPC TargetBox are registered trademarks and SimBiology, SimEvents, and SimHydraulics are trademarks of The MathWorks, Inc. Other product or brand names are trademarks or registered trademarks of their respective holders. >> which ss -all C:\Program Files\MATLAB\R2007a\toolbox\signal\signal\@dfilt\ss.m % dfilt method >> matlabroot ans = C:\Program Files\MATLAB\R2007a >> path MATLABPATH C:\Program Files\MATLAB\R2007a\toolbox\matlab\general C:\Program Files\MATLAB\R2007a\toolbox\matlab\ops (中略) C:\Program Files\MATLAB\R2007a\toolbox\signal\signal (後略) >>

  • matlab初心者の質問

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

  • matlab、対角行列の作り方

    matlabで、次のようにすると、 -------------------------------------------------------------- >> N = 5; h = 2*pi/N; column = [0 .5*(-1).^(1:N-1).*cot((1:N-1)*h/2)]'; D = toeplitz(column,column([1 N:-1:2])); >> D D = 0 -0.6882 0.1625 0.1625 -0.6882 -0.6882 0 -0.6882 0.1625 0.1625 0.1625 -0.6882 0 -0.6882 0.1625 0.1625 0.1625 -0.6882 0 -0.6882 -0.6882 0.1625 0.1625 -0.6882 0 -------------------------------------------------------------- 5*5のDという行列が出来ます。 今回、 X = D 0 0 0 0 D 0 0 0 0 D 0 0 0 0 D のように20*20の対角行列を作りたいのですが、作り方を教えて頂けないでしょうか?

  • 行列の問題!

    すみません、、、どなたか以下の問題を解いて頂けませんか。 答えがないので、正直お手上げ状態です。 ヒントでも構いません、、、、宜しくお願いします。 ------------------------------------------------------------------ すべての実数からなる集合をRと表す。 行列を要素にもつ2つの集合M, Nを M = | | a b | a, b, c, d ∈ R |   .   | | c d |            | N = | | r -s | r, s ∈ R | ..  | | s r  .|        .| と定める。更に、Mの要素 A = | a b | に対し、 A' = | a c | とおく。  ....  | c d |          .| b d | (1) A, B ∈ N ならば、AB ∈ N であることを示せ。 (2) A, B ∈ N ならば、(AB)' = A'B' となることを示せ。   また、(CD)' ≠C'D' となる M の要素 C, D の組を一つ求めよ。 (3) N のすべての要素と交換可能な M の要素は、必ず N に属することを示せ。   ただし、行列 X と Y が交換可能であるとは、 XY = YX のこととする。 ------------------------------------------------------------------

  • MATLABの関数をエクセルで使用したいです

    MATLABで下記のコマンドがあります。 ※数字は例です A=[0 0 1 0;0 0 0 1;1 1 1 1] B=[0;0;1] C=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1] D=[0;0;0;0;1] sys=ss[A,B,C,D] これをエクセルで実行する事は可能でしょうか? もしわかる方がいればご教授願います。 よろしくお願いします。

  • MATLAB 並び替え

    MATLABについての質問です。 いま、以下のような行例A(2*2)があります 1 0.24 1 0.44 1 0.67 2 4.69 2 9.40 3 6.4 3 6.66 3 5.67 3 3.98 3 9.92 4 1.43 ...続く 即ち、行列Aは一列目に整数のインデックス1~100、2列目にあるデータが格納されています。これを、新しい行列Bに並び替えたいのです。行列Bは行方向にデータ、列方向にAの一列目のインデックス、という風にしたいです。具体的には、 0.24  4.69  6.4  1.43 0.44   9.40   6.66 0.67      5.67          3.98          9.92 です。どのように書けばもっともシンプルでしょうか? 質問の仕方が悪かったらごめんなさい。どうぞよろしくお願いいたします。

  • MATLABの乱数生成関数 rand( ) について

    一様乱数を生成する関数rand()について  ・Y = rand(n);  ・rand('state',sum(100*clock));   Y = rand(n); という2つのやり方があるようなのですが,以下のmatlabの関数の説明 のページをみても2つの違いが理解できません. http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MATLAB5/jhelp/techdoc/ref/rand.html どういう違いがあるのでしょうか? また,この関数は[0,1]の一様乱数としていますが,[-a,a]みたいに範囲指定はできないのでしょうか? 回答よろしくお願いします.

  • Mathematicaで3×3の固有値を求めたら…

    以下の行列Rの固有値を求めたい。{}は行を表わしていて、一つもの{}は1行、2個目の{}は2行目といった感じです。 R[a_, b_, c_, d_, l_, m_, n_] := {{-a - l, b, 0}, {a, -b - c - m, d}, {0, c, -d - n}} Eigenvalues[R[a, b, c, d, l, m, n]] として、固有値を求めようとしたのですが、解に「#1」とわけのわからない値が出てきました。ヘルプで調べたのですが、さっぱりです。 固有値の一つが Root[bdl+adm+dlm+ac#1+ad#1+bd#1+bl#1+…省略…&,1] となりました。 良く意味がわかりません。

  • Matlabで作成したmファイルをC言語に自動変換することは可能ですか?

    大学の研究室で使っているmatlabの機能にC言語のソースを自動生成 する機能があると先生に伺ったのですが、 常識的に考えてそんな便利なことができるとは思えません。 実際に下記に示すtoolboxで自分が作ったmファイルからC言語のソースを、ある程度自動生成することは可能でしょうか? Matlab 2008 b windows-x64版 Matlab 7.7 Simulink 7.2 Image processing toolbox Signal processing toolbox Real time workshop SimulinkとReal time workshopを一度も使ったことが無いので 少し調べて良く判らない点がありました。 Realtimeworkshopでは、Simulinkで生成したブロック線図のみC言語で出 力できるものであり、mファイルからの変換はできないのでしょうか?