x=1:100としましょうN=1:10。th列にエントリが含まれるx^Nようにマトリックスを作成したいと思います。i[1 i i^2 ... i^N]
forループを使用してこれを簡単に行うことができます。しかし、ベクトル化されたコードを使用してこれを行う方法はありますか?
x=1:100としましょうN=1:10。th列にエントリが含まれるx^Nようにマトリックスを作成したいと思います。i[1 i i^2 ... i^N]
forループを使用してこれを簡単に行うことができます。しかし、ベクトル化されたコードを使用してこれを行う方法はありますか?
私は行きます:
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]');
お役に立てれば。
ヴァンデルモンド行列のように聞こえます。したがって、vanderを使用します。
A = vander(1:100);
A = A(1:10, :);
行列はそれほど大きくないため、これを行う最も簡単な方法は、MESHGRIDと要素ごとのべき乗演算子 .^を使用することです。
[x,N] = meshgrid(1:100,0:10);
x = x.^N;
iこれにより、各列に が含まれる 11 行 100 列の行列が作成されます[i^0; i^1; i^2; ... i^10]。
それがあなたの質問に本当に合っているかどうかはわかりません。
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))];
わかりやすい 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
人々が示したこのコードの巧妙なベクトル化されたバージョンを理解するには、もっと考えなければなりません。私のやり方はどちらかというと野蛮なやり方ですが、これを読んでいる人なら誰でも理解できるでしょう。
分かりやすいコードを好みます。
(はい、事前に割り当てられた可能性があります。このような小さなケースの明確さを下げる価値はありません。)