# Why function crashes when using conditional statements?

1 view (last 30 days)
Tara Behmanesh on 2 Jul 2020
Commented: Geoff Hayes on 5 Jul 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

Geoff Hayes on 2 Jul 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.

Geoff Hayes on 3 Jul 2020
Tara - you may want to review the chapter code to ensure that it is doing what you expect. I don't understand enough of what it is doing to offer any (good) advice.
Tara Behmanesh on 4 Jul 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 on 5 Jul 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.