请问用MATLAB编程,哪里错了?
functionf=fun(x);f=4233.1*(1/x(1))+1539.2*(1/x(2))+4667.5*(1/x(3))+1263.8*(1/x(4))+51...
function f=fun(x);
f=4233.1*(1/x(1))+1539.2*(1/x(2))+4667.5*(1/x(3))+1263.8*(1/x(4))+511.2*(1/x(5))+3292.2*(1/x(6))+2.4973*(1/x(7));
function [g,ceq]=mycon(x);
g=[1539.2*x(7)+2497.3*x(2)+640*x(2)*x(7)];
ceq=[];
x0=[2;2;2;2;2;3;3];
A=[];
b=[];
Aeq=[1 1 1 1 1 1 1];
beq=[18];
vlb=[0 0 6.4826 0 0 9.145 0 ];
vub=[18 18 18 18 18 18 18];
[x,fval]=fmincon('fun',A,b,Aeq,beq,vlb,vub,'mycon')
报错Error using fmincon (line 225)
FMINCON requires the following inputs to be of data type double: 'UB' 展开
f=4233.1*(1/x(1))+1539.2*(1/x(2))+4667.5*(1/x(3))+1263.8*(1/x(4))+511.2*(1/x(5))+3292.2*(1/x(6))+2.4973*(1/x(7));
function [g,ceq]=mycon(x);
g=[1539.2*x(7)+2497.3*x(2)+640*x(2)*x(7)];
ceq=[];
x0=[2;2;2;2;2;3;3];
A=[];
b=[];
Aeq=[1 1 1 1 1 1 1];
beq=[18];
vlb=[0 0 6.4826 0 0 9.145 0 ];
vub=[18 18 18 18 18 18 18];
[x,fval]=fmincon('fun',A,b,Aeq,beq,vlb,vub,'mycon')
报错Error using fmincon (line 225)
FMINCON requires the following inputs to be of data type double: 'UB' 展开
展开全部
很明显,是变量出错!
为什么呢?因为matlab的编程对于数据操作比较严格,一般不能自动转换比如要实现一个浮点数的运算,算一个1/x,当想要的结果为float的时候,这个时候就会报错,为什么呢?因为1不是浮点数,要改成1.0,由于你程序不够完整,咱不能具体看出到底哪些变量错误,不过大概可以知道你
vlb=[0 0 6.4826 0 0 9.145 0 ];
vub=[18 18 18 18 18 18 18];
此处你有浮点型,又有整型的,当你把他们混合一起运算,应该就会出问题,你试着都改成浮点型试试看吧。比如
vub=[18 .0 18.0 18.0 18.0 18.0 18.0 18.0];
把1/x改成1.0/x
为什么呢?因为matlab的编程对于数据操作比较严格,一般不能自动转换比如要实现一个浮点数的运算,算一个1/x,当想要的结果为float的时候,这个时候就会报错,为什么呢?因为1不是浮点数,要改成1.0,由于你程序不够完整,咱不能具体看出到底哪些变量错误,不过大概可以知道你
vlb=[0 0 6.4826 0 0 9.145 0 ];
vub=[18 18 18 18 18 18 18];
此处你有浮点型,又有整型的,当你把他们混合一起运算,应该就会出问题,你试着都改成浮点型试试看吧。比如
vub=[18 .0 18.0 18.0 18.0 18.0 18.0 18.0];
把1/x改成1.0/x
追问
还是报错了,也是报的Error using fmincon (line 225)
FMINCON requires the following inputs to be of data type double: 'UB',请问是什么原因?
展开全部
function f=fun(x)
f=4233.1*(1/x(1))+1539.2*(1/x(2))+4667.5*(1/x(3))+1263.8*(1/x(4))+511.2*(1/x(5))+3292.2*(1/x(6))+2.4973*(1/x(7));
上面保存为fun.m
function [g,ceq]=mycon(x)
g=[1539.2*x(7)+2497.3*x(2)+640*x(2)*x(7)];
ceq=[];
上面保存为mycon.m
x0=[2;2;2;2;2;3;3];
A=[];
b=[];
Aeq=[1 1 1 1 1 1 1];
beq=[18];
vlb=[0 0 6.4826 0 0 9.145 0 ];
vub=[18 18 18 18 18 18 18];
[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,vlb,vub,'mycon')
在命令行中输入上面语句试试
f=4233.1*(1/x(1))+1539.2*(1/x(2))+4667.5*(1/x(3))+1263.8*(1/x(4))+511.2*(1/x(5))+3292.2*(1/x(6))+2.4973*(1/x(7));
上面保存为fun.m
function [g,ceq]=mycon(x)
g=[1539.2*x(7)+2497.3*x(2)+640*x(2)*x(7)];
ceq=[];
上面保存为mycon.m
x0=[2;2;2;2;2;3;3];
A=[];
b=[];
Aeq=[1 1 1 1 1 1 1];
beq=[18];
vlb=[0 0 6.4826 0 0 9.145 0 ];
vub=[18 18 18 18 18 18 18];
[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,vlb,vub,'mycon')
在命令行中输入上面语句试试
更多追问追答
追问
我就是这样弄的,报错了Error using fmincon (line 225)
FMINCON requires the following inputs to be of data type double: 'UB'
追答
我这儿运行没问题,你的电脑或matlab版本有问题吧,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
右键MATLAB属性,兼容性 选择VISTA 最下面以管理员运行 就OK了
追问
还是报错Error using fmincon (line 225)
FMINCON requires the following inputs to be of data type double: 'UB'.
追答
那就装个2012把 就是有点大 快5G了 需要下载一会
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询