添付画像の数式のプロ​グラムの組み方がわか​りません。

3 views (last 30 days)
Takuya Fushihara
Takuya Fushihara on 13 May 2020
Commented: Takuya Fushihara on 17 May 2020
閲覧ありがとうございます。
以下の数式の実装を行なっているのですが、コードの書き方がわからず躓いています。
for文を使えば書けるのですが、上司の指示でfor文を使うなと言われてしまい困っています。
よろしくお願いいたします。

Accepted Answer

Hiroki Okawa
Hiroki Okawa on 13 May 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が表示される
  1 Comment
Takuya Fushihara
Takuya Fushihara on 17 May 2020
返信遅れて申し訳ございません!
ご丁寧な回答ありがとうございます!

Sign in to comment.

More Answers (0)

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!