2013-04-30 354 views
0

我有一个包含两个向量的变量。我想将这些数量从i = 1加到n,其中n = 100。当程序运行时,我可以单击工作空间中的变量以查看每个列位置向量的元素值。当执行其位置的变量时,我得到相应的值(例如,z(1)= 73.2360,z(2)= 63.3701,...等等)。但是,我似乎无法弄清楚的是,如何为总和运行这两个向量的元素来对它们进行索引。例如在for循环中。我也看了一下symsum(),但那只需要通用变量。我试图总结从i = 1到100的epsilon,其中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 

的小量应该总结这一点,但应该从i=[1,100]的总和。我不知道如何将w_iz_i向量的值编入索引,以便在其中运行总和。我试图给他们做一个输入变量,如z(i)w(i),但变得凌乱。

有什么建议吗?

+0

所以,你想计算1和100之间的每个'i'值的第一个元素的总和? – 2013-04-30 09:13:34

回答

1

这听起来像你只是想:

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

虽然因为你wz仅有100元素长,我觉得这是一样的,你做了什么。所以我认为你的代码实际上是正确的。

例如,如果a = [1 2 3],那么sum(a)6,您实际上不必索引a以获得总和。所以你的代码找到所有100个元素的总和。

你应该阅读了关于该Matlab colon operator

的基本思路是,在MATLAB类似1:10只是短手[1 2 3 4 5 6 7 8 9 10],你可以用它来索引一个向量。所以,如果我们有一个向量v = rand(100,1)那么得到v的前10个元素,它只是v(1:10)

+0

不要以为这就是OP想要的。 'x'和'z'已经有100个样本,结肠索引是多余的。 – 2013-04-30 09:25:58

+0

@EitanT是的,我同意,我在答复中已经说过很多。我认为OP的代码是正确的tbh。 – Dan 2013-04-30 09:26:57

+1

@Dan:我也检查了代码,我认为你是对的!但是,OP也许正在寻找一个累积和?否则,这个问题对我来说听起来很神秘。 – fpe 2013-04-30 09:31:11