2017-05-30 10 views
1

2次微分を計算するためにmatlabで疎行列を作成したいと思います。現在、私は次のようにして、それを作成します。要素の可変距離を持つmatlabでスパースバンド行列を作成

r_num = 1000; 
r_square_num = r_num*r_num; 
A = sparse(-30*diag(ones(r_square_num,1),0)+16*diag(ones(r_square_num-r_num,1),r_num)+16*diag(ones(r_square_num-r_num,1),-r_num)-diag(ones(r_square_num-2*r_num,1),-2*r_num)-diag(ones(r_square_num-2*r_num,1),2*r_num)); 

しかし、その方法は、私の記憶がオーバーフローする密行列の作成によるdiagonesには不可能です。二次と三対角線の位置は、既に事前に知られている場合、私は、次の方法でそれを書き換えることができます。

A = spdiags([-1*ones_vec 16*ones_vec -30*ones_vec 16*ones_vec -1*ones_vec], -2:2, r_square_num, r_square_num); 

しかし、どのように私は対角線の間の距離がr_numに依存されている場合があることを行うことができますか?

答えて

2

第2の入力引数(d)は、任意のベクトルであってよい。 [-1:1],[-2,0,2]または[-5,3]である。したがって、次が動作するはずです:

A = spdiags([-1*ones_vec 16*ones_vec -30*ones_vec 16*ones_vec -1*ones_vec], (-2:2)*r_num, r_square_num, r_square_num); 
関連する問題