如何求解这个具有正值的约束非线性方程组



对于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/$的独立性。第二个是从收集器到发射器的kvl。第三个是CE增益。最后一个是中的R_

这非常适合非线性约束优化类别,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

x=

258.0438 84.3372 24.9576 34.8035 3.0926 88.0000

ans=

0.0043    -0.0000
0.0001    -0.0000

注意解算器是如何冲击b的下界的。你可以尝试玩最初的猜测,看看你是否能找到一个更好的min。没有解决方案是保证的。。。

这是有趣的部分,你可以做得更好。您的系统不仅仅是一个成本函数,而且是对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

x=

360.8859 132.2940 27.6590 34.2885 3.6943 117.8688

ans=

1.0e-14*

-0.00020.1776-0.04440

把第二种方法想象成给背包客一套可以使用的小径/道路。它引导解算器穿过R^6空间。

最新更新