|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
在matlab中使用fmincon函数作非线性优化理论推导时,由于做的是理论推导,中间有几个常数(也是别的地方的理论推导的公式,在这里可以看成不变量常数)打算用字母表示(希望求解推导的优化求解结果中仍然用这几个字母表示),这样我就打算把它们设置成符号常量(M, pe0, C),这样在用fmincon推导求解的结果表达式中也是含有字母的理论结果。可是matlab报错了,错误信息如下:
??? Error using ==> fmincon FMINCON cannot continue because user supplied objective function failed with the following error: Undefined function or variable 'M'. 我查了很多相关信息,也进行了尝试,都没有解决,请大家帮忙,谢谢! 相关代码如下:
主函数:
clear,clc;
%syms M pe0 C;
%subs(M),subs(pe0),subs(C);
A = [-1 1 2;-1 1 0;-1 0 1];
b = [0 0 0];
x0 = [7 4 1];
lb = ones(3,1);
ub = 100.*lb;
Aeq = [];
beq = [];
options=optimset('LargeScale','off');
[x, fval] = fmincon(@myfun, x0, A, b, [], [], lb, ub, @mycon, options);
%[x, fval] = fmincon(@myfun, x0, A, b, [], [], lb, ub, @mycon, options, M, pe0, C);
%[x, fval] = fmincon(@myfun, x0, A, b, [], [], lb, ub, @mycon, options, pe0, C);
%[x, fval, exitflag, output, lambda] = fmincon(@opt_f, x0, A, b, [], [], lb, [], @opt_c);
两个调用函数:
function f = myfun(x, M)
% M = inline(M);
%f = M^(-1)*x(1)*x(2)^(-1);
f = sym('M^(-1)*x(1)*x(2)^(-1)');
f = subs(f);
%f = inline(f);
function [c, ceq] = mycon(x, pe0, C)
%c(1) = pe0 - x(1)^(-1)*x(3);
%c(2) = -C + x(1)^(-1)*x(2);
c(1) = sym('pe0 - x(1)^(-1)*x(3)');
c(2) = sym('-C + x(1)^(-1)*x(2)');
%c(1) = subs(c(1));
%c(2) = subs(c(2));
c = [c(1) c(2)];
c = subs(c);
%c = inline(c);
ceq=[];
[ 本帖最后由 yanxuehu 于 2008-1-19 18:14 编辑 ] |
|