matlab两个带参数的积分之和的最小值的问题。
Afficher commentaires plus anciens
代码如下:
[aa1,fval,exitflag] = fminsearch(@(t)funflag(t,T,Ri,Ro),0,optimset('LargeScale','on'))
function Qfun = funflag(t,T,Ri,Ro)
Qfun = integral2(@(r,z)pi.*r.*sqrt((t(1).*(3.0.*z.^2-2.5e1)+1.0).^2.*4.0+(t(1).*(3.0.*z.^2-2.5e1).*2.0+2.0).^2.*2.0+t(1).^2.*r.^2.*z.^2.*3.6e1).*(1.0./2.0e1),Ri,Ro,-T,T)+integral(@(r)pi.*r.^2.*(t(1).*5.0e1+1.0).*(3.0./1.0e2),Ri,Ro);
end
在用fminsearch和fminnuc求最小值时,如果调用的句柄函数如下则可以求出最小值,但是如果将调用的句柄函数改成下列形式
Qfun = integral2(@(r,z)pi.*r.*sqrt((t(1).*z.^2.*2.0+t(1).*(z.^2-5.0.^2)+1.0).^2.*4.0+(t(1).*z.^2.*4.0+t(1).*(z.^2-5.0.^2).*2.0+2.0).^2.*2.0+t(1).^2.*r.^2.*z.^2.*3.6e1).*(1.0./(4.0*5.0)),Ri,Ro,-T,T)+integral(@(r)pi.*r.^2.*(t(1).*2.0.*5.0.^2+1.0).*(3.0./(2.0.*5.0)),Ri,Ro);
也就是说仅仅用5.0.^2代替了2.5e1,最小值就无法求出正确值,请问这是怎么回事?
在实际操作过程中,我是想用
Qfun = integral2(@(r,z)pi.*r.*sqrt((t(1).*z.^2.*2.0+t(1).*(z.^2-T.^2)+1.0).^2.*4.0+(t(1).*z.^2.*4.0+t(1).*(z.^2-T.^2).*2.0+2.0).^2.*2.0+t(1).^2.*r.^2.*z.^2.*3.6e1).*(1.0./(4.0*T)),Ri,Ro,-T,T)+integral(@(r)pi.*r.^2.*(t(1).*2.0.*T.^2+1.0).*(3.0./(2.0.*T)),Ri,Ro);
也就是说T在每一步的求最小值中是变化的,但是如果直接写成上述形式也会无法求得正确的解,只有函数中只含有r和z时才可以计算出正确的值,请问如何改写可以将T的每步变化考虑进去而不是每步计算后手动输入相应的句柄函数?
Réponses (0)
Catégories
En savoir plus sur 输入命令 dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!