【发布时间】:2016-08-11 06:53:53
【问题描述】:
我想创建一个如下所示的n-by-n:
其中系数a1,a2,......an是事先知道的,基本上矩阵n的阶数不过是length(a)。
我的意思的更多例子:
唯一的条件是n >= 2,因为如果n == 1,那么整个概念就会崩溃。
编辑: 我想将一个变量乘以矩阵的最后一行,但是变量的顺序取决于矩阵的顺序。
假设我想将变量 x 乘以最后一行。
例子:
【问题讨论】:
我想创建一个如下所示的n-by-n:
其中系数a1,a2,......an是事先知道的,基本上矩阵n的阶数不过是length(a)。
我的意思的更多例子:
唯一的条件是n >= 2,因为如果n == 1,那么整个概念就会崩溃。
编辑: 我想将一个变量乘以矩阵的最后一行,但是变量的顺序取决于矩阵的顺序。
假设我想将变量 x 乘以最后一行。
例子:
【问题讨论】:
你可以这样做
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,e 是last_row 中包含的随机数。
【讨论】:
.开头的运算符。在您的情况下,您可以使用last_row = (x.^(1:n)).*last_row
김도현 的答案的一个小变化,使用 eye 和 circshift:
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]);
【讨论】:
sparse 变体。