我試圖用Matlab來使用最小二乘法來擬合一些數據。while循環,直到符合函數值的某個條件
我找到了最合適的參數,我想確定他們現在的不確定性。爲了確定第一個參數的不確定性,比如a,我們已經看到,當然應該對一個參數應用一個變化,直到函數(在那個變化下評估)減去原始函數值的差值等於1
也就是說,我的Matlab代碼中有一個名爲[bestparam]
的矢量,它包含四個參數a,b,c和d。
我也有一個函數定義在另一個文件中,稱爲chi-square
,我用最好的參數進行了評估。
我現在想要對參數a應用一個小的變化,並繼續這樣做直到卡方(a +變化) - 卡方= 1。差值必須恰好爲1。我爲此實現了以下代碼:
i = 0;
a_new = a + i;
%small variation on the parameter a
new_param = [a_new b c d];
%my new parameters at which I want the function chisquare to be evaluated
newchisquare = feval(@chisquare, [new_param], X, Y, dY);
%the function value
while newchisquare - chisquarevalue ~= 1
i = i + 0.0001;
a_new = a_new + i;
new_param = [a_new b c d];
newchisquare = feval(@chisquare, [new_param], X, Y, dY);
end
disp(a_new);
disp(newchisquare);
但是當我執行這個循環時,它永遠不會停止運行。當我將條件更改爲< 1
,即差值應該大於1時,它會在5秒後停止。但是,這些函數值之間的差異不再只是一個。例如,我的原始函數值是63.5509,而新的函數值是64.6145,它不是剛好大1。
那麼是否有某種方法來實現代碼,並不斷更新參數a,直到差別恰好爲1?幫助表示讚賞。