我想创建一个大小为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中做到这一点?
答案 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
来定义此向量的对角线将在哪里填充。我们希望将主对角线定义为主对角线以及主对角线左侧的对角线,或远离主对角线的-1
。 spdiags
将调整远离主要对角线的元素总数以进行补偿。
答案 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矩阵,请定义1
和n=5
,这将给出
d = [0 -1 -2]