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

时间:2017-02-12 11:05:37

标签: matlab minimize nonlinear-optimization

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

1 个答案:

答案 0 :(得分:1)

有些事情你做得不对:

  1. 函数myfun必须只包含公式(如Florian的comment中所述)。
  2. 必须从单独的脚本或命令窗口调用
  3. fsolvex0options
  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
    

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

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

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