3

xの正の値についてこのシステムをどのように解くことができますか?私はfvalを使用しましたが、答えが見つからず、役に立たないより大きな反復を要求します...
aは正であり、0.05未満である必要が
ありますbは88よりも大きい必要があります

function F = Final_Project_2(x)
 F = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));
       (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;
       (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) - a;
       ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-b];

編集: この質問はどのように「ローカライズされすぎている」のですか?!!
この連立方程式は、エミッタ接地増幅器の設計から導き出しました。最初の方程式は、$ / betha/$からの独立性から得られます。2つ目は、コレクターからエミッターへのkvlです。3つ目はCEゲイン、最後はR_inです。

4

1 に答える 1

6

これは、非線形の制約付き最適化カテゴリにうまく適合します。ここでは fmincon が役立ちます。Fmincon を使用すると、解ベクトルに上限と下限を設定しながら、非線形システムを解くことができます。問題は、解決策が出発点に依存することです...したがって、解決策がどこにあるべきかについて良い推測があれば、それは大いに役立ちます。

この類推は、ソルバーに目の前の山の頂上に登るように依頼したり、ランダムな出発点からバックパッキングしてヨーロッパで最も高い山を見つけるように依頼したりするようなものです。近くにいるときは、「上に」歩くことができます。

とにかく、これを行う方法は次のとおりです。

function test()

    a = .05
    b = 88


    xo = [100 100 100 100 a b]


    options = optimset('MaxFunEvals',1E5, ...
        'MaxIter', 1E5, ...
        'TolFun', 1E-32, ...
        'TolX', 1E-32, ...
        'TolCon', 1E-32);

    x = fmincon(@(X) Ftest(X), xo, [], [], [], [], ...
        [-inf -inf -inf -inf a b], [], [],  options)

    Final_Project_2(x)

    function F = Ftest(x)
        F = norm(Final_Project_2(x))
    end

    function F = Final_Project_2(x)
        F = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));
               (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;
               (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) - x(5);
               ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-x(6)];
    end


end

×=

258.0438 84.3372 24.9576 34.8035 3.0926 88.0000

ans =

0.0043    -0.0000
0.0001    -0.0000

ソルバーが b の下限にどのように衝突したかに注目してください。最初の推測で遊んでみて、より良い分を見つけることができるかどうかを確認できます。解決策は保証されていません...

これは楽しい部分です。もっと上手にできます。システムは単なるコスト関数ではなく、 x の制約です。同様のコードですが、その情報を使用すると、強力なソリューションが得られます。

function test()

    a = .05
    b = 88


    xo = [100 100 100 100 a b]


    options = optimset('MaxFunEvals',1E4, ...
        'MaxIter', 1E4, ...
        'TolFun', 1E-32, ...
        'TolX', 1E-32, ...
        'TolCon', 1E-32);

    x = fmincon(@(X) Ftest(X), xo, [], [], [], [], ...
        [-inf -inf -inf -inf a b], [], @(X) xcon(X),  options)

    Final_Project_2(x)

    function F = Ftest(x)
        F = norm(Final_Project_2(x))
    end

    function [c,ceq] = xcon(x)
        c = []
        ceq = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));
            (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;
            (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) - x(5);
           ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-x(6);
           (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) - x(5);
            ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-x(6)];
    end

    function F = Final_Project_2(x)
        F = [(1/x(1)) + (1/x(2))- (2/(7*x(3)));
               (x(3)+2*x(4))*(15*x(2))/((x(1)+x(2))*x(3)-0.7/x(3))-14;
               (x(3)*((0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)))/(x(3)+(0.576*x(2)/(x(1)+x(2))*x(3)) - 0.27/x(3)) - x(5);
               ((0.576*x(2)*x(3)/(x(1)+x(2))*x(3)) - 0.27*x(4)/x(3))-x(6)];
    end


end

×=

360.8859 132.2940 27.6590 34.2885 3.6943 117.8688

ans =

1.0e-14 *

-0.0002 0.1776 -0.0444 0

2 番目の方法は、バックパッカーに使用する一連のトレイル/道路を提供するものと考えてください。R^6 空間を介してソルバーをガイドします。

于 2012-12-19T12:03:27.653 に答える