Filter löschen
Filter löschen

Problem with fzero

1 Ansicht (letzte 30 Tage)
Mehul Makwana
Mehul Makwana am 3 Nov. 2011
MAIN FUNCTION
function evaluation=dispersion_separable2(lambda2,m10,M1,M2)
global lambda Mass1 Mass2
Mass1=M1;
Mass2=M2;
m10;
lambda=sqrt(lambda2);
the_integral=dblquad(@integrand_separable2,-pi,pi,-pi,pi)/(4*pi^2);
evaluation=1-lambda^2*(2*M1-m10)*the_integral;
SECOND FUNCTION
function relation=integrand_separable2(alpha,beta);
global lambda Mass1 Mass2 m10
M1=Mass1;
M2=Mass2;
relation=(-cos(beta) * M1 * lambda ^ 2 - cos(beta) * M2 * lambda ^ 2 + 0.4e1 * cos(beta) - cos(alpha) * M1 * lambda ^ 2 - cos(alpha) * M2 * lambda ^ 2 + 0.4e1 * cos(alpha) - 0.24e2 + 0.14e2 * M1 * lambda ^ 2 + 0.30e2 * M2 * lambda ^ 2 - 0.2e1 * M1 ^ 2 * lambda ^ 4 - 0.10e2 * M2 ^ 2 * lambda ^ 4 + M2 ^ 3 * lambda ^ 6 - 0.12e2 * M1 * lambda ^ 4 * M2 + M2 * lambda ^ 6 * M1 ^ 2 + 0.2e1 * M2 ^ 2 * lambda ^ 6 * M1) / (0.66e2 - 0.96e2 * M1 * lambda ^ 2 - 0.96e2 * M2 * lambda ^ 2 + 0.36e2 * M1 ^ 2 * lambda ^ 4 + 0.36e2 * M2 ^ 2 * lambda ^ 4 - 0.4e1 * M2 ^ 3 * lambda ^ 6 + 0.104e3 * M1 * lambda ^ 4 * M2 - 0.28e2 * M2 * lambda ^ 6 * M1 ^ 2 - 0.28e2 * M2 ^ 2 * lambda ^ 6 * M1 + 0.2e1 * M1 * lambda ^ 8 * M2 ^ 3 + 0.2e1 * M1 ^ 3 * lambda ^ 8 * M2 + 0.4e1 * M1 ^ 2 * lambda ^ 8 * M2 ^ 2 - 0.4e1 * M1 ^ 3 * lambda ^ 6 - 0.32e2 * cos(alpha) - 0.4e1 * cos(beta) * M1 * lambda ^ 4 * M2 - 0.4e1 * cos(alpha) * M1 * lambda ^ 4 * M2 - 0.32e2 * cos(beta) - 0.2e1 * cos(alpha - beta) - 0.2e1 * cos(alpha + beta) + cos(0.2e1 * alpha) + cos(0.2e1 * beta) + 0.16e2 * cos(beta) * M2 * lambda ^ 2 + 0.16e2 * cos(alpha) * M1 * lambda ^ 2 + 0.16e2 * cos(beta) * M1 * lambda ^ 2 - 0.2e1 * cos(beta) * M1 ^ 2 * lambda ^ 4 - 0.2e1 * cos(beta) * M2 ^ 2 * lambda ^ 4 + 0.16e2 * cos(alpha) * M2 * lambda ^ 2 - 0.2e1 * cos(alpha) * M2 ^ 2 * lambda ^ 4 - 0.2e1 * cos(alpha) * M1 ^ 2 * lambda ^ 4);
AND I GET THE ERROR :
Error using ==> fzero at 316
FZERO cannot continue because user supplied function_handle ==> @(lambda2)dispersion_separable2(lambda2,1.2,1,1)
failed with the error below.
Index exceeds matrix dimensions.
I BELIEVE THE ISSUE IS WITH THE LONG EXPRESSION, ALTHOUGH I'M NOT SURE HOW THIS COULD RELATE TO THE ERROR SHOWN ABOVE ?!
ANY HELP WOULD BE VERY MUCH APPRECIATED. :)

Antworten (2)

Ora Zyto
Ora Zyto am 7 Nov. 2011
Using global variables is a very bad idea. It seems like you're working exclusively with scalars, including M1 / M2 / Mass1 / Mass2. FZERO expects the function to return a scalar. Are all your variables indeed scalars? Could the values of the global variables have changed and they are now vectors / matrices?
Consider not using global variables. The error comes from a dimension mismatch. It would be helpful to include your actual call to FZERO.
Ora

Walter Roberson
Walter Roberson am 7 Nov. 2011
The only possibility I am coming up with is that you redefined sin() or cos() as functions, or that integrand_separable2 is defined within a nested scope that defines sin() or cos() as variables.
I suggest that at the command line, you invoke
dbstop if error
dbstop if caught error
and then run again; when it stops, examines everything carefully.

Kategorien

Mehr zu Historical Contests finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by