如何解决这个约束非线性方程组的正值?

Zet*_*tor 3 optimization matlab

如何针对x的正值求解此系统?我使用了fval,但它无法找到答案,并要求更大的迭代,这是无益的...
必须是正的,小于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];
Run Code Online (Sandbox Code Playgroud)

编辑: 这个问题是如何"过于本地化"的?!!
我通过设计公共发射极放大器得出了这个方程组.第一个等式来自$/betha/$的独立性.第二个是从Collector到Emitter的kvl.第三个是CE增益.最后一个是R_in

cco*_*ook 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
Run Code Online (Sandbox Code Playgroud)

x =

258.0438 84.3372 24.9576 34.8035 3.0926 88.0000

ans =

0.0043    -0.0000
0.0001    -0.0000
Run Code Online (Sandbox Code Playgroud)

注意解算器如何撞击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
Run Code Online (Sandbox Code Playgroud)

x =

360.8859 132.2940 27.6590 34.2885 3.6943 117.8688

ans =

1.0e-14*

-0.0002 0.1776 -0.0444 0

想想第二种方法是给背包客一套路径/道路使用.它引导求解器通过R ^ 6空间.