一个matlab程序的问题

来源:百度知道 编辑:UC知道 时间:2024/04/28 08:37:00
求个2元2次函数的最小值,x取值范围是(63,80),x1的取值范围是(730,740),还有二者关系:x+x1>=802,以下是我的程序
myfun.m:
function f=myfun(x)
f=(x^2+690^2-x(1)^2)/(1380*x);
mycon.m:
A=[1,0;0,1;-1,-1];
b=[80;740;-802];
mubiao.m:
x0=[63;731];
lb=[62;730];
A=[1,0;0,1;-1,-1];
b=[80;740;-802];
options = optimset('largescale','off','TolFun',1e-1);
[x,fval,exitflag,output]=fmincon(@myfun,x0,A,b,[],[],lb,[],@mycon,options)

运行后出错,提示:
??? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function failed with the following error:
Error using ==> mpower
Matrix must be square.
Error in ==> mubiao at 6
[x,fval,exitflag,output]=fmincon(@myfun,x0,A,b,[],[],lb,[],@mycon,options)
貌似是矩阵维数错误,我在网上查感觉说是矩阵的点乘..,但我也自己修改了很多次,依然不行,请高手们给个帮助,谢谢
或者将程序简化为:
myfun.m:
function f=myfun(x)
f=(x^2+690^2-x(1)^2)/(1380*x);
mycon.m:
A=

程序通了。
%=========================
function hh
A=[-1,-1];
b=-802;
x0=[735,70];
lb=[730 63];
ub=[740 80];
options = optimset('largescale','off','TolFun',1e-10);
[x,fval,exitflag,output]=fmincon(@myfun,x0,A,b,[],[],lb,ub,[],options)

function f=myfun(x)
f=(x(2)^2+690^2-x(1)^2)/(1380*x(2));
%=============================

结果:x(1)就是x1,x(2)就是x
Optimization terminated: first-order optimality measure less
than options.TolFun and maximum constraint violation is less
than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
2 1

x =

740 63

fval =

-0.7768

exitflag =

1

output =

iterations: 19
funcCount: 60
lssteplength: 1