我試圖編寫一個循環在Matlab中迭代地解決了零和一個最佳矢量。這是我的代碼關於在Matlab中的循環結構的迭代過程
N = 150;
s = ones(N,1);
for i = 1:N
if s(i) == 0
i = i + 1;
else
i = i;
end
select = s;
HI = (item_c' * (weights.*s)) * (1/(weights'*s));
s(i) = 0;
CI = (item_c' * (weights.*s)) * (1/(weights'*s));
standarderror_afterex = sqrt(var(CI - CM));
standarderror_priorex = sqrt(var(HI - CM));
ratio = (standarderror_afterex - standarderror_priorex)/(abs(mean(weights.*s) - weights'*select));
ratios(i) = ratio;
s(i) = 1;
end
[M,I] = min(ratios);
s(I) = 0;
此代碼將s中的元素設置爲零,它具有最低比率。但是我需要這個過程重新開始,使用帶有一個零的新的s來找出比率並排除s中具有最低比率的元素。我一直需要,直到沒有比例爲負。
我需要另一個循環,還是我想念一些東西?
我希望我的問題很清楚,告訴我你是否需要我解釋更多。
預先感謝您幫助新手程序員。
編輯
我認爲我需要添加一些形式,而循環的爲好。但我看不出如何構造這個。這是流動,我想
與所有項目包括(s(i) = 1
對於所有的i),計算HI,CI和標準誤差,並列出的比值,排除項目i(s(I) = 0
),其對應於最低負比率。
隨着新的,包括所有的一個,但一個零,計算HI,CI和標準誤差,並列出比率,排除項目我,這對應於最低的負比率。
隨着新的,現在包括所有的一個,但兩個零,重複該過程。
做到這一點,直到沒有排除的比例爲負數。
希望它現在變得更清楚。
我不會100%關注正在發生的事情,但我強烈懷疑您的問題與嘗試修改循環索引有關。實際上,我不確定當你在循環中修改'i'時,MATLAB(或者其他任何具有這種形式的for循環語法的語言)會發生什麼,但是我認爲在下一次迭代期間它很可能只是無論如何,它會被設置爲接下來的任何事情。所以在你的情況下,我懷疑循環體在'〜(s(i)== 0)的情況下不會重複,正如你似乎打算的那樣。我建議切換到'i = 1;而我<= N; ...;結束' –
我對循環索引進行了修改,因爲如果它先前已設置爲零,我不想將(i)'設置爲1。但我猜這是一種不好的習慣,對吧? – eshy
如果你只是把循環的內部放在'if s(i)〜= 0'循環中,它會起作用嗎? – David