jsp613 发表于 2007-10-28 19:13

如何将.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是符号表达式,怎么弄?

花如月 发表于 2007-10-28 19:47

看看fmincon的用法,然后进行相应的转换

jsp613 发表于 2007-10-28 20:05

知道fmincon的用法,但不会转化,请花版主赐教

花如月 发表于 2007-10-28 20:11

回复 #3 jsp613 的帖子

你要把符号表达式,转成成什么样子的形式?

jsp613 发表于 2007-10-28 20:37

函数形式,function vmain
x0=;
lb=;%设置上边界
ub=;%设置下边界
options=optimset('largescale','off');
=fmincon(@va_optimization,x0,[],[],[],[],lb,ub,[],options)
fmincon只能对函数优化阿,va_optimization.m得到的va是符号表达式阿

xjzuo 发表于 2007-10-29 10:34

这个问题用1stOpt求解可能更好一些.

jsp613 发表于 2007-10-29 14:24

可俺只会MATLAB,有人能直接回答我的问题吗?
以后有时间一定好好学一下1stOpt

[ 本帖最后由 eight 于 2007-10-29 19:06 编辑 ]

无水1324 发表于 2007-10-31 11:37

回复 #8 jsp613 的帖子

可能需要将solve算出来的,再编辑成一个m函数。最近也遇到这样的问题,楼主以后多指教

jsp613 发表于 2007-10-31 14:31

原帖由 无水1324 于 2007-10-31 11:37 发表 http://www.chinavib.com/forum/images/common/back.gif
可能需要将solve算出来的,再编辑成一个m函数。最近也遇到这样的问题,楼主以后多指教
这是没有办法的办法。但是我的va表达式太长了,以至于整个计算机都无法运行了,实在不可取。无法进行优化下去。
版主高手阿,帮忙。
页: [1]
查看完整版本: 如何将.M文件中solve得到的符号表达式用fmincon进行优化?