创建正方形单位矩阵 [已关闭]

Creating a square identity matrix [closed]

提问人:yasaman 提问时间:7/28/2015 最后编辑:Amroyasaman 更新时间:7/28/2015 访问量:2069

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

8年前关闭。

编写一个名为的函数,该函数创建一个正方形单位矩阵,该矩阵是一个元素为 0 的矩阵,但对角线上(从左上角到右下角)的元素值为 1 除外。对角线由行和列索引相同的元素组成:(1,1)、(2,2) 等。identity

该函数接受一个正整数输入参数,即矩阵的大小,并将矩阵本身作为输出参数返回。

例如,必须返回一个 4×4 的单位矩阵。identity(4)

您不能使用内置或函数。eyediag

(提示:您可以使用单个索引索引到矩阵中,MATLAB 将使用列优先顺序将其处理为向量。

MATLAB 矩阵

评论

6赞 Matt 7/28/2015
这很容易实现,听起来像是家庭作业。你的研究工作在哪里?请阅读之后如何提问和编辑您的问题。展示您到目前为止尝试过的内容以及您解决这个问题的想法。
0赞 patrik 7/28/2015
或者你可以这样做:)这不是一个好方法,但它会做你需要的。fix(corrcoef(rand(10,10)))

答:

0赞 josoler 7/28/2015 #1

假设您可以使用内置函数,该功能的可能实现如下:zeros()eye()

function matrix = identity(n)
    out = zeros(n);
    idx = 1:n+1:n^2;
    out(idx) = 1;
    matrix = out;
end
2赞 Matt 7/28/2015 #2

让我们用两行简单的行来完成,没有......第一行创建一个矩阵,其中所有元素都是 。之后,您可以(如您的提示所说)使用单个参数来处理元素。单位矩阵中 1 之间的距离为 。这样,您可以将上述距离的那些写到最后。zerosn x n0n+1

function out = identity(n)
    out(n,n)       = 0;
    out(1:n+1:end) = 1;
end

评论

0赞 Thomas 7/28/2015
你知道吗,如果 和 之间存在性能差异?A(n,n)=0A=zeros(n)
0赞 Thomas 7/28/2015
哦,哇,我刚刚测试过这个,对于 ,您的方法需要 0.000255 秒,而需要 1.106566 秒。我一直认为,标准方法是使用 .N=10000zeros(N)zeros(N)
0赞 Matt 7/28/2015
@sonystarmap 查看这篇关于未记录的 Matlab 的文章。不要错过“预分配的变体”部分。
1赞 Amro 7/28/2015 #3

您可以从基础开始:

function M = identity(n)
    M = zeros(n);
    for i=1:n
        M(i,i) = 1;
    end
end

与任何其他语言几乎相同的代码......