12

x=1:100としましょうN=1:10th列にエントリが含まれるx^Nようにマトリックスを作成したいと思います。i[1 i i^2 ... i^N]

forループを使用してこれを簡単に行うことができます。しかし、ベクトル化されたコードを使用してこれを行う方法はありますか?

4

5 に答える 5

11

私は行きます:

x = 1:100;
N = 1:10;
Solution = repmat(x,[length(N)+1 1]).^repmat(([0 N])',[1 length(x)]);

別の解決策(おそらくはるかに効率的):

Solution = [ones(size(x)); cumprod(repmat(x,[length(N) 1]),1)];

あるいは:

 Solution = bsxfun(@power,x,[0 N]');

お役に立てれば。

于 2010-10-13T10:18:14.710 に答える
6

ヴァンデルモンド行列のように聞こえます。したがって、vanderを使用します。

A = vander(1:100);
A = A(1:10, :);
于 2010-10-13T16:05:07.597 に答える
5

行列はそれほど大きくないため、これを行う最も簡単な方法は、MESHGRID要素ごとのべき乗演算子 .^を使用することです。

[x,N] = meshgrid(1:100,0:10);
x = x.^N;

iこれにより、各列に が含まれる 11 行 100 列の行列が作成されます[i^0; i^1; i^2; ... i^10]

于 2010-10-13T14:30:24.503 に答える
2

それがあなたの質問に本当に合っているかどうかはわかりません。

bsxfun(@power, cumsum(ones(100,10),2), cumsum(ones(100,10),1))

編集: エイドリアンが指摘したように、私の最初の試みは OP の質問に準拠していませんでした。

xn = 100;
N=10;
solution = [ones(1,xn); bsxfun(@power, cumsum(ones(N,xn),2), cumsum(ones(N,xn),1))];
于 2010-10-13T08:37:11.260 に答える
1

わかりやすい for ループを使ってみませんか?

c = [1:10]'; %count to 100 for full scale problem
for i = 1:4; %loop to 10 for full scale problem
    M(:,i) = c.^(i-1)
end

人々が示したこのコードの巧妙なベクトル化されたバージョンを理解するには、もっと考えなければなりません。私のやり方はどちらかというと野蛮なやり方ですが、これを読んでいる人なら誰でも理解できるでしょう。

分かりやすいコードを好みます。

(はい、事前に割り当てられた可能性があります。このような小さなケースの明確さを下げる価値はありません。)

于 2010-10-13T17:53:45.553 に答える