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

2 vues (au cours des 30 derniers jours)
Takuya Fushihara
Takuya Fushihara le 13 Mai 2020
閲覧ありがとうございます。
以下の数式の実装を行なっているのですが、コードの書き方がわからず躓いています。
for文を使えば書けるのですが、上司の指示でfor文を使うなと言われてしまい困っています。
よろしくお願いいたします。

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!