在MATLAB中创建一个带有对角线和左对角线的矩阵

时间:2016-03-23 13:40:55

标签: arrays matlab matrix

我想创建一个大小为n x n的方阵,其中对角线元素和左对角线都等于1.其余元素等于0.

例如,如果矩阵是5 x 5:

,这将是预期的结果
1 0 0 0 0
1 1 0 0 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1

我怎么能在MATLAB中做到这一点?

5 个答案:

答案 0 :(得分:6)

使用tril函数琐碎:

tril(ones(n),0) - tril(ones(n),-2)

如果您想要更粗的1行,只需调整-2

n = 10;
m = 4;
tril(ones(n),0) - tril(ones(n),-m)

如果您希望使用diag建议的excaza,请尝试

diag(ones(n,1)) + diag(ones(n-1,1),-1)

但你无法通过这种方式控制条纹的“厚度”。但是,对于2的厚度,它可能表现更好。你必须测试它。

答案 1 :(得分:5)

您也可以使用spdiags创建该矩阵:

n = 5;
v = ones(n,1);
d = full(spdiags([v v], [-1 0], n, n));

我们得到:

>> d

d =

     1     0     0     0     0
     1     1     0     0     0
     0     1     1     0     0
     0     0     1     1     0
     0     0     0     1     1

前两行定义矩阵的所需大小,假设为正方形n x n以及长度为n x 1的所有1的向量。然后我们调用spdiags来定义此向量的对角线将在哪里填充。我们希望将主对角线定义为主对角线以及主对角线左侧的对角线,或远离主对角线的-1spdiags将调整远离主要对角线的元素总数以进行补偿。

我们还确保输出的大小为n x n,但此矩阵实际为sparse。我们需要将矩阵转换为full以完成结果。

答案 2 :(得分:5)

有一些指数玩杂耍,你也可以这样做:

N = 5;
ind = repelem(1:N, 2);    % [1 1 2 2 3 3 ... N N]
M = full(sparse(ind(2:end), ind(1:end-1), 1))

答案 3 :(得分:5)

使用linear indexing的简单方法:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
  die('Connection to Mysql failed : ' . mysql_error());
}
$db_selected = mysql_select_db('database', $link);
if (!$db_selected) {
   die ('connection to database failed : ' .mysql_error());
}
$result = mysql_query("SELECT id FROM listapagamento WHERE numeroPedido=$pedidoID");

答案 4 :(得分:3)

这也可以使用bsxfun

完成
// Compute the signature.
xSigned.ComputeSignature();

// Get the Xml representation of the signature and save it to an XmlElement object.
XmlElement xmlDigitalSignature = xSigned.GetXml();

// Replace the KeyInfo element of the DigitalSignature with the appropriate KeyInfo information.
xmlDigitalSignature = ReplaceKeyInfo(xmlDigitalSignature);

// Create a reference to the Security Element under the SOAP Header.
XmlNode securityNode = xdoc.DocumentElement.SelectSingleNode("//soapenv:Header/wsse:Security", XmlManager(xdoc));

// Add the element to the XmlDocument by moving the Signature Element to be the first child under the Security Element.
securityNode.InsertBefore(xdoc.ImportNode(xmlDigitalSignature, true), securityNode.FirstChild);

例如,要获得主对角线和下面两条对角线设置为n = 5; %// matrix size d = [0 -1]; %// diagonals you want set to 1 M = double(ismember(bsxfun(@minus, 1:n, (1:n).'), d)); 的5x5矩阵,请定义1n=5,这将给出

d = [0 -1 -2]