2016-11-30 18 views
0

最小二乗法を使用して、Matlabにデータを収めようとしています。関数の値のある条件が満たされるまでループする

私は最適なパラメータを見つけましたが、今、それらの不確かさを判断したいと思います。 (そのバリエーションで評価)機能マイナス元の関数値との差が1に等しくなるまで

最初のパラメータの不確実性を決定するためには、我々は、1が一つのパラメータに変動を適用すべき過程で見てきたと言います

つまり、Matlabコードには、[bestparam]という名前のベクトルがあり、これには4つのパラメータa、b、c、dが含まれています。

また、別のファイルで定義された関数chi-squareがあります。この関数は、最良のパラメータで評価しました。

パラメータaに小さなバリエーションを適用し、カイ二乗(a +バリエーション) - カイ2乗= 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秒後に停止します。しかし、関数の値の違いは、もはや正確には1つではありません。たとえば、元の関数の値は63.5509であり、新しい関数の値は64.6145であり、正確には1ではありません。

コードを実装し、差異が1になるまでパラメータを更新し続ける方法はありますか?ヘルプは高く評価されます。

答えて

1

数値メソッドを実行する2つの整数を比較していることが確かでない限り、==または~=のような演算を使用することはお勧めしません。あなたの価値のわずかな偏差は、コードが決して止まらない原因になるかもしれません。程度の差があれば、許容範囲のしきい値を適用してコードを停止させることができます。

TOL = 1e-2; 
while (abs(newchisquare - chisquarevalue) <= 1 - TOL) 
    % your code 
end 
関連する問題