24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1521  |  回复: 7

muyouyou

新虫 (初入文坛)

[求助] matlab优化求解中遇到问题,望大神指点。。。已有1人参与

在matlab中
目标函数function=myfun(x)
f=0.5*1.935*10^(-5)*x(1)^2*x(2)*(x(3)+1.5)+0.5*5.75*x(2)^3*x(3)/x(1)^4;
约束条件function[C,Ceq]=mycon(x)
c=[1.35*10^(5)/x(1)+12.76*10^(6)*x(2)^2-6.9*10^5*x(1)*x(2)/(12.56*x(1)^3*x(2)-12.56*x(1)^4);x(1)^2*10^10/(x(2)*x(3));(x(1)*x(3)+x(1))/x(2)+86.25*10^3/x(2);x(1)*x(3)+1.5*x(1)-215];
ceq=[];
主程序:
x0=[38.6 191 4.06];
lb=[25 185 3.5];
ub=[40 250 7.0];
options=optimset('LargeScale','off');
[x,fval]=fmincon(‘myfun’,x0,[],[],[],[],lb,ub,'mycon')
运行结果为:??? Error using ==> fmincon
FMINCON cannot continue because user supplied nonlinear constraint function
failed with the following error:
One or more output arguments not assigned during call to 'F:\software\matlab\work\mycon.m (mycon)'.
本人初接触matlab,总是出现这种错误,不知是怎么回事。望高手指点。。。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
约束条件是非线性的。
对于非线性约束情况,fmincon按附图1中格式调用。
附图1中正是一个例子。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2014-11-05 21:21:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
2楼: Originally posted by 月只蓝 at 2014-11-05 21:21:38
约束条件是非线性的。
对于非线性约束情况,fmincon按附图1中格式调用。
附图1中正是一个例子。

重新上传附图1。
matlab优化求解中遇到问题,望大神指点。。。
附图1.png

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
3楼2014-11-05 21:22:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muyouyou

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by 月只蓝 at 2014-11-05 21:22:11
重新上传附图1。

附图1.png
...

function Fmincon
>>clear all;clc
>> x0=[38.6 191 4.06];
>> lb=[25 185 3.5];
>> ub=[40 250 7.0];
>> [x,fval]=fmincon(@func,x0,[],[],[],[],lb,ub,@NlinCons)
%---------------------------------------------------------
function[C,Ceq]=NlinCons(x)
c=[1.35*10^(5)/x(1)+12.76*10^(6)*x(2)^2-6.9*10^5*x(1)*x(2)/(12.56*x(1)^3*x(2)-12.56*x(1)^4);x(1)^2*10^10/(x(2)*x(3));(x(1)*x(3)+x(1))/x(2)+86.25*10^3/x(2);x(1)*x(3)+1.5*x(1)-215];
ceq=[];
%---------------------------------------------------------
functionf=func(x)
f=0.5*1.935*10^(-5)*x(1)^2*x(2)*(x(3)+1.5)+0.5*5.75*x(2)^3*x(3)/x(1)^4
我按你给的步骤计算了一下,结果是??? Error: File: F:\software\matlab\work\Fmincon.m Line: 3 Column: 1
Missing variable or function..是怎么回事呢?谢谢你了。。。
4楼2014-11-06 09:32:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
4楼: Originally posted by muyouyou at 2014-11-06 09:32:10
function Fmincon
>>clear all;clc
>> x0=;
>> lb=;
>> ub=;
>> =fmincon(@func,x0,[],[],[],[],lb,ub,@NlinCons)
%------------------------------------------------------ ...

