添付画像の数式のプログラムの組み方がわかりません。
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Takuya Fushihara
am 13 Mai 2020
Kommentiert: Takuya Fushihara
am 17 Mai 2020
閲覧ありがとうございます。
以下の数式の実装を行なっているのですが、コードの書き方がわからず躓いています。
for文を使えば書けるのですが、上司の指示でfor文を使うなと言われてしまい困っています。
よろしくお願いいたします。
0 Kommentare
Akzeptierte Antwort
Hiroki Okawa
am 13 Mai 2020
以下式に誤り等ありましたらすみません。
確認用に適当な乱数でパラメータを設定しました。
n = 20;
m = 30;
A = rand(1, m);
B = rand(1, m);
Y = rand(n, m);
sigma2 = rand;
式を観やすくするために後半の総和を先に計算します。
各iでそれぞれ値が決まるので、変数名をsub_answer, サイズはn行1列となり、
sub_answer = sum(repmat(A ./ (B.^2), n, 1) .* Y, 2);
で得られます。repmat関数は今回のような処理、特にベクトルから行列を作るときに便利です。
最後に全体を計算します。logの底に関しては確認ください(log10なのかlogなのか)。
answer = 0.5 * sum(log(1 + sigma2 * sub_answer));
以上です。
一応確認用にfor文でも計算し、一致することを確認してください(下記は例)。
check = 0;
for i = 1 : n
sub = 0;
for j = 1 : m
sub = sub + A(j) / (B(j)^2) * Y(i, j);
end
check = check + log( 1 + sigma2 * sub);
end
check = check / 2;
disp(answer == check) % 一致すれば1が表示される
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical 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!