2015-09-15 3 views
0

В моей петле для ввода значения K будет помещено только первое значение K, напечатайте нужное значение, а затем напечатайте все нули вместо запуска вложенного цикла цикла со следующими значениями K.Forloops in matlab

Мой сценарий

Exp1H1 = 35.6; 
Exp1H2 = 24.7; 
Exp2H1 = 46.8; 
Exp2H2 = 37.8; 
Exp3H1 = 45.7; 
Exp3H2 = 36.4; 
Exp4H1 = 47.7; 
Exp4H2 = 39.2; 

Radius = 3.75; 
L = 10; 

ArrayOfHeightDiff = [(Exp1H1-Exp1H2),(Exp2H1-Exp2H2),(Exp3H1-Exp3H2),  (Exp4H1-Exp4H2)]; 
dhdl = ArrayOfHeightDiff./L 
ArrayOfDarcys = [0.29,0.25,0.26,0.23]; 
v_meas = ((ArrayOfDarcys.*1000)./60)./(pi*Radius^2) 

K = [-0.3 : 0.1 : 0.5]; 

for ii = 1 : 1 : length(K) 
ExportSum = ls_error(dhdl, v_meas, K(ii)) 
ExportSum(1,ii) = ExportSum 
end 

ExportSum 

Это функция

function [ExportSum] = ls_error(dhdl, v_meas, K) 

total = 0;   
L = length(dhdl); 

for ii = 1 : 1 : L 
dhdl1 = dhdl(1,ii); 
vi = v_meas(1,ii);   

yi = 1*K* dhdl1;  
partialSum = (vi - yi)^2; 
total = total + partialSum;  
end 

ExportSum = total; 
end 
+0

что вы спрашиваете? – scmg

+0

Используйте [отладчик MATLAB] (http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html), чтобы пройти через ваш код и оценить, что происходит на каждой итерации вашего цикла. – excaza

ответ

1

Основной проблемой в этом for цикле:

for ii = 1 : 1 : length(K) 
    ExportSum = ls_error(dhdl, v_meas, K(ii)) 
    ExportSum(1,ii) = ExportSum 
end 

В этот цикл выполняет перезаписывает ExportSum с каждой итерации , затем копирует значение в iith столбец вектора. Там нет причин, чтобы разделить линии, как это, попробуйте объединить их и посмотреть, если вы получите результат, который вы ожидаете:

for ii = 1 : 1 : length(K) 
    ExportSum(1, ii) = ls_error(dhdl, v_meas, K(ii)); 
end 

который возвращает:

ExportSum = 

    0.5822 0.3291 0.1477 0.0380 0.0000 0.0338 0.1392 0.3164 0.5653 
+0

Большое вам спасибо !!! –

+0

не забудьте принять ответ, нажав галочку рядом с ним. @JamesMatthews благодарит! –