本帖最后由 丶请叫我三B 于 2017-7-23 15:37 编辑
各位高手,能帮我看看这个程序吗?我照着书写,运行出错。自己改了也还是有问题。
这是书上的程序 : 函数fun10.m function [f,df]=fun10(x)
f=exp(x1)*(4*x1^2+2*x2^2+4*x1*x2+2*x2+1);
df=[exp(x1)*(4*x1^2+2*x2^2+4*x1*x2+8*x1+6*x2+1);exp(x1)*(4*x2+4*x1+2)];
end
函数fun11.m:
function [c,ceq,dc,dceq]=fun11(x)
c=[x1*x2-x1-x2+1.5;-x1*x2-10];
dc=[x2-1,-x2;x1-1,-x1];
ceq=[];dceq=[];
end
运行程序:
options=optimset('GradObj','on','GradConstr','on');
[x,y]=fmincon(@fun10,rand(2,1),[],[],[],[],[],[],@fun11,options)
运行结果是:
未定义函数或变量 'x1'。
出错 fun10 (line 2)
f=exp(x1)*(4*x1^2+2*x2^2+4*x1*x2+2*x2+1);
出错 fmincon (line 573)
[initVals.f,initVals.g] = feval(funfcn{3},X,varargin{:});
出错 lianxi2 (line 2)
[x,y]=fmincon(@fun10,rand(2,1),[],[],[],[],[],[],@fun11,options)
然后我的理解是在fun10.m的程序中exp(x1)这里未定义x1函数。但是我如果把程序改成这样:
我的程序:
函数fun10.m:
function [f,df]=fun10(x1,x2)
f=exp(x1)*(4*x1.^2+2*x2.^2+4*x1.*x2+2*x2+1);
df=[exp(x1)*(4*x1.^2+2*x2.^2+4*x1.*x2+8*x1+6*x2+1);exp(x1)*(4*x2+4*x1+2)];
end
函数fun11.m:
function [c,ceq,dc,dceq]=fun11(x1,x2)
c=[x1*x2-x1-x2+1.5;-x1*x2-10];
dc=[x2-1,-x2;x1-1,-x1];
ceq=[];dceq=[];
end
脚本程序:
syms x1 x2;
x=[x1,x2];
options=optimset('GradObj','on','GradConstr','on');
[x,y]=fmincon(@fun10,rand(2,1),[],[],[],[],[],[],@fun11,options)
运行结果:
错误使用 fun10 (line 2)
输入参数的数目不足。
出错 fmincon (line 573)
[initVals.f,initVals.g] = feval(funfcn{3},X,varargin{:});
出错 lianxi2 (line 4)
[x,y]=fmincon(@fun10,rand(2,1),[],[],[],[],[],[],@fun11,options)
原因:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.现在该如何解决啊,有大佬能帮忙看看的吗?我是真搞不明白了,两个输入,两个输出,为什么会显示输入参数的数目不足?