matlab两个带参数的积分之和的最小值的问题。
显示 更早的评论
代码如下:
[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的每步变化考虑进去而不是每步计算后手动输入相应的句柄函数?
回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 输入命令 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!