【发布时间】:2015-11-15 04:41:54
【问题描述】:
我想为每个 x 值设置一个约束,0
???由于功能约束“cnstrnt”,未定义函数或变量“x”。
虽然它是一个变量,但fmincon 在cnstrnt 中要求x 的值。 x 代表多个变量。 b、k 和 vctr(常量向量)是常量。约束编码的正确方法是什么?
function [ h ] = f(x,vctr)
g=@(x) (vctr(1,6).*x.^5+vctr(1,5).*x.^4+vctr(1,4).*x.^3+ ...
vctr(1,3).*x.^2+vctr(1,2).*x.^1+vctr(1,1));
h=fzero( @(x)(g(x)-y),0);
end
function [ cc,ceq ] = cnstrnt(x,b,vctr)
for k=1:length(b)*2
cc(k)=f(x(k),vctr)-100;
cc(k+1)=-f(x(k),vctr);
end
ceq=[];
end
[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,cnstrnt(x,b,vctr),opts);
??? Undefined function or variable 'x'.
【问题讨论】:
-
函数
cnstrnt中的f是什么?它是在哪里定义的? -
f 是一个多项式函数(但给定 x 是线性的),它取决于变量 x 和常量 vctr。 x 的每个值都根据函数 f 进行评估以匹配指定的条件。
-
如果您完整显示
cnstrnt,那么我看不到该函数如何访问f。f定义在哪里? -
函数 f 定义在另一个 m 文件中。
标签: matlab optimization functional-programming constraints