在 Matlab 中使用"fsolve"在数字上查找最小化器



我对Matlab完全陌生,我的代码一直有一些问题。

我需要使用"fsolve"来定位非线性优化问题的最小值,但我无法使其工作。我一直在使用mathworks的"非线性系统的求解过程"部分。

我的代码如下:

function F = myfun(x)
F = [4*x(4) + 2*x(1) - x(3)*(2*x(1) + 4) + 4*x(1)*(x(1).^2 + x(2) - 11) + 2*x(2).^2 - 14; 
x(3) - 10*x(4) + 2*x(2) + 4*x(2)*(x(2).^2 + x(1) - 7) + 2*x(1).^2 - 22; 
x(2) - (x(1) + 2).^2; 
4*x(1) - 10*x(2);];
x0 = [-5;-5];
options = optimoptions('fsolve','Display','iter');
[x,fval] = fsolve(@myfun,x0,options);
end

它在哪里说;分配给x的值似乎也未使用;输入参数不足。但根据数学作品的页面,我和他们做了完全一样的事情,所以我现在有点迷路了。

有几件事你做得不对:

  1. 函数myfun必须仅包含方程式(如Florian的评论中所述)
  2. 必须从单独的脚本或从命令窗口调用fsolvex0options
  3. 初始点阵列x0必须具有至少与myfun中的方程中存在的变量(x(4)x(3)x(2)x(1))一样多的元素

编辑函数myfun,确保它只包含方程,并将其保存在工作目录中。

function F = myfun(x)
F = [4*x(4) + 2*x(1) - x(3)*(2*x(1) + 4) + 4*x(1)*(x(1)^2 + x(2) - 11) + 2*x(2)^2 - 14;
x(3) - 10*x(4) + 2*x(2) + 4*x(2)*(x(2)^2 + x(1) - 7) + 2*x(1)^2 - 22;
x(2) - (x(1) + 2)^2;
4*x(1) - 10*x(2)];
end

请注意,您不需要使用元素幂运算符.^。使用^运算符就足以在方程式中定义幂。

现在,在命令窗口中输入以下说明:

x0 = [-5;-5;-5;-5];
options = optimoptions('fsolve','Display','iter');
[x,fval] = fsolve(@myfun,x0,options);

请注意,我修改了x0,使其至少有4个元素,以便与您在myfun中定义的方程数量相匹配。这些只是示例值,因此应该使用问题的值修改x0

这是输出的一个片段:

Norm of      First-order   Trust-region
Iteration  Func-count     f(x)          step         optimality    radius
0          5           81521                      4.27e+04               1
1         10         12608.5              1       1.15e+04               1
2         15         966.243            2.5       1.71e+03             2.5
3         20         408.322           6.25            685            6.25
4         21         408.322         15.625            685            15.6
5         26         263.815        3.90625            244            3.91
6         27         263.815        9.76563            244            9.77
7         32          205.88        2.44141            272            2.44
8         37          138.11        6.10352            206             6.1
9         42         93.4561        6.10352            105             6.1
10         47         64.0129        6.10352           42.3             6.1
...

最新更新