Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解优化问题并在Matlab中求解(选择合适的解算器)_Matlab_Math_Optimization_Fminsearch - Fatal编程技术网

理解优化问题并在Matlab中求解(选择合适的解算器)

理解优化问题并在Matlab中求解(选择合适的解算器),matlab,math,optimization,fminsearch,Matlab,Math,Optimization,Fminsearch,也许是一句经典的话:几天来我一直试图理解这一点,但没有成功——真的是关于我! 让我们从这里看一个简单的约束优化问题,即在预算约束下实现收入最大化。所以问题是 我们可以在Matlab中使用fmincon 或者我们可以使用拉格朗日代价函数,并将其改写为无约束优化问题(我在这个阶段是正确的吗?) 然后使用fminsearch或fminunc求解该目标函数(甚至使用ga进行了尝试) lambda=2.5927; >>目标=@(x)-200*x(1)^(2/3)*x(2)^(1/3)-lambda*(

也许是一句经典的话:几天来我一直试图理解这一点,但没有成功——真的是关于我! 让我们从这里看一个简单的约束优化问题,即在预算约束下实现收入最大化。所以问题是

我们可以在Matlab中使用fmincon

或者我们可以使用拉格朗日代价函数,并将其改写为无约束优化问题(我在这个阶段是正确的吗?)

然后使用fminsearchfminunc求解该目标函数(甚至使用ga进行了尝试)

lambda=2.5927;
>>目标=@(x)-200*x(1)^(2/3)*x(2)^(1/3)-lambda*(20*x(1)+170*x(2)-20000;
x=fminuncfminunc(目标[1,1])
>>问题似乎是无限的。
fminunc已停止,因为目标函数值小于
或等于目标函数极限的值。
x=
1.0e+19*
0.2504    6.4423
>>x=fminsearch(目标[1,1])
退出:已超过最大功能评估数
-增加MaxFunEvals选项。
当前功能值:-51855.290146
x=
0.1088    1.7458
使用fmincon给出不同的结果,甚至不接近约束解。我试图改变标志,把lambda=1

那么为什么是这样,我错在哪里,或者我不明白什么


提前谢谢

正如输出清楚地告诉您的,您最后的调用没有到达解决方案,但由于其他原因已完成。结果是不可信的,我投票结束这个问题,因为它与编程无关。它确实与Matlab及其语法有关,因此我既没有错误地使用Matlab函数,也没有错误地使用我的期望值,是的,与数学理论有关。输出清楚地告诉你,您上次的呼叫未到达解决方案,但由于其他原因已完成。结果是不可信的,我投票结束这个问题,因为它与编程无关。它确实与Matlab及其语法有关,因此我既没有错误地使用Matlab函数,也没有错误地期望,是的,与数学理论有关
objective = @(x) -200*x(1)^(2/3)*x(2)^(1/3);
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = fmincon(objective,[1,1],[],[],[20, 170],20000,[],[],[])
>> X =

  666.6669   39.2157
  LAMBDA = 

  struct with fields:

         eqlin: 2.5927
lambda = 2.5927;
>> objective = @(x) -200*x(1)^(2/3)*x(2)^(1/3)-lambda*(20*x(1) + 170*x(2) - 20000);
x = fminuncfminunc(objective,[1, 1])

>> Problem appears unbounded.

fminunc stopped because the objective function value is less than
or equal to the value of the objective function limit.

<stopping criteria details>

x =

   1.0e+19 *

    0.2504    6.4423

>> x = fminsearch(objective,[1, 1])

Exiting: Maximum number of function evaluations has been exceeded
         - increase MaxFunEvals option.
         Current function value: -51855.290146 


x =

    0.1088    1.7458