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

2 ビュー (過去 30 日間)
Takuya Fushihara
Takuya Fushihara 2020 年 5 月 13 日
コメント済み: Takuya Fushihara 2020 年 5 月 17 日
閲覧ありがとうございます。
以下の数式の実装を行なっているのですが、コードの書き方がわからず躓いています。
for文を使えば書けるのですが、上司の指示でfor文を使うなと言われてしまい困っています。
よろしくお願いいたします。

採用された回答

Hiroki Okawa
Hiroki Okawa 2020 年 5 月 13 日
以下式に誤り等ありましたらすみません。
確認用に適当な乱数でパラメータを設定しました。
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 件のコメント
Takuya Fushihara
Takuya Fushihara 2020 年 5 月 17 日
返信遅れて申し訳ございません!
ご丁寧な回答ありがとうございます!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!