如何将.M文件中solve得到的符号表达式用fmincon进行优化?
function f=va_optimization(x)syms va
c=0.001;
r=0.0141;
n=800;
w=2*pi*n/60;
beita=x(1);
P=x(2);
gamma=x(3);
ha=gamma*c;
h1=c+ha;
h2=c;
theta=atan(P/(pi*(2*r+ha)));
B1=(1-beita)*P*cos(theta);
u1=w*(r-c*gamma)*cos(theta)-va*sin(theta);
w1=w*(r-c*gamma)*sin(theta)-va*cos(theta);
u2=w*r*cos(theta)-va*sin(theta);
w2=w*r*sin(theta)-va*cos(theta);
SB1=(r-c*gamma)*(1-beita);
SB2=r*beita;
S=((r/2*sqrt(r^2+P^2/(4*pi^2))+(P^2/(4*pi^2)/2)*log(r+sqrt(r^2+P^2/(4*pi^2))))-((r-c*gamma)/2*sqrt((r-c*gamma)^2+P^2/(4*pi^2))+(P^2/(4*pi^2)/2)*log((r-c*gamma)+sqrt((r-c*gamma)^2+P^2/(4*pi^2)))))/P;
dp1=(6*w1*w2/c^2)*(beita*gamma/((1-beita)*w1+(1+gamma)^3*w2));
dp2=-(6*w1*w2/c^2)*((1-beita)*gamma/((1-beita)*w1+(1+gamma)^3*w2));
Fx1=(-u1/h1)*SB1;
Fx2=(-u2/h2)*SB2;
Fz1=(-(h1/2)*dp1-w1/h1)*SB1;
Fz2=(-(h2/2)*dp2-w2/h2)*SB2;
Fzz=-dp1*B1*S;
Fa=(Fx1+Fx2)*sin(theta)-(Fz1+Fz2)*cos(theta)-Fzz*cos(theta);
% Ff=3*va*r/L;
F=subs(Fa);
v=solve(F,'va');
va=v(1)
va是beita、P、gamma的函数,
现想要用fmincon或者其他函数对beita、P、gamma参数进行优化,va是符号表达式,怎么弄? 看看fmincon的用法,然后进行相应的转换 知道fmincon的用法,但不会转化,请花版主赐教
回复 #3 jsp613 的帖子
你要把符号表达式,转成成什么样子的形式? 函数形式,function vmainx0=;
lb=;%设置上边界
ub=;%设置下边界
options=optimset('largescale','off');
=fmincon(@va_optimization,x0,[],[],[],[],lb,ub,[],options)
fmincon只能对函数优化阿,va_optimization.m得到的va是符号表达式阿 这个问题用1stOpt求解可能更好一些. 可俺只会MATLAB,有人能直接回答我的问题吗?
以后有时间一定好好学一下1stOpt
[ 本帖最后由 eight 于 2007-10-29 19:06 编辑 ]
回复 #8 jsp613 的帖子
可能需要将solve算出来的,再编辑成一个m函数。最近也遇到这样的问题,楼主以后多指教 原帖由 无水1324 于 2007-10-31 11:37 发表 http://www.chinavib.com/forum/images/common/back.gif可能需要将solve算出来的,再编辑成一个m函数。最近也遇到这样的问题,楼主以后多指教
这是没有办法的办法。但是我的va表达式太长了,以至于整个计算机都无法运行了,实在不可取。无法进行优化下去。
版主高手阿,帮忙。
页:
[1]