3

私は、inValuesの2つの初期設定値を変えることによって、minValuePossibleの可能な最小値を見つけることになっているMatlabにこの関数を持っています。最小値を見つけようとしているときに、負の値を試行しないように fmin 検索関数を設定するにはどうすればよいですか? また、最小値を見つけようとしているときに fminsearch 関数が実行するさまざまなバリエーションの数を設定するにはどうすればよいですか? 現在、2 つの inValue の約 20 の異なる組み合わせを試行してから完了するためです。各値を変更する量を定義することもできますか? どうすればいいですか?

            function Valueminimiser

            inValues = [50,50];

            minValuePossible = fminsearch(@minimiser, inValues); 

                function result = minimiser(inValues)

                x=inValues(1);
                y=inValues(2);

                RunMode = 2;
                ValueOne = x;
                ValueTwo = y;

                [maxSCRAout] = main(RunMode,ValueOne,ValueTwo);
                result = minValuePossible;

              end

            end
4

2 に答える 2

5

最小値を見つけようとしているときに、負の値を試行しないように fmin 検索関数を設定するにはどうすればよいですか?

ミニマイザー関数の値の制約を最初に追加します。この制約を満たす場合は、minimizer の巨大な関数値を返します。これにより、fminsearch が興味のない数値を考慮することがなくなります。

function result = minimiser(inValues)
            if (sum(inValues < 0) > 1) % check if there is any negative number in input variable
                result = hugeValue;    % give a big value to the result
                return;                % return to fminsearch - do not execute the rest of the code
            end

            x=inValues(1);
            y=inValues(2);

            RunMode = 2;
            ValueOne = x;
            ValueTwo = y;

            [maxSCRAout] = main(RunMode,ValueOne,ValueTwo);
            result = minValuePossible;

また、最小値を見つけようとしているときに fminsearch 関数が実行するさまざまなバリエーションの数を設定するにはどうすればよいですか?

optimset 関数を使用して、fminsearch のオプションを定義できます。optimset 'MaxFunEvals' のパラメーターは、評価の最大数です。これは、制約した値もカウントすることに注意してください。そのため、精度が気になる場合は、@slayton のアドバイスに従って 'TolX' を設定する方がよい場合があります。

options = optimset('MaxFunEvals',numberOfVariations);
minValuePossible = fminsearch(@minimiser, inValues,options);
于 2013-02-09T11:07:28.960 に答える
1

ドキュメントにfminsearchは、最小化したい関数のドメインを制限する方法が記載されていません。

範囲をすべての非負数に制限したい場合はabs、構文に応じて、関数を への呼び出しでラップするだけです。

minValuePossible = fminsearch( @(x)(minimiser( abs(x) ) ), inValues); 

常に同じ最小値に収束することが心配な場合は、さまざまな異なる初期値を試してください。

最後に、および入力パラメータXminValuePossible使用して、 の終了許容値を変更できます。これは、標準のパラメーター値の構文で行われます。TolXTolFunfunction(...., 'Param', value)

fminsearch( @(x)(minimiser(abs(x))), inValues, 'TolX', x_tolerance);
于 2013-01-29T16:20:49.097 に答える