0

2 つのベクトルを含む変数量があります。これらの数量を i = 1 から n (n = 100) まで合計したいと思います。プログラムを実行すると、ワークスペースの変数をクリックして、各列位置のベクトルの要素値を確認できます。その位置の変数を実行すると、対応する値が取得されます (たとえば、z(1) = 73.2360、z(2) = 63.3701、....など)。しかし、私が理解できないように見えるのは、合計が2つのベクトルの要素を通過するようにベクトルにインデックスを付ける方法です。たとえば、for ループで。も見ましsymsum()たが、必要なのはジェネリック変数だけでした。z_i と w_i が対象のベクトルである i = 1 から 100 までのイプシロンを合計しようとしています。MWEが私が達成したいことをもっと見せてくれることを願っています.

MWE:

 a = 0.6;
 b = sqrt(16-a^2);
 c = 6.5;
 d = sqrt(225-c^2);
 xh = randn(1,100);
 yw = randn(1,100);
  z = a*xh + b*yw + 68;
  w = c*xh + d*yw + 160;

     n = 100;                              % # of data entries.
  zbar = ((1/n)*sum(z));                   % Height data.
  wbar = ((1/n)*sum(w));                   % Weight data.
 Zbarv = zbar*ones(1,100);                 % Height data vector.
 Wbarv = wbar*ones(1,100);                 % Weight data vector.

sz = sqrt((1/n)*((z-Zbarv)*(transpose(z)-transpose(Zbarv))));              
sw = sqrt((1/n)*((w-Wbarv)*(transpose(w)-transpose(Wbarv)))); 

czw = ((1/n)*(w-Wbarv)*(transpose(z)-transpose(Zbarv)));
rzw = czw/(sz*sw);

 b = wbar - ((czw/sz^2)*zbar);             % y-intercept
 m = czw/sz^2;                             % Slope
 epsilon = (1/(n-1))*sum((w-(m*z+b)).^2);  % Error

イプシロンはこれを合計する必要がありますが、 からの合計である必要がありますi=[1,100]w_iz_iベクトルの値にインデックスを付けて合計を実行する方法がわかりません。私はそれらへの入力変数を作成しようとしましたz(i)w(i)、面倒でした。

助言がありますか?

4

1 に答える 1

1

あなたがただ欲しいように聞こえます:

epsilon = (1/(n-1))*sum((w(1:100)-(m*z(1:100)+b)).^2);

あなたwとあなたzはちょうど100要素の長さなので、これはあなたがやったことと同じだと思います. したがって、あなたのコードは実際には正しいと思います。

たとえば、 if a = [1 2 3], then sum(a)isの場合、合計を取得するため6に実際にインデックスを作成する必要はありません。aしたがって、コードは 100 個の要素すべての合計を求めています。

Matlabのコロン演算子を読む必要があります

基本的な考え方は、matlab では次のようなもの1:10は単なる省略形で[1 2 3 4 5 6 7 8 9 10]あり、それを使用してベクトルにインデックスを付けることができるということです。したがって、ベクトルがある場合、その最初の 10 個のv = rand(100,1)要素を取得するには、vv(1:10)

于 2013-04-30T09:21:02.977 に答える