MATLAB知识点:triu函数和tril函数–返回矩阵的上三角部分和下三角部分。

 讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili

以下内容节选自第三章3.5节

triu函数tril函数,它们用法相同,可分别用来返回矩阵的上三角部分和下三角部分。
  • triu(A,k)返回A的第k条对角线上以及该对角线上方的元素,其他位置元素用0填充,k等于0时可以简写成triu(A)。

  • tril(A,k)返回A的第k条对角线上以及该对角线下方的元素,其他位置元素用0填充,k等于0时可以简写成tril(A)。

默认值k = 0是主对角线,k > 0位于主对角线上方,而k < 0位于主对角线下方。

下面我们用这两个函数来做一个有趣的练习题:生成一个n阶(例如n=4)的对称矩阵,里面的每个元素都是位于区间[0, 9]中的随机整数。

答案如下:

n   = 4; 
num   = n*(n-1)/2; 
A   = zeros(n);
A(triu(true(n),1))   = randi([0,9],num,1);
A   = A+A'+diag(randi([0,9],n,1))
 
% 随机生成的对称矩阵:
     7     6     0     9
     6     3     8     6
     0     8     6     7
     9     6     7     1

这几行代码综合性非常强,核心的思路就是将这个对称矩阵分成三个部分:首先随机生成对称矩阵的上半部分(不包括主对角线),这是一个上三角矩阵;然后将其转置来确保矩阵的元素是对称的;最后使用diag函数生成一个随机的对角矩阵。将上半部分、下半部分以及对角矩阵相加即可得到这个对称矩阵。

具体代码的解释如下:对于一个n阶的对称矩阵,它的上三角部分(不包括主对角线)有n*(n-1)/2个元素,上方代码中将其赋值给num;矩阵A初始化为一个n阶全为0的矩阵;true(n)创建了一个n阶的逻辑矩阵,其中所有元素都为逻辑值1;triu(true(n),1)返回了一个不包括主对角线的上三角的逻辑矩阵,我们用它对A矩阵进行逻辑索引; randi([0,9],num,1)生成了一个有num个元素的向量,其中每个元素都是位于区间[0, 9]中的随机整数;A(triu(true(n),1))选取了矩阵A的上三角部分(不包括主对角线),然后将其赋值为随机生成的整数;A’是矩阵A的转置,由于我们已经填充了A的上三角部分,将它转置我们可以确保下三角部分与上三角部分是对称的;diag(randi([0,9],n,1))生成了一个主对角线上的元素为区间[0, 9]中的随机整数,而其它地方都为0的n阶矩阵;将这三个矩阵相加,即可得到最终的对称矩阵。

以后我们学了循环语句后,还可以利用循环语句生成,虽然循环语句更直观且代码易于编写,但直接基于矩阵操作在MATLAB中通常更高效,尤其是对于大型矩阵。

版权声明:本文为博主作者:数学建模学习交流原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_32589267/article/details/135705105

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