2017-04-20 5 views
0

저는 Matlab을 처음 사용하고 있으며 지난 두 시간 동안 검색 한 결과 내 문제가 해결되지 않았습니다. 나의 목표는 20 독립 실험의 평균을 기준으로 확산 계수를 계산 한 다음 이들 확산 계수의 제곱 평균 편차로 통계적 불확도를 추정하는 것입니다.
데이터 세트가 있습니다 : 20 열 151 행. 각 열은 하나의 실험을 나타냅니다. 나는 각 행의 평균을 계산하려고 하나 매번 한 개의 열을 남기고 싶다. 그래서 한 번에 하나의 실험이 생략된다. 그래서 결국 나는 151 개의 "평균"값을 갖는 20 개의 컬럼을 원합니다. 내가 지금까지 시도하는 것 :한 번에 하나의 열을 제외한 각 행의 MATLAB 평균

DataExclOne = RawData; 
DataExclOne(:,1) = [] 

나는 모든 20 열이 작업을 수행 한 후

mean (DataExclOne,2) 

그러나이 정말 도움이되지 않습니다 수단을 계산할 수 있습니다. 나는 좋은 부드러운 코드를위한 일종의 루프가 필요하다고 생각하지만, 나는 그것을 이해할 수 없었다. (나는이 웹 사이트에서 한 번 보았다 : https://www.tutorialspoint.com/matlab/matlab_loops.htm)

그게 전부다. 나는해야 할 두 번째 부분이다. 이것이 언제 끝나는 지 알아보십시오;)
이 평균값은 올바른 단위를 설명하기 위해 10^-18을 곱해야합니다.
이들 값의 기울기 대 엔트리 16에서 136까지의 설정 시간 (0-3000 ps)은 6으로 나누어야합니다.이 20 개의 값 (확산 계수)은 평균 제곱근을 계산하여 통계적 불확실성을 테스트하려고합니다 편차 (alread는 RMSD https://de.mathworks.com/matlabcentral/answers/4064-rmse-root-mean-square-error에 무엇인가 발견됨). 어떤 도움이나 지침이 행렬 곱셈을 사용할 수 있습니다

답변

3

에 대한
감사 :

% data matrix 
A = rand(151,20); 
% missing column indexes matrix 
B = ones(20) - eye(20); 
% mean of each row with one missing col at a time 
V = (A*B)/19; 
% do that again manually for columns 1 and 4 
v1 = mean(A(:,2:end),2); 
v4 = mean(A(:,[1:3 5:end]),2); 
% check 
diff1 = max(abs(V(:,1) - v1)) % 2.2204e-16 
diff4 = max(abs(V(:,4) - v4)) % 1.1102e-16 
+0

이것은 명확합니다. 1 열과 4 열의 부분은 계산 된 평균값에 약간의 편차가 있음을 나타냅니다. 맞습니까? –

+0

예, 메소드를 비교하기위한 것입니다. – user2999345

0

당신은 circshift 배열을 이동하고 첫 번째 열의 각 시간을 건너 뛰는 평균 걸릴 수 있습니다. 이 스크립트의 콘솔 출력을보고 무슨 일이 일어나고 있는지 확인하십시오. .

x = 1:5; 
x = [x;x;x]; 
y = zeros(size(x)); 

for nn = 1:size(x,2) 
    x = circshift(x,1,2) 
    y(:,nn) = mean(x(:,2:end),2) 
end 
+0

감사합니다 또한 도움이되었다. 이걸 곧바로 얻을 수 있습니다 :'mean (x (:, 2 : end), 2)'는 첫 번째 열을 남겨두고 평균을 계산합니다. 그러면'y (:, nn)'은 전체 열 (:)에 대해 nn 위치의 평균을 씁니다. –