我有一个包含两个向量的变量。我想将这些数量从i = 1加到n,其中n = 100.当程序运行时,我可以点击工作空间中的变量来查看每个列位置的向量的元素值。当执行其位置的变量时,我得到相应的值(例如,z(1)= 73.2360,z(2)= 63.3701,......等等)。但我似乎无法弄清楚的是如何索引这些向量的和,以贯穿两个向量的元素。例如在for循环中。我还看了symsum()
,但这只需要通用变量。我试图将epsilon从i = 1加到100,其中z_i和w_i是感兴趣的向量。我希望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
epsilon应该对此求和,但应该是i=[1,100]
的总和。我不知道如何将w_i
和z_i
向量的值编入索引以获得贯穿它们的总和。我尝试为它们创建一个输入变量,如z(i)
和w(i)
,但结果很混乱。
有什么建议吗?
答案 0 :(得分:1)
听起来你只是想要:
epsilon = (1/(n-1))*sum((w(1:100)-(m*z(1:100)+b)).^2);
虽然您w
和z
只有100个元素,但我认为这与您所做的相同。所以我认为你的代码实际上是正确的。
例如,如果a = [1 2 3]
,sum(a)
为6
,您实际上不必索引a
来获得总和。所以你的代码找到了所有100个元素的总和。
基本思想是在matlab中1:10
之类的东西只是[1 2 3 4 5 6 7 8 9 10]
的简写,你可以用它来索引矢量。因此,如果我们有一个向量v = rand(100,1)
,那么要获得v
的前10个元素,它只是v(1:10)