Maxima of a function using fminbnd
5 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Snirisa Gödel
il 31 Mar 2014
Commentato: Alan Weiss
il 1 Apr 2014
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 Commenti
Risposta accettata
Alan Weiss
il 31 Mar 2014
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 Commenti
Alan Weiss
il 1 Apr 2014
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
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!