参考下面的代码:
>> n=5;
>> for i=1:n+1, eval(sprintf('syms d%i;d(i)=d%i;',i,i));end
>> diag( -( 1./d(1:n) + 1./d(2:n+1) ) )
ans =
[ -1/d1-1/d2, 0, 0, 0, 0]
[ 0, -1/d2-1/d3, 0, 0, 0]
[ 0, 0, -1/d3-1/d4, 0, 0]
[ 0, 0, 0, -1/d4-1/d5, 0]
[ 0, 0, 0, 0, -1/d5-1/d6]
>> diag( 1./d(2:n), 1 )
ans =
[ 0, 1/d2, 0, 0, 0]
[ 0, 0, 1/d3, 0, 0]
[ 0, 0, 0, 1/d4, 0]
[ 0, 0, 0, 0, 1/d5]
[ 0, 0, 0, 0, 0]
需要注意,MATLAB不支持维数未知的矩阵,所以n必需预先指定。