行を挿入するMatlab関数

動機

Matlabの標準では、
行列要素の置換は可能であるけれども、
挿入は可能ではない。

例えば、
2 2
2 2
の2行目に、1を入れ

2 2
1 0
2 2
となって欲しい。

ポイントは上書きされないで、下にずれているトコロ
MATLABにおける行の挿入方法にも類似した質問が出ている。

目的

行列に挿入後、下にずれるような関数を開発する(開発は言い過ぎ?)


ソース

function [ result ] = insertRows( inMat , doMat , numRow )
% [ result ] = insertRows( inMat , doMat , numRow )
% inMat:挿入される行列
% doMat:挿入する行列
% numRow:挿入する要素番号(省略の場合、末尾に挿入される)

[ rowsDo , colsDo ] = size( doMat );
[ rowsIn , colsIn ] = size( inMat );

if colsDo > colsIn;    error('挿入列が多すぎます');end;

insMat = zeros( rowsDo , colsIn );
insMat( 1:rowsDo , 1:colsDo ) = doMat;

result = cat( 1 , inMat( 1:numRow -1 , : ) , insMat , inMat( numRow : rowsIn , : ) ); 


end

テストドライバ

a = ones( 2 )*2;
b = ones( 1 );
c = insertRows( a , b , 2 )

実行結果

c =

     2     2
     1     0
     2     2
動機に示した結果と一致した。