马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
子程序
function va=vayouhua(x)
%syms beta gamma r3 c w theta
%beta=x(1);gamma=x(2);r3=x(3);c=x(4);w=x(5);theta=x(6);
va1=solve('(3*beta*(1-beta)*gamma^2*((r3-c*gamma)*w*r3*sin(theta)-va*r3*cos(theta))*(w*r3*sin(theta)-va*cos(theta))*cos(theta))/((1-beta)*((r3-c*gamma)*w*r3*sin(theta)-va*r3*cos(theta))+beta*r3*(1+gamma)^3*(w*r3*sin(theta)-va*cos(theta)))*(r3-c-c*gamma)-((1-beta)*(r3-c*gamma))/(c*(1+gamma))*va-beta*va=0','va');
%此处先解出va1的表达式而已
beta=sym(x(1));gamma=sym(x(2));r3=sym(x(3));c=sym(x(4));w=sym(x(5));theta=sym(x(6));
vaa=va1(1);
va=subs(vaa);
主程序
%main function
function vamain
clear all
clc
x0=[0.1 1 0.007 0.001 31.42 pi/4];%定义初始点
lb=[0.02 0.5 0.004 0.0005 10 15*pi/180];%设置上边界
ub=[0.2 2 0.01 0.002 50 75*pi/180];%设置下边界
options=optimset('largescale','off');
[x,fval,exitflag,output,lambda]=fmincon(@vayouhua,x0,[],[],[],[],lb,ub,[],options)
出错提示:
??? Conversion to double from sym is not possible.
Error in ==> finitedifferences at 171
gradf(gcnt,1) = (fplus-fCurrent)/CHG(gcnt);
Error in ==> optim\private\nlconst at 269
[gf,gnc,NEWLAMBDA,OLDLAMBDA,s]=finitedifferences(XOUT,x,funfcn,confcn,lb,ub,f,nc, ...
Error in ==> fmincon at 498
[X,FVAL,lambda,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...
Error in ==> vamain at 9
[x,fval,exitflag,output,lambda]=fmincon(@vayouhua,x0,[],[],[],[],lb,ub,[],optios)
什么原因,恳请高手调试,运行很快的
如果在另一个程序中先解出va1的表达式,把结果直接贴在子程序中而不是在子程序计算va1的表达式,程序没有错误,因此如何解决这个矛盾?或者有没有方法在子程序中调用计算va1的程序,这样也可以解决矛盾,如何调用? |