yanxuehu 发表于 2008-1-18 22:04

请教一个使用fmincon求解非线性规划结合符号函数编程的问题


在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 = ;
x0 = ;
lb = ones(3,1);
ub = 100.*lb;   
Aeq = [];
beq = [];
options=optimset('LargeScale','off');   
= fmincon(@myfun, x0, A, b, [], [], lb, ub, @mycon, options);
% = fmincon(@myfun, x0, A, b, [], [], lb, ub, @mycon, options, M, pe0, C);
% = fmincon(@myfun, x0, A, b, [], [], lb, ub, @mycon, options, pe0, C);
% = 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 = 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 = subs(c);
%c = inline(c);
ceq=[];

[ 本帖最后由 eight 于 2008-1-22 16:46 编辑 ]
页: [1]
查看完整版本: 请教一个使用fmincon求解非线性规划结合符号函数编程的问题