【问题标题】:Writing a Nth order matrix写一个 N 阶矩阵
【发布时间】:2016-08-11 06:53:53
【问题描述】:

我想创建一个如下所示的n-by-n

其中系数a1,a2,......an是事先知道的,基本上矩阵n的阶数不过是length(a)

我的意思的更多例子:

唯一的条件是n >= 2,因为如果n == 1,那么整个概念就会崩溃。

编辑: 我想将一个变量乘以矩阵的最后一行,但是变量的顺序取决于矩阵的顺序。

假设我想将变量 x 乘以最后一行。

例子:

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    你可以这样做

    N = 5;                      % size
    last_row = rand(1,N);       % last row ( a_1,a_2,...,a_n )
    
    A = diag(ones(N-1,1),1);    % place upper diagonal
    A(N,:) = last_row;          % place last row
    

    diag(vector, k) 生成一个填充零的矩阵,k'th 偏离对角线为vector,在您的情况下为 1。

    然后您可以将最后一行替换为已知值。

    结果是

    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    0 0 0 0 1
    a b c d e
    

    其中a,b,c,d,elast_row 中包含的随机数。

    【讨论】:

    • 这正是我想要的!我的救星
    • 检查以.开头的运算符。在您的情况下,您可以使用last_row = (x.^(1:n)).*last_row
    • 只有在 (1:N) 时才有效。但我想这样做(N:1)这对这种方法无效
    • 我所做的是将 (1:N) 保存在一个变量中,然后使用“fliplr”并使用它。这行得通,有什么优雅的方法可以做到这一点
    【解决方案2】:

    김도현 的答案的一个小变化,使用 eyecircshift

    N = 5;                % same as before
    last_row = rand(1,N); % same as before
    
    % Option 1
    A = circshift(eye(N),1,2);
    A(N,:) = last_row;    % same as before
    

    如果您希望输出为sparse,还有更多选项(如果您不熟悉sparse,请参阅MATLAB's documentation on their advantages):

    % Option 2 (sparse)
    A = gallery('tridiag', zeros(1,N-1), zeros(1,N), ones(1,N-1));
    A(N,:) = last_row;    % same as before
    
    % Option 3 (sparse, all-in-one, using the syntax "S = sparse(i,j,v)" )
    A = sparse([1:N-1, N*ones(1,N)], [2:N, 1:N], [ones(1,N-1) last_row]);
    

    同时考虑:spdiagsspeye

    【讨论】:

    • 即使你的答案看起来更干净;我更喜欢@김도현 的回答。很容易理解
    • @Ashok 我没有说김도현的回答不好,我只是提供了一种不同的方法。
    • 是的,因为我不能接受 2 个答案,所以我只是给出了我不接受你的答案的原因。
    • @Ashok 别担心 - 没关系。我知道这里的情况如何:)
    • @Ashok 谢谢 :) 请注意,我已经编辑了答案并添加了数组的 sparse 变体。
    猜你喜欢
    • 2019-06-18
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    相关资源
    最近更新 更多