CODE:
function test_1106
clear all;clc,format long
tic,
x0=[38.6 191 4.06];
lb=[25 185 3.5];
ub=[40 250 7.0];
OPTIONS=optimset('MaxFunEvals',5000,'TolFun',1e-6,'TolX',1e-6,'Algorithm','active-set');%,'Algorithm','interior-point','sqp','active-set');
[x,fval]=fmincon(@func,x0,[],[],[],[],lb,ub,@NlinCons,OPTIONS);
[ff fff]=NlinCons(x);
fprintf('\n\n计算结果:\n');
fprintf(' \t目标函数值 fval = %.6e\n\n',fval);
fprintf(' \t约束条件1函数值 f1 = %.6e\n',ff(1));
fprintf(' \t约束条件2函数值 f2 = %.6e\n',ff(2));
fprintf(' \t约束条件3函数值 f3 = %.6e\n',ff(3));
fprintf(' \t约束条件4函数值 f4 = %.6e\n',ff(4));
fprintf('\n\t参数 x1 = %.6f',x(1))
fprintf('\n\t参数 x2 = %.6f',x(2))
fprintf('\n\t参数 x3 = %.6f',x(3))
%---------------------------------------------------------
function[C,Ceq]=NlinCons(x)
C=[1.35*10^(5)/x(1)+12.76*10^(6)*x(2)^2-6.9*10^5*x(1)*x(2)/(12.56*x(1)^3*x(2)-12.56*x(1)^4);x(1)^2*10^10/(x(2)*x(3));(x(1)*x(3)+x(1))/x(2)+86.25*10^3/x(2);x(1)*x(3)+1.5*x(1)-215];
Ceq=[];

%C=[];
%Ceq=[1.35*10^(5)/x(1)+12.76*10^(6)*x(2)^2-6.9*10^5*x(1)*x(2)/(12.56*x(1)^3*x(2)-12.56*x(1)^4);x(1)^2*10^10/(x(2)*x(3));(x(1)*x(3)+x(1))/x(2)+86.25*10^3/x(2);x(1)*x(3)+1.5*x(1)-215];

%---------------------------------------------------------
function f=func(x)
f=0.5*1.935*10^(-5)*x(1)^2*x(2)*(x(3)+1.5)+0.5*5.75*x(2)^3*x(3)/x(1)^4;
toc

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
5楼2014-11-06 09:57:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
4楼: Originally posted by muyouyou at 2014-11-06 09:32:10
function Fmincon
>>clear all;clc
>> x0=;
>> lb=;
>> ub=;
>> =fmincon(@func,x0,[],[],[],[],lb,ub,@NlinCons)
%------------------------------------------------------ ...

5楼的代码全部复制进一个m文件,运行即可。运行成功之前,一个字母都不要改。
运行成功后,你再看看,是否可以改改初值。
特别需要注意的是,请检查约束条件中的等式约束和非等式约束是否定义正确。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
6楼2014-11-06 09:59:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muyouyou

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by 月只蓝 at 2014-11-06 09:59:48
5楼的代码全部复制进一个m文件,运行即可。运行成功之前,一个字母都不要改。
运行成功后,你再看看,是否可以改改初值。
特别需要注意的是,请检查约束条件中的等式约束和非等式约束是否定义正确。...

知道了,特别感谢。。。
7楼2014-11-11 19:14:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muyouyou

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by 月只蓝 at 2014-11-06 09:59:48
5楼的代码全部复制进一个m文件,运行即可。运行成功之前,一个字母都不要改。
运行成功后,你再看看,是否可以改改初值。
特别需要注意的是,请检查约束条件中的等式约束和非等式约束是否定义正确。...

x1=[21,26,31,21,26,31,21,26,31,21,26,31,21,26,31,21,26,31];
x2=[133,143,153,133,143,153,143,153,133,153,133,143,143,153,133,153,133,143];
x3=[3.9,4.4,4.9,4.4,4.9,3.9,3.9,4.4,4.9,4.9,3.9,4.4,4.9,3.9,4.4,4.4,4.9,3.9];
y=[40.69803,40.24597,39.66466,39.65027,39.3111,41.64728,39.43865,39.07176,42.09825,36.28181,42.55311,41.77374,37.45602,40.11952,43.03311,37.21668,40.57048,42.8215];
如何拟合成y=f(x1,x2,x3)的多项式,望高手指点指点。。。
8楼2014-11-11 19:28:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 muyouyou 的主题更新
信息提示
请填处理意见