[大至急お願い致します] for文の入れ子に関しまして
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
maro_ta
am 10 Okt. 2020
Kommentiert: maro_ta
am 10 Okt. 2020
以下のような関数funに対し,4変数をそれぞれ1~10まで変化させて代入し計10000個の結果を見たいのですが,
matlabではfor文を入れ子にすると処理速度が落ちると聞きました.for文を使わないで10000個の結果を出力する
方法はありませんでしょうか.
よろしくお願い致します.
syms a b c d
fun(a,b,c,d) = (a + b)^c * d
for i=1:10
for j=1:10
for k=1:10
for l=1:10
fun(i,j,k,l);
end
end
end
end
0 Kommentare
Akzeptierte Antwort
Shota Kato
am 10 Okt. 2020
Neural Network Toolboxがあるならcomvbec関数,そうでなければMATLAB Centralにあるallcomb関数を用いることで,複数組のベクトルの値からすべての組み合わせを取得することができます.
(参考:https://jp.mathworks.com/matlabcentral/answers/338295-matlab)
これを用いると,10,000個の計算結果をfor文を用いることなく算出できます.
% Neural Network Toolboxがある場合
X = (combvec(1:10, 1:10, 1:10, 1:10))'
% Neural Network Toolboxがある場合
% X = allcomb(1:10, 1:10, 1:10, 1:10);
A = X(:, 1);
B = X(:, 2);
C = X(:, 3);
D = X(:, 4);
ANS = (A + B) .^ C .* D;
5 Kommentare
Shota Kato
am 10 Okt. 2020
私の環境では,ANSとして,このような出力が得られました.
出力形式の問題かもしれません.
ワークスペースの変数をダブルクリックすると,変数の詳細を見ることができますが,出力結果はどのように確認していますか?
Weitere Antworten (1)
madhan ravi
am 10 Okt. 2020
[d, c, b, a] = ndgrid(1:10);
fun = @(a,b,c,d) (a + b).^c .* d;
fun(a(:), b(:), c(:), d(:))
7 Kommentare
Shota Kato
am 10 Okt. 2020
上記にコマンドをそのままコマンドラインで実行すると,小数の結果が見えます.
というのも,一番上に1.0e+14がついているからです.
桁数の異なる数を一度に出力しているので,小数であるかのように見える,ということだと思います.
madhan ravi
am 10 Okt. 2020
Bearbeitet: madhan ravi
am 10 Okt. 2020
format longg
[d, c, b, a] = ndgrid(1 : 10);
fun = @(a, b, c, d) (a + b).^c .* d;
Wanted1 = fun(a(:), b(:), c(:), d(:));
Wanted2 = zeros(1e4, 1);
k1 = 1;
for ii = 1 : 10
for jj = 1 : 10
for k = 1 : 10
for l = 1 : 10
Wanted2(k1) = fun(ii, jj, k, l);
k1 = k1 + 1;
end
end
end
end
isequal(Wanted1, Wanted2) % check if they are equal
Siehe auch
Kategorien
Mehr zu ループと条件付きステートメント finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!