24小时热门版块排行榜    

查看: 766  |  回复: 2

dreamjie618

新虫 (初入文坛)

[求助] 基于Wilson理论的风力机叶片设计 已有2人参与

各位大神,下边是基于Wilson理论编写的风力机叶片设计程序,分别是主函数,目标函数和约束函数,但是调试有问题,运行出错,恳请各位大神帮忙看下原因,不胜感激!
报错显示如下
“错误使用 barrier (line 22)
Objective function is undefined at initial point. Fmincon cannot continue.

出错 fmincon (line 799)
    [X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = barrier(funfcn,X,A,B,Aeq,Beq,l,u,confcn,options.HessFcn,
    ...

出错 Wilson (line 19)
    [x,fval]=fmincon(@objfun,x0,[],[],[],[],[],[],@confun);”

Wilson.m
clear;
global r;
global R;
global phi;
global lamb;
V1=61.1;P=20000;lamb0=7;Cp=0.4;eta1=0.95;eta2=0.92;B=2;
Mu=17.9*10^-6;Cl=0.8361;Cd=0.0171;
D=sqrt(P/0.49/V1^3/Cp/eta1/eta2);
%D=round(D);
d=roundn(D,2);
R=d/2;
N=60*lamb0*V1/pi/d;
omiga=V1*lamb0/R;
fid=fopen('Wilson.txt','w');
for i=0.072:0.072:0.72
    r=i;a=0;b=0;
    lamb=lamb0*r/R;phi=atan((1-a)*V1/(1+b)/omiga/r);
    x0=[lamb0^2/2000+0.027*lamb0-0.038;10/lamb0/exp(12*r/R)];
    [x,fval]=fmincon(@objfun,x0,[],[],[],[],[],[],@confun);
    a=x(1);
    b=x(2);
    fprintf(fid,'%f\t%f\n',a,b);
end
fclose(fid);
p=load('Wilson.txt');
fid=fopen('wilson1.txt','w');
for i=1:10
    r=i;
    a=p(i,1);
    b=p(i,2);
    phi=atan(1-a)*V1/(1+b)/omiga/r;
    F=2/pi*acos(exp(-B/2*(R-r)/r*sin(phi)));
    S=8*pi*a*F*(1-a*F)*sin(phi)*sin(phi)/(1-a)^2/cos(phi);
    C=S*r/B/Cl;
    Cp=2/lamb0^2*b*(1-a)*F*lamb^4;
    fprintf(fid,'%f\t%f\t%f\t%f\n',F,phi,C,Cp);
end
fclose(fid);

objfun.m
function f=objfun(x)
global r;
global R;
global phi;
global lamb;
B=2;lamb0=7;
c=B/2*(R-r)/r/sin(phi);F=2/pi*acos(exp(-c));
f=-8/lamb0^2*x(2)*(1-x(1))*F*lamb^3;

confun.m
function[g,ceq]=confun(x)
global r;
global R;
global phi;
global lamb;
B=2;
c=B/2*(R-r)/r/sin(phi);F=2/pi*acos(exp(-c));
g=[];
ceq=x(1)*(1-x(1)*F)-x(2)*(1+x(2))*lamb^2;
回复此楼

» 猜你喜欢

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

chendequan

铁虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
可能初始值处目标函数值比较小导致的,x0(2)很小造成的。
QQ:516477448,真心帮助解决MATLAB相关问题,提供详细资料,Word文档明确具体问题及要求,尽力而为!
2楼2016-12-13 16:35:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
dreamjie618: 金币+20, ★★★很有帮助 2016-12-14 15:18:30
请检查你的目标函数和初始值,你可以将你目前的初值带入目标函数中,在对x0赋值的下一行输入objfun(x0),运行后可以看到得到的复数,改变x0的值,发现还是得到的复数,因此fmincon无法继续进行了。

另外不要用global了,直接用内嵌函数就行。
3楼2016-12-13 20:55:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dreamjie618 的主题更新
信息提示
请填处理意见