2013-04-30 37 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