使用 'fsolve' 在 Matlab 中以数字方式查找最小值

Finding minimizers numerically in Matlab with 'fsolve'

我是 Matlab 的新手,我的代码遇到了一些问题。

我需要使用 'fsolve' 来定位非线性优化问题的极小值,但我无法让它工作。 我一直在使用 mathworks 中的 'Solution Process of Nonlinear System' 部分。

我的代码如下:

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 的值似乎也未使用;没有足够的输入参数。但是根据 mathworks 页面,我做了与他们完全相同的事情,所以我现在有点迷路了。

有几件事你做得不对:

  1. 函数 myfun 只能包含方程式(如 Florian 的 中所述)。
  2. fsolvex0options 必须从单独的脚本或命令 Window.
  3. 调用
  4. 初始点数组 x0 必须至少与变量 (x(4)x(3)x(2)x(1)) 中存在的元素一样多myfun.
  5. 中的方程式

编辑您的函数 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

请注意,您不需要使用 element-wise 幂运算符 .^。使用 ^ 运算符足以在方程中定义幂。

现在在命令 Window 中输入以下指令:

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
    ...