使用Matlab 的函数 fmincon 求最小约束非线性多变量函数遇见的问题
一个非线性编程求解器,算出指定的问题的最小值,使用了一些博主的案例代码,但都运行不成功,matlab也显示已安装optimization toolbox,希望有了解的博主帮我看一下是哪里的原因。
案例代码1:
程序运行失败:
案例代码2:
程序运行失败:
使用Matlab 的函数 fmincon 求最小约束非线性多变量函数遇见的问题
一个非线性编程求解器,算出指定的问题的最小值,使用了一些博主的案例代码,但都运行不成功,matlab也显示已安装optimization toolbox,希望有了解的博主帮我看一下是哪里的原因。
案例代码1:
引自免费微信小程序:皆我百晓生
从您给出的代码和描述来看,您在尝试使用MATLAB的fmincon
函数求解非线性约束优化问题时遇到了一些问题。我会尝试帮助您解决这些问题。
首先,让我们逐一分析您给出的案例代码和可能出现的问题:
function
关键字并明确指定输入和输出。例如,对于fu
函数,应定义为:function f = fu(a)
x = a(1); y = a(2);
f = x^2 + y^2 - x*y - 10*x - 4*y + 60;
end
注意这里的end
关键字表示函数定义的结束。您的代码中似乎缺少了这些部分。
2. 约束函数格式问题:对于fuu
函数,它应该返回两个输出:不等式约束c
和等式约束d
。定义方式如下:
function [c, d] = fuu(a)
x = a(1); y = a(2);
c = exp(y) - 64; % 不等式约束
d = x^2 + y^2 - 34; % 等式约束
end
同样需要注意end
关键字。
3. 调用fmincon的格式问题:在调用fmincon
时,确保所有参数都按照正确的顺序和格式传递。特别是约束函数的调用,需要确保它们的格式正确。此外,参数名称如I
和u
在MATLAB中通常不使用下划线(除非有特殊原因),并且它们的命名应与函数内部的变量一致。另外,函数调用中的'fuu'
部分可能不需要引号。请确保它与之前定义的函数名一致。最后,请确保所有变量都已正确定义并传递给函数。从您提供的代码中看,可能还存在其他一些格式或拼写错误。
'mycon'
函数,但似乎没有提供正确的定义或调用方式。请确保该函数已经正确定义并传递给了 fmincon
函数。此外,变量名称如 lb
和 ub
通常用于表示线性约束的下界和上界,但在您的代码中似乎使用了错误的格式或变量名。请检查并确保它们的正确性。如果您的目的是使用非线性约束,请确保您的代码正确反映了这一点。例如,对于非线性约束条件,您可能需要定义一个专门的非线性约束函数并将其传递给 fmincon
函数。同时检查所有函数调用和参数传递是否正确无误。对于拼写错误、变量未定义或未正确传递等问题,需要仔细检查并修正代码中的错误。由于代码较长且涉及多个文件或编辑器中的片段,难以直接指出具体的问题所在。建议您仔细检查上述提到的关键点,并尝试逐一解决可能的问题点。如果问题仍然存在,建议您逐步调试代码或简化代码以更容易地找到问题所在。希望这些分析能够帮助您解决问题!如果有任何其他问题或需要进一步的帮助,请告诉我!