如何在matlab中绘制受约束的函数

如何在matlab中绘制受约束的函数,matlab,optimization,plot,constraints,inequality,Matlab,Optimization,Plot,Constraints,Inequality,我有这个功能: function f=cost(x) f=1.10471*x(1)^2*x(2)+0.04811*x(3)*x(4)*(14.0+x(2)); 服从 g(1)=tau-tau_max; g(2)=sigma-sigma_max; g(3)=x(1)-x(4); g(4)=0.10471*x(1)^2+0.04811*x(3)*x(4)*(14+x(2))-5.0; g(5)=0.125-x(1); g(6)=delta-delta_max; g(7)=P-PcX; 所有的g[

我有这个功能:

function f=cost(x)
f=1.10471*x(1)^2*x(2)+0.04811*x(3)*x(4)*(14.0+x(2));
服从

g(1)=tau-tau_max;
g(2)=sigma-sigma_max;
g(3)=x(1)-x(4);
g(4)=0.10471*x(1)^2+0.04811*x(3)*x(4)*(14+x(2))-5.0;
g(5)=0.125-x(1);
g(6)=delta-delta_max;
g(7)=P-PcX;

所有的g[1..7]都应该是你有一个四个自变量的函数,所以本质上是一个五维的东西。你想画什么?????????你有一个显示器,或者一张纸。这些东西有两个维度,而不是五个维度

这里的约束并不重要,因为您无论如何都无法绘制此关系


仅仅想做某事是不足以让它发生的。如果愿望是马,乞丐就会骑马。

一个简单的方法是定义一个新函数,当它的参数小于或等于零时返回1,并为+ve arguemnt返回NaN

function H = mod_neg_step(argument)
         H = zeros(size(argument));
         H(argument<= 0) = 1;
         H(argument> 0) = NaN;
end
这将确保当g(1)…g(7)为正时,函数f返回值NaN。只有当g(1)…g(7)全部为0或负时,函数f才会返回

f=1.10471*x(1)^2*x(2)+0.04811*x(3)*x(4)*(14.0+x(2));

假设约束是问题所在:您可以在整个域上获取函数,然后将不满足约束的所有函数值放入NaN中。我想你可以一次做一个约束,我只是想确定函数的可行区域。这是一个样本,但我没有完全理解@抱歉,你没有读我说的,没有思考问题。该域是参数中的一个4维域。你将如何策划?您显示的示例的维度数较少。我不在乎你想做什么。我在第一篇博文中解释说,我不知道如何恰当地表达,但我会使其中两个不变,其余的情节不变。例如:x1=2 x2=4,然后绘制x3和x4。我想我们可以做到,对吗?@egazi-这需要你在剩下的两个参数中找到一个多边形区域。理论上,如果你仔细确立一个目标,contour可以做到。我在第一篇文章中补充了我到目前为止所做的。你能帮我查一下吗?多谢了,汉克斯,但这就像一个惩罚函数。我已经可以应用惩罚函数了。我需要的是类似于伪码的东西,在二维不变的情况下绘制目标函数。你能帮我一下吗?当然。只要给我tau,tau_max,delta,delta_max,P,PcX的表达式/值,这就是完整的问题和PSO算法的解决方案。这给了我fmin和gbest。但我需要的是绘制目标函数。提前感谢我在第一篇文章中添加了我迄今为止所做的工作。你能帮我查一下吗?谢谢
function H = mod_neg_step(argument)
         H = zeros(size(argument));
         H(argument<= 0) = 1;
         H(argument> 0) = NaN;
end
f=1.10471*x(1)^2*x(2)+0.04811*x(3)*x(4)*(14.0+x(2));
f=f*mod_neg_step(g(1))*mod_neg_step(g(2))*mod_neg_step(g(3))*mod_neg_step(g(4))...
  *mod_neg_step(g(5))*mod_neg_step(g(6))*mod_neg_step(g(7));
f=1.10471*x(1)^2*x(2)+0.04811*x(3)*x(4)*(14.0+x(2));