Maxima of a function using fminbnd
3 次查看(过去 30 天)
显示 更早的评论
I want to find the maximum of lambda for a function M(lambda,T), describing the radiation, for fixed values of T using the method fminbnd. Basically it is a well-known formula for radiation and I want to know if there is some obvious things that are wrong. So, I red through the help section and came up with this:
%
T1=3000; %Define parameter
T2=4000;
T3=5000;
fminbnd(@(lambda)planck(lambda,T1),0,1e-5)%Second bound is chosen arbitrary
fminbnd(@(lambda)planck(lambda,T1),0,1e-5)
fminbnd(@(lambda)planck(lambda,T1),0,1e-5)
All gives the same output..which is clearly wrong.
The function is defined by
%
function M=planck(lambda,T)
h=6.6256e-34;
c=2.9979e8;
k=1.3805e-23;
a=2*pi*h*c^2;
b=h*c/k./lambda./T;
M=-a./lambda.^5./(exp(b)-1); %I put a minus sign since I want to minimize the negative function
0 个评论
采纳的回答
Alan Weiss
2014-3-31
The problem is you are running into some scaling issues. Try scaling your problem so that the value of lambda is between 0 and 1.
scaledplanck = @(x,lambda)planck(x*1e-5,lambda);
fminbnd(@(lambda)scaledplanck(lambda,T1),0,1)
fminbnd(@(lambda)scaledplanck(lambda,T2),0,1)
fminbnd(@(lambda)scaledplanck(lambda,T3),0,1)
Alan Weiss
MATLAB mathematical toolbox documentation
2 个评论
Alan Weiss
2014-4-1
I suspected it from the start, but I saw it by plotting the functions for various values of T, and saw that fminbnd was not giving a correct answer.
There are various stopping criteria for optimization solvers, and one is called TolX, which stops the solver when steps are too small. This tolerance applies to fminbnd, and I believe that is why fminbnd stopped too soon.
Alan Weiss
MATLAB mathematical toolbox documentation
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Processing Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!