是否有一种简单的方法可以在Scilab中创建带状矩阵,类似于Mathematica的代码:
mat=Normal@SparseArray[{Band[{1,1}]->1,Band[{1,4}]->2,Band[{3,1}]->-3},{10,10}];
?我知道有sparse()
函数用于创建稀疏矩阵,然后我可以通过full()
将其转换为普通形式。但似乎我只能指定sparse()
的单个条目,而不是条带。我在文档中遗漏了什么吗?或者我必须“手动”创建它(即为此编写一些程序)?
1 个答案:
答案 0 :(得分:1)
我认为您正在寻找diag功能。它创建一个足够大的矩阵来包含指定的值。如果将其与linspace功能结合使用,则可以创建波段。
工作示例
clear;
m = 10;
band1 = sparse(diag( ones(m-1,1),1));
band2 = sparse(diag( linspace(1,4,m-2),2) );
band3 = sparse(diag( linspace(3,1,m-3),-3) );
mat = band1 + band2 + band3;
disp( full(mat) );