[已解决] fmincon函数优化问题(初始值报错)

[复制链接]
秋天的尾影 发表于 2021-10-7 23:41:19
本帖最后由 秋天的尾影 于 2021-10-11 19:31 编辑

拟对含有8个参数(x1 x2 x3 x4 x5 x6 x7 x8)的函数进行优化求解,优化函数为fmincon,代码如下,但程序总是提示Failure in initial user-supplied objective function evaluation. FMINCON cannot continue. 不知道哪里出错了,另外就是最终需要输出8个参数的值,不知道这部分([x1,fval,exitflag])怎么表达。麻烦哪位大神抽空指点一二。
clc
clear all
c1=3.74e-16;     
c2=1.44e-2;     
W=[3400,3600,3800,4000,4200,4400,4600,4800]'*1e-9;;
Emi=[0.85,0.75,0.67,0.6,0.55,0.5,0.48,0.45]';
n=length(W);
T0=700; %K
T1=800;
V0=c1./W.^5./(exp(c2./W./T0)-1);
V1=Emi.*c1./W.^5./(exp(c2./W./T1)-1);
%pre-processing
D=c2./W/T0-log(V1./V0);

syms x1 x2 x3 x4 x5 x6 x7 x8;
var=[x1 x2 x3 x4 x5 x6 x7 x8]';
ele=c2./W.*1./(var+D);
for i=1:n     %n=8
    Ele(i)=c2/W(i)*1./(var(i)+D(i))-1/n*sum(ele);
end
f=sum(Ele.^2);
fun=matlabFunction(f);

x0=ones(1,n)*log(0.5); %initial value is set to 0.5
lb=-0.9*ones(1,n);
ub=-0.1*ones(1,n);
options=optimset('Algorithm', 'interior-point');
[x1,fval,exitflag]=fmincon(fun,x0,[],[],[],[],lb,ub,[],options)



最佳答案


TouAkira 发表于 2021-10-12 07:05:22
秋天的尾影 发表于 2021-10-11 07:32
不好意思啊,由于代码不全,耽误您时间了,我重新编辑了一下,有空的话麻烦您再帮我看看 ...

转化为函数的那句要改成
fun = matlabFunction( f, 'vars', { [ x1, x2, x3, x4, x5, x6, x7, x8 ] } );
算出来
x1 =   -0.1838   -0.3068   -0.4176   -0.5259   -0.6109   -0.7042   -0.7430   -0.8055
fval =   2.1765e-11
exitflag =     2

5 条回复


TouAkira 发表于 2021-10-8 08:16:51
你这代码不全,缺一堆 c2 W D 之类变量的数值
发帖请先仔细看发帖提示和置顶帖子,尤其是《 你知道如何正确提问么? 》、《 为什么你的帖子没人回 》这些帖子

请先去看一看,想一想,最最基本的"方便你自己、也方便回答者"的几条指南
粘贴一个简单的程序.别人可以直接复制运行(尽量避免使用附件,Simulink模型除外)

都做到了吗?

从你这个报错信息来看,一般就是提供的初值点无效,比如出现了 0/0 之类情况导致算不出来具体数值。
除非你确切地知道初值点代入x0能算出来,一般都要避免把初值向量的每个元素都设置成相同的——这种懒人设置非常容易导致出现 0/0 等情况

秋天的尾影 发表于 2021-10-11 19:32:27
本帖最后由 秋天的尾影 于 2021-10-11 19:48 编辑
TouAkira 发表于 2021-10-8 08:16
你这代码不全,缺一堆 c2 W D 之类变量的数值
发帖请先仔细看发帖提示和置顶帖子,尤其是《 你知道如何正确 ...

不好意思啊,由于代码不全,耽误您时间了,我重新编辑了一下,有空的话麻烦您再帮我看看

TouAkira 发表于 2021-10-12 07:05:22
秋天的尾影 发表于 2021-10-11 07:32
不好意思啊,由于代码不全,耽误您时间了,我重新编辑了一下,有空的话麻烦您再帮我看看 ...

转化为函数的那句要改成
fun = matlabFunction( f, 'vars', { [ x1, x2, x3, x4, x5, x6, x7, x8 ] } );
算出来
x1 =   -0.1838   -0.3068   -0.4176   -0.5259   -0.6109   -0.7042   -0.7430   -0.8055
fval =   2.1765e-11
exitflag =     2
回复此楼

秋天的尾影 发表于 2021-10-12 12:55:03
TouAkira 发表于 2021-10-12 07:05
转化为函数的那句要改成
fun = matlabFunction( f, 'vars', { [ x1, x2, x3, x4, x5, x6, x7, x8 ] } );
...

厉害厉害!问题终于解决了,非常感谢

秋天的尾影 发表于 前天 00:09
TouAkira 发表于 2021-10-12 07:05
转化为函数的那句要改成
fun = matlabFunction( f, 'vars', { [ x1, x2, x3, x4, x5, x6, x7, x8 ] } );
...

不好意思啊,再次麻烦大神一下,因为这个问题比较着急,网上找了一圈也没找到类似的,采用fmincon函数优化的时候发现返回的最小值与预期的规律不符,具体问题在另外一个帖子里,大神有空的话,拜托帮我看看
https://www.ilovematlab.com/thread-611112-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表