在Matlab中用循环创建矩阵

ron*_*ilp 1 matlab matrix linear-algebra octave

我想创建一个以下形式的矩阵

    Y = [1 x x.^2 x.^3 x.^4 x.^5 ... x.^100]
Run Code Online (Sandbox Code Playgroud)

设x是列向量.甚至更多的变种,如

    Y = [1 x1 x2 x3 (x1).^2 (x2).^2 (x3).^2 (x1.x2) (x2.x3) (x3.x1)]
Run Code Online (Sandbox Code Playgroud)

设x1,x2和x3为列向量让我们考虑第一个.我试过用类似的东西

    Y = [1 : x : x.^100]
Run Code Online (Sandbox Code Playgroud)

但这也没有用,因为它意味着取Y = [1 x 2.*x 3.*x ... x.^ 100]?(即,所有值在1到x.^ 100之间,差异为x)因此,这也不能用于生成这样的矩阵.请考虑x = [1; 2; 3; 4]; 并提出一种生成此矩阵的方法

    Y = [1 1 1 1 1;
         1 2 4 8 16;
         1 3 9 27 81;
         1 4 16 64 256];
Run Code Online (Sandbox Code Playgroud)

无需手动编写

    Y = [ones(size(x,1)) x x.^2 x.^3 x.^4]
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 5

使用这种bsxfun技术 -

N = 5; %// Number of columns needed in output
x = [1; 2; 3; 4]; %// or [1:4]'
Y = bsxfun(@power,x,[0:N-1])
Run Code Online (Sandbox Code Playgroud)

输出 -

Y =
     1     1     1     1     1
     1     2     4     8    16
     1     3     9    27    81
     1     4    16    64   256
Run Code Online (Sandbox Code Playgroud)

如果你有x = [1 2; 3 4; 5 6],你想Y = [1 1 1 2 4; 1 3 9 4 16; 1 5 25 6 36]Y = [ 1 x1 x1.^2 x2 x2.^2 ]用于列向量x1,x2......,您可以使用此一班轮-

[ones(size(x,1),1) reshape(bsxfun(@power,permute(x,[1 3 2]),1:2),size(x,1),[])]
Run Code Online (Sandbox Code Playgroud)