Why function crashes when using conditional statements?

3 visualizaciones (últimos 30 días)
Tara Behmanesh
Tara Behmanesh el 2 de Jul. de 2020
Comentada: Geoff Hayes el 5 de Jul. de 2020
Hi In function "chapter" there is a statement that for some reason denominator of a fraction in that statement my be zero. So I need to check and see if it is less than a particular amount (for example 0.1) I should replace the denominator with 1 . But when i tried if-else and switch-case and both of them caused crash. Hope you can help me :) Sorry for my bad English.
Matlab R2018a

Respuesta aceptada

Geoff Hayes
Geoff Hayes el 2 de Jul. de 2020
Tara - try replacing the switch with an if and use a tolerance check (note that using a switch statement for doubles or floats will not work as expected because of how floating point numbers are represented - see Floating-Point Numbers for more details)
pa=2*0.11*(1-(F(3)-Fa0)/Fa0);
pc=2*0.11*(F(3)-Fa0)/Fa0;
% the amount of pc should be checked .if pc is less than eps it should be
% replaced with "1" in ''sqrt(pa/pc)'' term.
if abs(pc) < eps
ra=-k.*sqrt(pa).*(pa-(pc/kp.*pa).^2);
else
ra=-k.*sqrt(pa/pc).*(pa-(pc/kp.*pa).^2);
end
Note tha I changed the above code to use eps instead of 0.1 which may or may not be appropriate for your code.
  6 comentarios
Tara Behmanesh
Tara Behmanesh el 4 de Jul. de 2020
Editada: Tara Behmanesh el 4 de Jul. de 2020
Hi again I ran my function and let it be for some minutes and then I paused it I think the problem is in this line but I have no idea what it is about? Can you guide me?
In ode45.m Line 344
err=absh*norm((fE)) ./ max(max(abs(y),abs(ynew)),threshold),inf);
if nonNegative && (err <= rtol) && any(ynew(idxNonNegative)<0)
I understand that in code above there are many variables that I didn't mention the definition but I was wondering maybe you know what is that if statement about? (What it checks?) Really appreciated
Geoff Hayes
Geoff Hayes el 5 de Jul. de 2020
Tara - that code is part of the ode45 function from MATLAB which would have been executing when you paused the program. I don't think that there is any reason to believe that there something incorrect about this line. I still think that you need to review your chapter code.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by